diff --git a/lang/en.json b/lang/en.json index a2a5055..87a5cde 100644 --- a/lang/en.json +++ b/lang/en.json @@ -353,7 +353,33 @@ "Bane": "Bane", "CreatureSkill": "Skill", "NoSkill": "No skill", - "Days": "Days" + "Days": "Days", + "RangedModifiers": "Ranged Modifiers", + "Range": "Range", + "RangeShort": "Short Range", + "RangeNormal": "Normal Range", + "RangeLong": "Long Range", + "RangeExtreme": "Extreme Range", + "Aim": "Aim", + "LaserSight": "Laser Sight", + "FastTarget": "Fast-Moving Target", + "Cover": "Cover / Diving", + "Prone": "Prone Target", + "MeleeModifiers": "Melee Modifiers", + "Parry": "Parry (defender's Melee score)", + "Dodge": "Target Dodging", + "DodgeDM": "Dodge DM", + "FireMode": "Fire Mode", + "AutoSingle": "Single", + "AutoBurst": "Burst", + "AutoFull": "Full Auto", + "AutoNoAim": "Burst / Full-Auto: all aiming advantages are cancelled.", + "AutoBurstInfo": "Burst (Auto {level}) — +{level} damage — ammo: {ammo}", + "AutoFullInfo": "Full Auto (Auto {level}) — {level} attacks — ammo: {ammo}", + "ScopeActive": "Scope active", + "ScopeHint": "Scope trait: ignores the automatic Extreme Range rule beyond 100m, provided the traveller aims before firing. Select the actual range below.", + "ZeroGActive": "Zero-G", + "ZeroGHint": "Zero-G trait: this weapon has little or no recoil. It can be used in low or zero gravity without requiring an Athletics (DEX) test. No additional DM required in those conditions." }, "Timeframes": { "Normal": "Normal", @@ -369,7 +395,22 @@ "Effect": "Effect", "Dice": "Dice", "Result": "Result", - "DiceModifier": "Dice Modifier" + "DiceModifier": "Dice Modifier", + "APIgnore": "AP", + "APIgnoreHint": "This weapon ignores {ap} points of armor (AP trait)", + "BlastArea": "Blast", + "BlastHint": "Blast weapon: damage is applied to all targets within the blast radius (in meters). Dodge reactions cannot be used, but targets may dive for cover. Cover between target and explosion center applies.", + "BlastRules": "No dodge — dive for cover possible", + "StunWeapon": "Stun Weapon — END damage only", + "StunHint": "Stun weapon: damage is only deducted from END (after armor). If END reaches 0, the target is incapacitated for a number of rounds equal to the difference between damage dealt and the target's END. Fully healed after 1 hour of rest." + }, + "Radiation": { + "Badge": "Radiation Weapon — RADs", + "Hint": "This weapon emits radiation. On a successful attack, the target receives 2D×20 additional rads. Click the button to roll radiation damage.", + "Title": "Radiation Damage", + "Rads": "RADs", + "RollButton": "Roll RADs", + "Rules": "See p.78 for radiation effects (nausea, illness, death). ×3 multiplier for starship-scale weapons." } }, "Items": { @@ -458,6 +499,29 @@ "Weightless": "Weightless", "Quantity": "Quantity" }, + "WeaponTraits": { + "SectionTitle": "Traits", + "AP": "AP (Armor Piercing)", + "APHint": "Ignores X points of armor protection", + "Auto": "Auto", + "AutoHint": "Automatic fire — Burst and Full-Auto modes available", + "Blast": "Blast", + "BlastHint": "Explosion radius in meters", + "Bulky": "Bulky", + "BulkyHint": "Requires STR 9+ or suffer negative DM", + "VeryBulky": "Very Bulky", + "VeryBulkyHint": "Requires STR 12+ or suffer negative DM", + "Stun": "Stun", + "StunHint": "Non-lethal damage — deducted from END only", + "Smart": "Smart", + "SmartHint": "Guided projectiles — DM = TL difference (min +1, max +6)", + "Radiation": "Radiation", + "RadiationHint": "Inflicts 2D×20 rads on target", + "Scope": "Scope", + "ScopeHint": "Ignores extreme range rule (>100m) if aiming", + "ZeroG": "Zero-G", + "ZeroGHint": "No recoil — no Athletics check needed in microgravity" + }, "Durations": { "Seconds": "Seconds", "Minutes": "Minutes", @@ -565,10 +629,18 @@ }, "Notifications": { "HealingApplied": "{name} has been healed for {amount} points.", - "DamageApplied": "{name} has taken {amount} damage." + "DamageApplied": "{name} has taken {amount} damage.", + "DamageAppliedAP": "{name} has taken {amount} damage (armor reduced by {ap} from AP trait).", + "BulkyPenalty": "Bulky weapon: insufficient STR (DM too low). Penalty {penalty} applied to roll.", + "VeryBulkyPenalty": "Very Bulky weapon: insufficient STR (DM too low). Penalty {penalty} applied to roll.", + "StunDamageApplied": "{name} took {amount} stun damage (END only).", + "StunIncapacitated": "{name} is incapacitated for {rounds} round(s)! (END reduced to 0)", + "AmmoUsed": "{weapon}: {used} round(s) expended. Magazine remaining: {remaining}.", + "AmmoEmpty": "{weapon}: magazine empty after this shot!", + "NoAmmo": "{weapon}: magazine empty! Reload before firing." }, "Errors": { - "NoTokenSelected": "No token selected. Select a token on the scene before applying.", + "NoTokenSelected": "No active target. Target a token on the scene before applying.", "InvalidRollFormula": "Invalid roll formula." } }, diff --git a/lang/fr.json b/lang/fr.json index 3680f32..62ece4c 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -353,7 +353,33 @@ "Bane": "Désavantage", "CreatureSkill": "Compétence", "NoSkill": "Aucune compétence", - "Days": "Jours" + "Days": "Jours", + "RangedModifiers": "Modificateurs de tir", + "Range": "Portée", + "RangeShort": "Courte portée", + "RangeNormal": "Portée normale", + "RangeLong": "Longue portée", + "RangeExtreme": "Portée extrême", + "Aim": "Visée", + "LaserSight": "Pointeur laser", + "FastTarget": "Cible bougeant vite", + "Cover": "À couvert / Plongé", + "Prone": "À plat ventre", + "MeleeModifiers": "Modificateurs de mêlée", + "Parry": "Parade (score Mêlée du défenseur)", + "Dodge": "Esquive de la cible", + "DodgeDM": "MD Esquive", + "FireMode": "Mode de tir", + "AutoSingle": "Simple", + "AutoBurst": "Rafale", + "AutoFull": "Auto complet", + "AutoNoAim": "Rafale / Auto : les avantages de la visée sont annulés.", + "AutoBurstInfo": "Rafale (Auto {level}) — +{level} dégâts — munitions: {ammo}", + "AutoFullInfo": "Auto complet (Auto {level}) — {level} attaques — munitions: {ammo}", + "ScopeActive": "Viseur actif", + "ScopeHint": "Trait Viseur : ignore la règle Portée Extrême automatique au-delà de 100m, à condition de viser avant de tirer. Choisissez la portée réelle dans le sélecteur ci-dessous.", + "ZeroGActive": "Zéro-G", + "ZeroGHint": "Trait Zéro-G : cette arme a peu ou pas de recul. Elle peut être utilisée en gravité faible ou nulle sans nécessiter de test d'Athlétisme (DEX). Aucun MD supplémentaire requis dans ces conditions." }, "Timeframes": { "Normal": "Normal", @@ -369,7 +395,22 @@ "Effect": "Effet", "Dice": "Dés", "Result": "Résultat", - "DiceModifier": "Modificateur de dés" + "DiceModifier": "Modificateur de dés", + "APIgnore": "AP", + "APIgnoreHint": "Cette arme ignore {ap} points d'armure (trait AP)", + "BlastArea": "Explosion", + "BlastHint": "Arme à explosion : les dégâts sont infligés à toutes les cibles dans le rayon indiqué (en mètres). Pas d'esquive possible, mais possibilité de plonger à couvert. Le couvert entre la cible et le centre de l'explosion s'applique.", + "BlastRules": "Pas d'esquive — plonger à couvert possible", + "StunWeapon": "Arme Incapacitante — dégâts END uniquement", + "StunHint": "Arme incapacitante : les dégâts sont déduits uniquement de l'END (après armure). Si l'END atteint 0, la cible est neutralisée pendant un nombre de rounds égal à la différence entre les dégâts et l'END initiale. Guérison complète après 1h de repos." + }, + "Radiation": { + "Badge": "Arme à Rayonnement — RADs", + "Hint": "Cette arme émet des radiations. En cas d'attaque réussie, la cible reçoit 2D×20 rads supplémentaires. Cliquez le bouton pour lancer les dégâts de RAD.", + "Title": "Dégâts de Rayonnement", + "Rads": "RADs", + "RollButton": "Lancer RADs", + "Rules": "Consultez p.78 pour l'effet des radiations (nausées, maladies, mort). Multiplicé ×3 pour une arme à l'échelle spatiale." } }, "Items": { @@ -458,6 +499,29 @@ "Weightless": "Aucun Poids", "Quantity": "Quantité" }, + "WeaponTraits": { + "SectionTitle": "Traits", + "AP": "AP (Perforant)", + "APHint": "Ignore X points de protection d'armure", + "Auto": "Auto", + "AutoHint": "Tir automatique — Rafale et Auto complet disponibles", + "Blast": "Explosion", + "BlastHint": "Rayon de l'explosion en mètres", + "Bulky": "Encombrant", + "BulkyHint": "Requiert FOR 9+ sinon MD négatif", + "VeryBulky": "Très Encombrant", + "VeryBulkyHint": "Requiert FOR 12+ sinon MD négatif", + "Stun": "Incapacitante", + "StunHint": "Dégâts non létaux — déduits uniquement de l'END", + "Smart": "Intelligente", + "SmartHint": "Projectiles guidés — MD = différence de NT (min +1, max +6)", + "Radiation": "Rayonnement", + "RadiationHint": "Inflige 2D×20 rads à la cible", + "Scope": "Viseur", + "ScopeHint": "Ignore la règle portée extrême (>100m) si le tireur vise", + "ZeroG": "Zéro-G", + "ZeroGHint": "Pas de recul — aucun jet d'Athlétisme requis en microgravité" + }, "Durations": { "Seconds": "Secondes", "Minutes": "Minutes", @@ -565,10 +629,18 @@ }, "Notifications": { "HealingApplied": "{name} a été soigné(e) de {amount} points.", - "DamageApplied": "{name} a subi {amount} dégâts." + "DamageApplied": "{name} a subi {amount} dégâts.", + "DamageAppliedAP": "{name} a subi {amount} dégâts (armure réduite de {ap} par AP).", + "BulkyPenalty": "Arme Encombrante : FOR insuffisante (MD FOR trop faible). Pénalité {penalty} appliquée au jet.", + "VeryBulkyPenalty": "Arme Très Encombrante : FOR insuffisante (MD FOR trop faible). Pénalité {penalty} appliquée au jet.", + "StunDamageApplied": "{name} a subi {amount} dégâts incapacitants (END seulement).", + "StunIncapacitated": "{name} est neutralisé(e) pour {rounds} round(s) ! (END réduite à 0)", + "AmmoUsed": "{weapon} : {used} munition(s) consommée(s). Chargeur restant : {remaining}.", + "AmmoEmpty": "{weapon} : chargeur vide après ce tir !", + "NoAmmo": "{weapon} : chargeur vide ! Rechargez avant de tirer." }, "Errors": { - "NoTokenSelected": "Aucun token sélectionné. Sélectionnez un token sur la scène avant d'appliquer.", + "NoTokenSelected": "Aucune cible active. Ciblez un token sur la scène avant d'appliquer.", "InvalidRollFormula": "Formule de jet invalide." } }, diff --git a/mgt2.bundle.js b/mgt2.bundle.js index 0ed7dd8..c49c89f 100644 --- a/mgt2.bundle.js +++ b/mgt2.bundle.js @@ -403,12 +403,18 @@ class WeaponData extends PhysicalItemData { schema.damage = new fields$4.StringField({ required: false, blank: true, trim: true }); schema.magazine = new fields$4.NumberField({ required: false, initial: 0, min: 0, integer: true }); schema.magazineCost = new fields$4.NumberField({ required: false, initial: 0, min: 0, integer: true }); - schema.traits = new fields$4.ArrayField( - new fields$4.SchemaField({ - name: new fields$4.StringField({ required: true, blank: true, trim: true }), - description: new fields$4.StringField({ required: false, blank: true, trim: true }) - }) - ); + schema.traits = new fields$4.SchemaField({ + ap: new fields$4.NumberField({ required: false, initial: 0, min: 0, integer: true }), + auto: new fields$4.NumberField({ required: false, initial: 0, min: 0, integer: true }), + blast: new fields$4.NumberField({ required: false, initial: 0, min: 0, integer: true }), + bulky: new fields$4.BooleanField({ required: false, initial: false }), + veryBulky: new fields$4.BooleanField({ required: false, initial: false }), + stun: new fields$4.BooleanField({ required: false, initial: false }), + smart: new fields$4.BooleanField({ required: false, initial: false }), + radiation: new fields$4.BooleanField({ required: false, initial: false }), + scope: new fields$4.BooleanField({ required: false, initial: false }), + zeroG: new fields$4.BooleanField({ required: false, initial: false }) + }); schema.options = new fields$4.ArrayField( new fields$4.SchemaField({ name: new fields$4.StringField({ required: true, blank: true, trim: true }), @@ -417,6 +423,23 @@ class WeaponData extends PhysicalItemData { ); return schema; } + + /** Returns a compact display string of active traits (e.g. "AP 2, Auto 3, Blast 5, Bulky") */ + static getTraitsSummary(traits) { + if (!traits) return ""; + const parts = []; + if (traits.ap > 0) parts.push(`AP ${traits.ap}`); + if (traits.auto > 0) parts.push(`Auto ${traits.auto}`); + if (traits.blast > 0) parts.push(`Blast ${traits.blast}`); + if (traits.bulky) parts.push(game.i18n.localize("MGT2.WeaponTraits.Bulky")); + if (traits.veryBulky) parts.push(game.i18n.localize("MGT2.WeaponTraits.VeryBulky")); + if (traits.stun) parts.push(game.i18n.localize("MGT2.WeaponTraits.Stun")); + if (traits.smart) parts.push(game.i18n.localize("MGT2.WeaponTraits.Smart")); + if (traits.radiation) parts.push(game.i18n.localize("MGT2.WeaponTraits.Radiation")); + if (traits.scope) parts.push(game.i18n.localize("MGT2.WeaponTraits.Scope")); + if (traits.zeroG) parts.push(game.i18n.localize("MGT2.WeaponTraits.ZeroG")); + return parts.join(", "); + } } const fields$3 = foundry.data.fields; @@ -943,7 +966,10 @@ class ActorCharacter { } updateData["system.inventory.weight"] = onHandWeight; - updateData["system.states.encumbrance"] = onHandWeight > $this.system.inventory.encumbrance.normal; + // Use the threshold from updateData if it was just recalculated (e.g. STR/END talent change), + // otherwise fall back to the persisted value. + const encumbranceThreshold = updateData["system.inventory.encumbrance.normal"] ?? $this.system.inventory.encumbrance.normal; + updateData["system.states.encumbrance"] = onHandWeight > encumbranceThreshold; await $this.update(updateData); @@ -964,6 +990,8 @@ class ActorCharacter { let heavy = normal * 2; foundry.utils.setProperty(changed, "system.inventory.encumbrance.normal", normal); foundry.utils.setProperty(changed, "system.inventory.encumbrance.heavy", heavy); + // Also update the encumbrance state flag against the new threshold + foundry.utils.setProperty(changed, "system.states.encumbrance", $this.system.inventory.weight > normal); } //console.log(foundry.utils.getProperty(changed, "system.characteristics.strength.value")); @@ -1017,25 +1045,39 @@ class ActorCharacter { // $this.update({ system: { characteristics: data } }); // } - static applyDamage($this, amount, { ignoreArmor = false } = {}) { - if (isNaN(amount) || amount === 0) return; + static async applyDamage($this, amount, { ignoreArmor = false, ap = 0, stun = false } = {}) { + if (isNaN(amount) || amount === 0) return { incapRounds: 0 }; const rank1 = $this.system.config.damages.rank1; const rank2 = $this.system.config.damages.rank2; const rank3 = $this.system.config.damages.rank3; + if (amount < 0) amount = Math.abs(amount); + + if (!ignoreArmor) { + const rawArmor = $this.system.inventory?.armor ?? 0; + const armorValue = Math.max(0, rawArmor - ap); + amount = Math.max(0, amount - armorValue); + if (amount === 0) return { incapRounds: 0 }; + } + + // ── Stun / Incapacitating: only deduct from endurance (rank3) ───────── + if (stun) { + const endKey = rank3; // "endurance" by default + const prevEnd = $this.system.characteristics[endKey].value; + const newEnd = Math.max(0, prevEnd - amount); + const incapRounds = newEnd === 0 ? Math.max(0, amount - prevEnd) : 0; + await $this.update({ + system: { characteristics: { [endKey]: { value: newEnd, dm: this.getModifier(newEnd) } } } + }); + return { incapRounds }; + } + + // ── Normal damage cascade: rank1 → rank2 → rank3 ──────────────────── const data = {}; data[rank1] = { value: $this.system.characteristics[rank1].value }; data[rank2] = { value: $this.system.characteristics[rank2].value }; data[rank3] = { value: $this.system.characteristics[rank3].value }; - if (amount < 0) amount = Math.abs(amount); - - if (!ignoreArmor) { - const armorValue = $this.system.inventory?.armor ?? 0; - amount = Math.max(0, amount - armorValue); - if (amount === 0) return; - } - for (const [key, rank] of Object.entries(data)) { if (rank.value > 0) { if (rank.value >= amount) { @@ -1050,7 +1092,8 @@ class ActorCharacter { } } - $this.update({ system: { characteristics: data } }); + await $this.update({ system: { characteristics: data } }); + return { incapRounds: 0 }; } static applyHealing($this, amount, type) { @@ -1237,17 +1280,18 @@ class TravellerActor extends Actor { } } - applyDamage(amount, { ignoreArmor = false } = {}) { + applyDamage(amount, { ignoreArmor = false, ap = 0, stun = false } = {}) { if (this.type === "character") { - return ActorCharacter.applyDamage(this, amount, { ignoreArmor }); + return ActorCharacter.applyDamage(this, amount, { ignoreArmor, ap, stun }); } else if (this.type === "creature") { - if (isNaN(amount) || amount === 0) return; + if (isNaN(amount) || amount === 0) return Promise.resolve({ incapRounds: 0 }); if (amount < 0) amount = Math.abs(amount); - const armorValue = ignoreArmor ? 0 : (this.system.armor ?? 0); + const rawArmor = ignoreArmor ? 0 : (this.system.armor ?? 0); + const armorValue = Math.max(0, rawArmor - ap); const effective = Math.max(0, amount - armorValue); - if (effective === 0) return; + if (effective === 0) return Promise.resolve({ incapRounds: 0 }); const newValue = Math.max(0, (this.system.life.value ?? 0) - effective); - return this.update({ "system.life.value": newValue }); + return this.update({ "system.life.value": newValue }).then(() => ({ incapRounds: 0 })); } } @@ -1722,7 +1766,14 @@ class RollPromptHelper { skillLevel: options.skillLevel ?? 0, // Healing fields showHeal: options.showHeal ?? false, - healType: options.healType ?? null + healType: options.healType ?? null, + // Ranged/Melee weapon flags + isRanged: options.isRanged ?? false, + isMelee: options.isMelee ?? false, + isAttack: (options.isRanged ?? false) || (options.isMelee ?? false), + autoLevel: options.autoLevel ?? 0, + hasScope: options.scope ?? false, + hasZeroG: options.zeroG ?? false, }); return await DialogV2$1.wait({ @@ -1816,13 +1867,14 @@ class CharacterPrompts { } static async openEditorFullView(title, html) { + const safeTitle = title || game.i18n.localize("MGT2.Actor.Species") || "Species"; const htmlContent = await renderTemplate$2("systems/mgt2/templates/editor-fullview.html", { config: CONFIG.MGT2, - html + html: html ?? "" }); game.settings.get("mgt2", "theme"); await DialogV2.wait({ - window: { title }, + window: { title: safeTitle }, content: htmlContent, rejectClose: false, buttons: [ @@ -2064,8 +2116,7 @@ class TravellerCharacterSheet extends MGT2ActorSheet { i._range = i.system.range.isMelee ? game.i18n.localize("MGT2.Melee") : MGT2Helper.getRangeDisplay(i.system.range); - if (i.system.traits?.length > 0) - i._subInfo = i.system.traits.map(x => x.name).join(", "); + i._subInfo = WeaponData.getTraitsSummary(i.system.traits); weapons.push(i); break; @@ -2453,7 +2504,14 @@ class TravellerCharacterSheet extends MGT2ActorSheet { encumbrance: this.actor.system.states.encumbrance, difficulty: null, damageFormula: null, + damageAP: 0, + blastRadius: 0, + stun: false, + radiation: false, isMelee: false, + isRanged: false, + bulky: false, + veryBulky: false, }; const cardButtons = []; @@ -2523,6 +2581,18 @@ class TravellerCharacterSheet extends MGT2ActorSheet { rollOptions.damageFormula = itemObj.system.damage; if (itemObj.type === "weapon") { rollOptions.isMelee = itemObj.system.range?.isMelee === true; + rollOptions.isRanged = itemObj.type === "weapon" && !itemObj.system.range?.isMelee; + rollOptions.damageAP = itemObj.system.traits?.ap ?? 0; + rollOptions.blastRadius = itemObj.system.traits?.blast ?? 0; + rollOptions.stun = itemObj.system.traits?.stun === true; + rollOptions.radiation = itemObj.system.traits?.radiation === true; + rollOptions.scope = itemObj.system.traits?.scope === true; + rollOptions.zeroG = itemObj.system.traits?.zeroG === true; + rollOptions.autoLevel = itemObj.system.traits?.auto ?? 0; + rollOptions.itemId = itemObj._id; + rollOptions.magazine = itemObj.system.magazine ?? -1; // -1 = not tracked + rollOptions.bulky = itemObj.system.traits?.bulky === true; + rollOptions.veryBulky = itemObj.system.traits?.veryBulky === true; } if (itemObj.type === "disease") { if (itemObj.system.subType === "disease") @@ -2544,6 +2614,10 @@ class TravellerCharacterSheet extends MGT2ActorSheet { const rollModifiers = []; const rollFormulaParts = []; + // Auto trait — fire mode + const autoLevel = rollOptions.autoLevel ?? 0; + const autoMode = autoLevel > 0 ? (userRollData.autoMode ?? "single") : "single"; + if (userRollData.diceModifier) { rollFormulaParts.push("3d6", userRollData.diceModifier); } else { @@ -2594,14 +2668,127 @@ class TravellerCharacterSheet extends MGT2ActorSheet { rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.CustomDM") + " " + (customDMVal > 0 ? `+${customDMVal}` : `${customDMVal}`)); } + if (rollOptions.isRanged) { + const rangedRange = parseInt(userRollData.rangedRange ?? "0", 10); + if (rangedRange === 1) { + rollFormulaParts.push("+1"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.RangeShort") + " +1"); + } else if (rangedRange === -2) { + rollFormulaParts.push("-2"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.RangeLong") + " −2"); + } else if (rangedRange === -4) { + rollFormulaParts.push("-4"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.RangeExtreme") + " −4"); + } + + const rangedAim = parseInt(userRollData.rangedAim ?? "0", 10); + // Auto: burst/full-auto cancels all aiming advantages (rules p.75) + if (rangedAim > 0 && autoMode === "single") { + rollFormulaParts.push(`+${rangedAim}`); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Aim") + ` +${rangedAim}`); + if (userRollData.rangedLaserSight === true || userRollData.rangedLaserSight === "true") { + rollFormulaParts.push("+1"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.LaserSight") + " +1"); + } + } + + const rangedFastTarget = parseInt(userRollData.rangedFastTarget ?? "0", 10); + if (rangedFastTarget < 0) { + rollFormulaParts.push(`${rangedFastTarget}`); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.FastTarget") + ` ${rangedFastTarget}`); + } + + if (userRollData.rangedCover === true || userRollData.rangedCover === "true") { + rollFormulaParts.push("-2"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Cover") + " −2"); + } + + if (userRollData.rangedProne === true || userRollData.rangedProne === "true") { + rollFormulaParts.push("-1"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Prone") + " −1"); + } + + if (userRollData.rangedDodge === true || userRollData.rangedDodge === "true") { + const dodgeDM = parseInt(userRollData.rangedDodgeDM ?? "0", 10); + if (dodgeDM < 0) { + rollFormulaParts.push(`${dodgeDM}`); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Dodge") + ` ${dodgeDM}`); + } + } + } + + if (rollOptions.isMelee) { + if (userRollData.meleeDodge === true || userRollData.meleeDodge === "true") { + const dodgeDM = parseInt(userRollData.meleeDodgeDM ?? "0", 10); + if (dodgeDM < 0) { + rollFormulaParts.push(`${dodgeDM}`); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Dodge") + ` ${dodgeDM}`); + } + } + if (userRollData.meleeParry === true || userRollData.meleeParry === "true") { + const parryDM = parseInt(userRollData.meleeParryDM ?? "0", 10); + if (parryDM < 0) { + rollFormulaParts.push(`${parryDM}`); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Parry") + ` ${parryDM}`); + } + } + } + if (MGT2Helper.hasValue(userRollData, "difficulty") && userRollData.difficulty !== "") rollOptions.difficulty = userRollData.difficulty; + // ── Bulky / Very Bulky trait: STR penalty ──────────────────────────── + const strDm = this.actor.system.characteristics.strength?.dm ?? 0; + if (rollOptions.veryBulky) { + // Very Bulky: requires STR DM ≥ +2 + if (strDm < 2) { + const penalty = strDm - 2; + rollFormulaParts.push(`${penalty}`); + rollModifiers.push(game.i18n.localize("MGT2.WeaponTraits.VeryBulky") + ` ${penalty}`); + ui.notifications.warn(game.i18n.format("MGT2.Notifications.VeryBulkyPenalty", { penalty })); + } + } else if (rollOptions.bulky) { + // Bulky: requires STR DM ≥ +1 + if (strDm < 1) { + const penalty = strDm - 1; + rollFormulaParts.push(`${penalty}`); + rollModifiers.push(game.i18n.localize("MGT2.WeaponTraits.Bulky") + ` ${penalty}`); + ui.notifications.warn(game.i18n.format("MGT2.Notifications.BulkyPenalty", { penalty })); + } + } + const rollFormula = rollFormulaParts.join(""); if (!Roll.validate(rollFormula)) { ui.notifications.error(game.i18n.localize("MGT2.Errors.InvalidRollFormula")); return; } + // ── Ammo decrement (ranged weapons with magazine tracking) ─────────── + if (rollOptions.isRanged && rollOptions.itemId && rollOptions.magazine >= 0) { + let ammoUsed = 1; + if (autoMode === "burst" && autoLevel > 0) ammoUsed = autoLevel; + else if (autoMode === "fullAuto" && autoLevel > 0) ammoUsed = autoLevel * 3; + + const currentMag = rollOptions.magazine; + if (currentMag <= 0) { + ui.notifications.warn( + game.i18n.format("MGT2.Notifications.NoAmmo", { weapon: rollOptions.rollObjectName }) + ); + } else { + const newMag = Math.max(0, currentMag - ammoUsed); + const weaponItem = this.actor.getEmbeddedDocument("Item", rollOptions.itemId); + if (weaponItem) await weaponItem.update({ "system.magazine": newMag }); + if (newMag === 0) { + ui.notifications.warn( + game.i18n.format("MGT2.Notifications.AmmoEmpty", { weapon: rollOptions.rollObjectName }) + ); + } else { + ui.notifications.info( + game.i18n.format("MGT2.Notifications.AmmoUsed", { used: ammoUsed, remaining: newMag, weapon: rollOptions.rollObjectName }) + ); + } + } + } + let roll = await new Roll(rollFormula, this.actor.getRollData()).roll({ rollMode: userRollData.rollMode }); if (isInitiative && this.token?.combatant) { @@ -2623,7 +2810,7 @@ class TravellerCharacterSheet extends MGT2ActorSheet { rollFailure = !rollSuccess; } - // Build effective damage formula: base + effect + STR DM (melee) + // Build effective damage formula: base + effect + STR DM (melee) + Auto burst let effectiveDamageFormula = rollOptions.damageFormula || null; if (effectiveDamageFormula) { if (rollEffect !== undefined && rollEffect !== 0) { @@ -2633,6 +2820,18 @@ class TravellerCharacterSheet extends MGT2ActorSheet { const strDm = this.actor.system.characteristics.strength?.dm ?? 0; if (strDm !== 0) effectiveDamageFormula += (strDm >= 0 ? "+" : "") + strDm; } + // Burst: add Auto level to damage + if (autoMode === "burst" && autoLevel > 0) { + effectiveDamageFormula += `+${autoLevel}`; + } + } + + // Auto fire mode chat info + let autoInfo = null; + if (autoMode === "burst" && autoLevel > 0) { + autoInfo = game.i18n.format("MGT2.RollPrompt.AutoBurstInfo", { level: autoLevel, ammo: autoLevel }); + } else if (autoMode === "fullAuto" && autoLevel > 0) { + autoInfo = game.i18n.format("MGT2.RollPrompt.AutoFullInfo", { level: autoLevel, ammo: autoLevel * 3 }); } // ── Build roll breakdown tooltip ───────────────────────────────────── @@ -2659,6 +2858,7 @@ class TravellerCharacterSheet extends MGT2ActorSheet { // Show damage button only if there's a formula AND (no difficulty check OR roll succeeded) showRollDamage: !!effectiveDamageFormula && (!difficultyValue || rollSuccess), cardButtons: cardButtons, + autoInfo, }; if (MGT2Helper.hasValue(rollOptions, "difficulty")) { @@ -2675,7 +2875,7 @@ class TravellerCharacterSheet extends MGT2ActorSheet { let flags = null; if (effectiveDamageFormula) { - flags = { mgt2: { damage: { formula: effectiveDamageFormula, rollObjectName: rollOptions.rollObjectName, rollTypeName: rollOptions.rollTypeName } } }; + flags = { mgt2: { damage: { formula: effectiveDamageFormula, ap: rollOptions.damageAP ?? 0, blast: rollOptions.blastRadius ?? 0, stun: rollOptions.stun ?? false, radiation: rollOptions.radiation ?? false, rollObjectName: rollOptions.rollObjectName, rollTypeName: rollOptions.rollTypeName } } }; } if (cardButtons.length > 0) { if (!flags) flags = { mgt2: {} }; @@ -2759,17 +2959,18 @@ class TravellerCharacterSheet extends MGT2ActorSheet { static async #onOpenEditor(event) { event.preventDefault(); - await CharacterPrompts.openEditorFullView( - this.actor.system.personal.species, - this.actor.system.personal.speciesText.descriptionLong - ); + const title = this.actor.system.personal.species + || game.i18n.localize("MGT2.Actor.Species") + || "Species"; + const html = this.actor.system.personal.speciesText?.descriptionLong ?? ""; + await CharacterPrompts.openEditorFullView(title, html); } static async #onHeal(event, target) { event.preventDefault(); const healType = target.dataset.healType; - if (canvas.tokens.controlled.length === 0) { + if (game.user.targets.size === 0) { ui.notifications.warn(game.i18n.localize("MGT2.Errors.NoTokenSelected")); return; } @@ -3214,7 +3415,7 @@ class TravellerCreatureSheet extends MGT2ActorSheet { // ───────────────────────────────────────────────────────── Roll Helpers - static async #postCreatureRoll({ actor, roll, rollLabel, dm, difficulty, difficultyLabel, rollMode, extraTooltip }) { + static async #postCreatureRoll({ actor, roll, rollLabel, dm, difficulty, difficultyLabel, rollMode, extraTooltip, damageFormula }) { const diffTarget = MGT2Helper.getDifficultyValue(difficulty ?? "Average"); const hasDifficulty = !!difficulty; const success = hasDifficulty ? roll.total >= diffTarget : true; @@ -3228,6 +3429,8 @@ class TravellerCreatureSheet extends MGT2ActorSheet { if (extraTooltip) breakdownParts.push(extraTooltip); const rollBreakdown = breakdownParts.join(" | "); + const showRollDamage = success && !!damageFormula; + const chatData = { creatureName: actor.name, creatureImg: actor.img, @@ -3243,6 +3446,7 @@ class TravellerCreatureSheet extends MGT2ActorSheet { effect: hasDifficulty ? effect : null, effectStr: hasDifficulty ? effectStr : null, modifiers: dm !== 0 ? [`DM ${dm >= 0 ? "+" : ""}${dm}`] : [], + showRollDamage, }; const chatContent = await renderTemplate$1( @@ -3250,11 +3454,23 @@ class TravellerCreatureSheet extends MGT2ActorSheet { chatData ); + const flags = showRollDamage ? { + mgt2: { + damage: { + formula: normalizeDice(damageFormula), + effect, + rollObjectName: actor.name, + rollTypeName: rollLabel, + } + } + } : {}; + await ChatMessage.create({ content: chatContent, speaker: ChatMessage.getSpeaker({ actor }), rolls: [roll], rollMode: rollMode ?? game.settings.get("core", "rollMode"), + flags, }); return { success, effect, total: roll.total }; @@ -3355,24 +3571,14 @@ class TravellerCreatureSheet extends MGT2ActorSheet { if (chosenSkill) tooltipParts.push(`${chosenSkill.name} ${skillLevel >= 0 ? "+" : ""}${skillLevel}`); if (customDM !== 0) tooltipParts.push(`MD perso ${customDM >= 0 ? "+" : ""}${customDM}`); - const { success } = await TravellerCreatureSheet.#postCreatureRoll({ + await TravellerCreatureSheet.#postCreatureRoll({ actor, roll, rollLabel, dm, difficulty: result.difficulty, rollMode: result.rollMode, extraTooltip: tooltipParts.join(" | "), + damageFormula: attack.damage || null, }); - - // Roll damage only on success - if (success && attack.damage) { - const dmgFormula = normalizeDice(attack.damage); - const dmgRoll = await new Roll(dmgFormula).evaluate(); - await dmgRoll.toMessage({ - speaker: ChatMessage.getSpeaker({ actor }), - flavor: `${actor.name} — ${game.i18n.localize("MGT2.Chat.Weapon.Damage")}: ${attack.name} (${attack.damage})`, - rollMode: result.rollMode ?? game.settings.get("core", "rollMode"), - }); - } } // ───────────────────────────────────────────────────────── CRUD Handlers @@ -3716,6 +3922,7 @@ const preloadHandlebarsTemplates = async function() { "systems/mgt2/templates/roll-prompt.html", "systems/mgt2/templates/chat/roll.html", //"systems/mgt2/templates/chat/roll-characteristic.html", + "systems/mgt2/templates/chat/radiation.html", "systems/mgt2/templates/actors/actor-config-sheet.html", "systems/mgt2/templates/actors/actor-config-characteristic-sheet.html", "systems/mgt2/templates/actors/trait-sheet.html", @@ -3734,12 +3941,45 @@ class ChatHelper { if (!message || !element) { return; } + + // Restore disabled state for already-applied buttons + const appliedActions = message.flags?.mgt2?.appliedActions ?? []; + if (appliedActions.length > 0) { + appliedActions.forEach(action => { + element.querySelectorAll(`button[data-action="${action}"]`).forEach(btn => { + btn.disabled = true; + }); + }); + } + + // Apply buttons are GM-only: hide them for players + const GM_ACTIONS = ["damage", "healing", "surgeryDamage"]; + if (!game.user.isGM) { + GM_ACTIONS.forEach(action => { + element.querySelectorAll(`button[data-action="${action}"]`).forEach(btn => { + btn.style.display = "none"; + }); + }); + // Hide the buttons container if no visible buttons remain + element.querySelectorAll(".mgt2-buttons").forEach(container => { + const hasVisible = [...container.querySelectorAll("button")] + .some(b => b.style.display !== "none"); + if (!hasVisible) container.style.display = "none"; + }); + } + element.querySelectorAll('button[data-action="rollDamage"]').forEach(el => { el.addEventListener('click', async event => { await this._processRollDamageButtonEvent(message, event); }); }); + element.querySelectorAll('button[data-action="rollRadiation"]').forEach(el => { + el.addEventListener('click', async event => { + await this._rollRadiationDamage(message, event); + }); + }); + element.querySelectorAll('button[data-action="damage"]').forEach(el => { el.addEventListener('click', async event => { await this._applyChatCardDamage(message, event); @@ -3791,75 +4031,144 @@ class ChatHelper { static async _processRollDamageButtonEvent(message, event) { event.preventDefault(); event.stopPropagation(); - let rollFormula = message.flags.mgt2.damage.formula; - - let roll = await new Roll(rollFormula, {}).roll(); - - let speaker; - let selectTokens = canvas.tokens.controlled; - if (selectTokens.length > 0) { - speaker = selectTokens[0].actor; - } else { - speaker = game.user.character; + const damageFlags = message.flags?.mgt2?.damage; + if (!damageFlags?.formula) { + ui.notifications.warn(game.i18n.localize("MGT2.Errors.InvalidRollFormula")); + return; } - let rollTypeName = message.flags.mgt2.damage.rollTypeName ? message.flags.mgt2.damage.rollTypeName + " " + game.i18n.localize("MGT2.Actor.Damage") : null; + const effect = damageFlags.effect ?? 0; + const effectPart = effect > 0 ? `+${effect}` : effect < 0 ? `${effect}` : ""; + const rollFormula = damageFlags.formula + effectPart; + + let roll; + try { + roll = await new Roll(rollFormula, {}).roll(); + } catch (e) { + ui.notifications.warn(game.i18n.localize("MGT2.Errors.InvalidRollFormula")); + return; + } + + const rollTypeName = damageFlags.rollTypeName + ? damageFlags.rollTypeName + " " + game.i18n.localize("MGT2.Actor.Damage") + : null; + + const ap = damageFlags.ap ?? 0; + const blast = damageFlags.blast ?? 0; + const stun = damageFlags.stun ?? false; + const radiation = damageFlags.radiation ?? false; const chatData = { user: game.user.id, - speaker: ChatMessage.getSpeaker({ actor: speaker }), + speaker: message.speaker, formula: roll._formula, tooltip: await roll.getTooltip(), total: Math.round(roll.total * 100) / 100, showButtons: true, hasDamage: true, - rollTypeName: rollTypeName, - rollObjectName: message.flags.mgt2.damage.rollObjectName + rollTypeName, + rollObjectName: damageFlags.rollObjectName, + apValue: ap > 0 ? ap : null, + blastRadius: blast > 0 ? blast : null, + stunWeapon: stun || null, + radiationWeapon: radiation || null, }; const html = await foundry.applications.handlebars.renderTemplate("systems/mgt2/templates/chat/roll.html", chatData); chatData.content = html; + // Persist ap, blast, stun, radiation in damage message flags so handlers can read them + if (ap > 0 || blast > 0 || stun || radiation) chatData.flags = { mgt2: { damage: { ap, blast, stun, radiation, rollObjectName: damageFlags.rollObjectName } } }; + return roll.toMessage(chatData); } - static _applyChatCardDamage(message, event) { - if (canvas.tokens.controlled.length === 0) { - ui.notifications.warn(game.i18n.localize("MGT2.Errors.NoTokenSelected")); - return; + static async #markButtonApplied(message, btn, action) { + const existing = message.flags?.mgt2?.appliedActions ?? []; + if (!existing.includes(action)) { + await message.setFlag("mgt2", "appliedActions", [...existing, action]); } - const roll = message.rolls[0]; - return Promise.all(canvas.tokens.controlled.map(t => { - const a = t.actor; - return a.applyDamage(roll.total); - })); + if (btn) btn.disabled = true; } - static _applyChatCardHealing(message, event) { - if (canvas.tokens.controlled.length === 0) { + static async _applyChatCardDamage(message, event) { + if (game.user.targets.size === 0) { ui.notifications.warn(game.i18n.localize("MGT2.Errors.NoTokenSelected")); return; } - // For First Aid/Surgery healing, use amount from flags; otherwise use roll total + const btn = event.currentTarget; + const roll = message.rolls[0]; + const amount = Math.round(roll.total * 100) / 100; + const ap = message.flags?.mgt2?.damage?.ap ?? 0; + const stun = message.flags?.mgt2?.damage?.stun ?? false; + await Promise.all([...game.user.targets].map(async t => { + const result = await t.actor.applyDamage(amount, { ap, stun }); + if (stun) { + const incapRounds = result?.incapRounds ?? 0; + if (incapRounds > 0) { + ui.notifications.warn(game.i18n.format("MGT2.Notifications.StunIncapacitated", { name: t.actor.name, rounds: incapRounds })); + } else { + ui.notifications.info(game.i18n.format("MGT2.Notifications.StunDamageApplied", { name: t.actor.name, amount })); + } + } else { + const notifKey = ap > 0 ? "MGT2.Notifications.DamageAppliedAP" : "MGT2.Notifications.DamageApplied"; + ui.notifications.info(game.i18n.format(notifKey, { name: t.actor.name, amount, ap })); + } + })); + await ChatHelper.#markButtonApplied(message, btn, "damage"); + } + + static async _applyChatCardHealing(message, event) { + if (game.user.targets.size === 0) { + ui.notifications.warn(game.i18n.localize("MGT2.Errors.NoTokenSelected")); + return; + } + const btn = event.currentTarget; const amount = message.flags?.mgt2?.healing?.amount ?? message.flags?.mgt2?.surgery?.healing ?? Math.max(1, message.rolls[0].total); - return Promise.all(canvas.tokens.controlled.map(t => { - const a = t.actor; - return a.applyHealing(amount); + await Promise.all([...game.user.targets].map(async t => { + await t.actor.applyHealing(amount); + ui.notifications.info(game.i18n.format("MGT2.Notifications.HealingApplied", { name: t.actor.name, amount })); })); + await ChatHelper.#markButtonApplied(message, btn, "healing"); } - static _applyChatCardSurgeryDamage(message, event) { - if (canvas.tokens.controlled.length === 0) { + static async _applyChatCardSurgeryDamage(message, event) { + if (game.user.targets.size === 0) { ui.notifications.warn(game.i18n.localize("MGT2.Errors.NoTokenSelected")); return; } + const btn = event.currentTarget; const amount = message.flags?.mgt2?.surgery?.surgeryDamage ?? 3; - return Promise.all(canvas.tokens.controlled.map(t => { - const a = t.actor; - return a.applyDamage(amount, { ignoreArmor: true }); + await Promise.all([...game.user.targets].map(async t => { + await t.actor.applyDamage(amount, { ignoreArmor: true }); + ui.notifications.info(game.i18n.format("MGT2.Notifications.DamageApplied", { name: t.actor.name, amount })); })); + await ChatHelper.#markButtonApplied(message, btn, "surgeryDamage"); + } + + static async _rollRadiationDamage(message, event) { + event.preventDefault(); + event.stopPropagation(); + const damageFlags = message.flags?.mgt2?.damage; + const rollObjectName = damageFlags?.rollObjectName ?? ""; + + // 2D × 20 rads (MGT2 rule: 2d6 × 20) + const roll = await new Roll("2d6 * 20", {}).roll(); + + const chatData = { + user: game.user.id, + speaker: message.speaker, + formula: roll._formula, + tooltip: await roll.getTooltip(), + total: Math.round(roll.total), + rollObjectName, + }; + + const html = await foundry.applications.handlebars.renderTemplate("systems/mgt2/templates/chat/radiation.html", chatData); + chatData.content = html; + return roll.toMessage(chatData); } } diff --git a/mgt2.bundle.js.map b/mgt2.bundle.js.map index a7d76aa..135fa5c 100644 --- a/mgt2.bundle.js.map +++ b/mgt2.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"mgt2.bundle.js","sources":["src/module/models/items/base-item.mjs","src/module/models/character.mjs","src/module/models/vehicule.mjs","src/module/models/creature.mjs","src/module/models/items/item.mjs","src/module/models/items/equipment.mjs","src/module/models/items/disease.mjs","src/module/models/items/career.mjs","src/module/models/items/talent.mjs","src/module/models/items/contact.mjs","src/module/models/items/weapon.mjs","src/module/models/items/armor.mjs","src/module/models/items/computer.mjs","src/module/models/items/container.mjs","src/module/models/items/species.mjs","src/module/config.js","src/module/actors/character.js","src/module/actors/actor.js","src/module/item.js","src/module/applications/sheets/base-actor-sheet.mjs","src/module/helper.js","src/module/roll-prompt.js","src/module/actors/character-prompts.js","src/module/applications/sheets/character-sheet.mjs","src/module/applications/sheets/vehicule-sheet.mjs","src/module/applications/sheets/creature-sheet.mjs","src/module/applications/sheets/item-sheet.mjs","src/module/templates.js","src/module/chatHelper.js","src/module/settings.js","src/module/core.js"],"sourcesContent":["const fields = foundry.data.fields;\n\nexport function createCharacteristicField(show = true, showMax = false) {\n return new fields.SchemaField({\n value: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n max: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),\n dm: new fields.NumberField({ required: false, initial: 0, integer: true }),\n show: new fields.BooleanField({ required: false, initial: show }),\n showMax: new fields.BooleanField({ required: false, initial: showMax })\n });\n}\n\nexport class ItemBaseData extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n return {\n description: new fields.HTMLField({ required: false, blank: true, trim: true }),\n subType: new fields.StringField({ required: false, blank: false, nullable: true })\n };\n }\n}\n\nexport class PhysicalItemData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.quantity = new fields.NumberField({ required: true, initial: 1, min: 0, integer: true });\n schema.weight = new fields.NumberField({ required: true, initial: 0, min: 0, integer: false });\n schema.weightless = new fields.BooleanField({ required: false, initial: false });\n schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });\n schema.tl = new fields.StringField({ required: true, blank: false, initial: \"TL12\" });\n schema.container = new fields.SchemaField({\n id: new fields.StringField({ required: false, blank: true })\n });\n schema.roll = new fields.SchemaField({\n characteristic: new fields.StringField({ required: false, blank: true, trim: true }),\n skill: new fields.StringField({ required: false, blank: true, trim: true }),\n difficulty: new fields.StringField({ required: false, blank: true, trim: true })\n });\n schema.trash = new fields.BooleanField({ required: false, initial: false });\n return schema;\n }\n}\n","import { createCharacteristicField } from \"./items/base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class CharacterData extends foundry.abstract.TypeDataModel {\n\n static defineSchema() {\n return {\n name: new fields.StringField({ required: false, blank: false, trim: true }),\n life: new fields.SchemaField({\n value: new fields.NumberField({ required: false, initial: 0, integer: true }),\n max: new fields.NumberField({ required: true, initial: 0, integer: true })\n }),\n personal: new fields.SchemaField({\n title: new fields.StringField({ required: false, blank: true, trim: true }),\n species: new fields.StringField({ required: false, blank: true, trim: true }),\n speciesText: new fields.SchemaField({\n description: new fields.StringField({ required: false, blank: true, trim: true, nullable: true }),\n descriptionLong: new fields.HTMLField({ required: false, blank: true, trim: true })\n }),\n age: new fields.StringField({ required: false, blank: true, trim: true }),\n gender: new fields.StringField({ required: false, blank: true, trim: true }),\n pronouns: new fields.StringField({ required: false, blank: true, trim: true }),\n homeworld: new fields.StringField({ required: false, blank: true, trim: true }),\n ucp: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n traits: new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n )\n }),\n biography: new fields.HTMLField({ required: false, blank: true, trim: true }),\n\n characteristics: new fields.SchemaField({\n strength: createCharacteristicField(true, true),\n dexterity: createCharacteristicField(true, true),\n endurance: createCharacteristicField(true, true),\n intellect: createCharacteristicField(true, false),\n education: createCharacteristicField(true, false),\n social: createCharacteristicField(true, false),\n morale: createCharacteristicField(true, false),\n luck: createCharacteristicField(true, false),\n sanity: createCharacteristicField(true, false),\n charm: createCharacteristicField(true, false),\n psionic: createCharacteristicField(true, false),\n other: createCharacteristicField(true, false)\n }),\n\n health: new fields.SchemaField({\n radiations: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),\n lastFirstAidDate: new fields.StringField({ required: false, blank: true, trim: true }),\n healingRecoveryMode: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" })\n }),\n study: new fields.SchemaField({\n skill: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n total: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),\n completed: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true })\n }),\n finance: new fields.SchemaField({\n pension: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n credits: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n cashOnHand: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n debt: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n livingCost: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n monthlyShipPayments: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n notes: new fields.HTMLField({ required: false, blank: true, trim: true })\n }),\n containerView: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n containerDropIn: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n notes: new fields.HTMLField({ required: false, blank: true, trim: true }),\n\n inventory: new fields.SchemaField({\n armor: new fields.NumberField({ required: true, initial: 0, integer: true }),\n weight: new fields.NumberField({ required: true, initial: 0, min: 0, integer: false }),\n encumbrance: new fields.SchemaField({\n normal: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n heavy: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true })\n })\n }),\n states: new fields.SchemaField({\n encumbrance: new fields.BooleanField({ required: false, initial: false }),\n fatigue: new fields.BooleanField({ required: false, initial: false }),\n unconscious: new fields.BooleanField({ required: false, initial: false }),\n surgeryRequired: new fields.BooleanField({ required: false, initial: false })\n }),\n\n config: new fields.SchemaField({\n psionic: new fields.BooleanField({ required: false, initial: true }),\n initiative: new fields.StringField({ required: false, blank: true, initial: \"dexterity\" }),\n damages: new fields.SchemaField({\n rank1: new fields.StringField({ required: false, blank: true, initial: \"strength\" }),\n rank2: new fields.StringField({ required: false, blank: true, initial: \"dexterity\" }),\n rank3: new fields.StringField({ required: false, blank: true, initial: \"endurance\" })\n })\n })\n };\n }\n}\n","const fields = foundry.data.fields;\n\nexport default class VehiculeData extends foundry.abstract.TypeDataModel {\n\n static defineSchema() {\n return {\n name: new fields.StringField({ required: false, blank: false, trim: true }),\n skillId: new fields.StringField({ required: false, initial: \"\", blank: true, trim: true }),\n speed: new fields.SchemaField({\n cruise: new fields.StringField({ required: false, initial: \"Slow\", blank: true }),\n maximum: new fields.StringField({ required: false, initial: \"Medium\", blank: true })\n }),\n agility: new fields.NumberField({ required: false, min: 0, integer: true }),\n crew: new fields.NumberField({ required: false, min: 0, integer: true }),\n passengers: new fields.NumberField({ required: false, min: 0, integer: true }),\n cargo: new fields.NumberField({ required: false, min: 0, integer: false }),\n life: new fields.SchemaField({\n value: new fields.NumberField({ required: true, initial: 0, integer: true }),\n max: new fields.NumberField({ required: true, initial: 0, integer: true })\n }),\n shipping: new fields.NumberField({ required: false, min: 0, integer: true }),\n cost: new fields.NumberField({ required: false, min: 0, integer: true }),\n armor: new fields.SchemaField({\n front: new fields.NumberField({ required: true, initial: 0, integer: true }),\n rear: new fields.NumberField({ required: true, initial: 0, integer: true }),\n sides: new fields.NumberField({ required: true, initial: 0, integer: true })\n }),\n skills: new fields.SchemaField({\n autopilot: new fields.NumberField({ required: true, initial: 0, integer: true })\n }),\n description: new fields.HTMLField({ required: false, blank: true, trim: true }),\n notes: new fields.HTMLField({ required: false, blank: true, trim: true })\n };\n }\n}\n","const fields = foundry.data.fields;\n\nexport default class CreatureData extends foundry.abstract.TypeDataModel {\n\n static defineSchema() {\n return {\n life: new fields.SchemaField({\n value: new fields.NumberField({ required: true, initial: 10, min: 0, integer: true }),\n max: new fields.NumberField({ required: true, initial: 10, min: 0, integer: true })\n }),\n\n speed: new fields.NumberField({ required: true, initial: 6, min: 0, integer: true }),\n\n armor: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n\n psi: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n\n initiativeBonus: new fields.NumberField({ required: true, initial: 0, integer: true }),\n\n skills: new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true, initial: \"\" }),\n level: new fields.NumberField({ required: true, initial: 0, integer: true }),\n note: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" })\n })\n ),\n\n attacks: new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true, initial: \"\" }),\n damage: new fields.StringField({ required: true, blank: true, trim: true, initial: \"1D\" }),\n skill: new fields.NumberField({ required: false, initial: -1, integer: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" })\n })\n ),\n\n traits: new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true, initial: \"\" }),\n value: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n description: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" })\n })\n ),\n\n behavior: new fields.SchemaField({\n type: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n subtype: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" })\n }),\n\n biography: new fields.HTMLField({ required: false, blank: true, trim: true }),\n notes: new fields.HTMLField({ required: false, blank: true, trim: true }),\n };\n }\n\n /** @override */\n prepareDerivedData() {\n // Compute initiative bonus from Métabolisme traits\n let bonus = 0;\n for (const trait of this.traits) {\n const nameLower = trait.name.toLowerCase();\n if (nameLower.includes(\"métabolisme rapide\") || nameLower.includes(\"metabolisme rapide\")) {\n const val = parseInt(trait.value);\n if (!isNaN(val)) bonus += val;\n } else if (nameLower.includes(\"métabolisme lent\") || nameLower.includes(\"metabolisme lent\")) {\n const val = parseInt(trait.value);\n if (!isNaN(val)) bonus -= val;\n }\n }\n this.initiativeBonus = bonus;\n\n // Compute armor from Armure trait if not set manually\n if (this.armor === 0) {\n for (const trait of this.traits) {\n if (trait.name.toLowerCase().startsWith(\"armure\")) {\n const val = parseInt(trait.value);\n if (!isNaN(val)) {\n this.armor = val;\n break;\n }\n }\n }\n }\n\n // Compute PSI from Psionique trait\n if (this.psi === 0) {\n for (const trait of this.traits) {\n if (trait.name.toLowerCase().startsWith(\"psionique\")) {\n const val = parseInt(trait.value);\n if (!isNaN(val)) {\n this.psi = val;\n break;\n }\n }\n }\n }\n }\n}\n","import { PhysicalItemData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class ItemData extends PhysicalItemData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.subType.initial = \"loot\";\n schema.software = new fields.SchemaField({\n bandwidth: new fields.NumberField({ required: false, initial: 0, min: 0, max: 10, integer: true }),\n effect: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n computerId: new fields.StringField({ required: false, blank: true, initial: \"\" })\n });\n return schema;\n }\n}\n","import { PhysicalItemData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class EquipmentData extends PhysicalItemData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.equipped = new fields.BooleanField({ required: false, initial: false });\n schema.augment = new fields.SchemaField({\n improvement: new fields.StringField({ required: false, blank: true, trim: true })\n });\n schema.subType.initial = \"equipment\"; // augment, clothing, trinket, toolkit, equipment\n return schema;\n }\n}\n","import { ItemBaseData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class DiseaseData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.subType.initial = \"disease\"; // disease, poison\n schema.difficulty = new fields.StringField({ required: true, initial: \"Average\" });\n schema.damage = new fields.StringField({ required: false, blank: true });\n schema.interval = new fields.StringField({ required: false, blank: true });\n return schema;\n }\n}\n","import { ItemBaseData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class CareerData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.difficulty = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });\n schema.damage = new fields.StringField({ required: false, blank: true });\n schema.interval = new fields.StringField({ required: false, blank: true });\n schema.assignment = new fields.StringField({ required: false, blank: true });\n schema.terms = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.rank = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.events = new fields.ArrayField(\n new fields.SchemaField({\n age: new fields.NumberField({ required: false, integer: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n );\n return schema;\n }\n}\n","import { ItemBaseData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class TalentData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.subType.initial = \"skill\";\n schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });\n schema.level = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });\n schema.skill = new fields.SchemaField({\n speciality: new fields.StringField({ required: false, blank: true, trim: true }),\n reduceEncumbrance: new fields.BooleanField({ required: false, initial: false })\n });\n schema.psionic = new fields.SchemaField({\n reach: new fields.StringField({ required: false, blank: true, trim: true }),\n cost: new fields.NumberField({ required: false, initial: 1, min: 0, integer: true }),\n duration: new fields.StringField({ required: false, blank: true, trim: true }),\n durationUnit: new fields.StringField({ required: false })\n });\n schema.roll = new fields.SchemaField({\n characteristic: new fields.StringField({ required: false, blank: true, trim: true }),\n skill: new fields.StringField({ required: false, blank: true, trim: true }),\n difficulty: new fields.StringField({ required: false, blank: true, trim: true })\n });\n return schema;\n }\n}\n","import { ItemBaseData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class ContactData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.subType.initial = \"skill\";\n schema.cost = new fields.NumberField({ required: true, initial: 1, min: 0, integer: true });\n schema.skill = new fields.SchemaField({\n speciality: new fields.StringField({ required: false, blank: true, trim: true }),\n characteristic: new fields.StringField({ required: false, blank: true, trim: true })\n });\n schema.status = new fields.StringField({ required: false, blank: true, trim: true, initial: \"Alive\" });\n schema.attitude = new fields.StringField({ required: false, blank: true, trim: true, initial: \"Unknow\" });\n schema.relation = new fields.StringField({ required: false, blank: true, trim: true, initial: \"Contact\" });\n schema.title = new fields.StringField({ required: false, blank: true, trim: true });\n schema.nickname = new fields.StringField({ required: false, blank: true, trim: true });\n schema.species = new fields.StringField({ required: false, blank: true, trim: true });\n schema.gender = new fields.StringField({ required: false, blank: true, trim: true });\n schema.pronouns = new fields.StringField({ required: false, blank: true, trim: true });\n schema.homeworld = new fields.StringField({ required: false, blank: true, trim: true });\n schema.location = new fields.StringField({ required: false, blank: true, trim: true });\n schema.occupation = new fields.StringField({ required: false, blank: true, trim: true });\n schema.notes = new fields.HTMLField({ required: false, blank: true, trim: true });\n return schema;\n }\n}\n","import { PhysicalItemData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class WeaponData extends PhysicalItemData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.equipped = new fields.BooleanField({ required: false, initial: false });\n schema.range = new fields.SchemaField({\n isMelee: new fields.BooleanField({ required: false, initial: false }),\n value: new fields.NumberField({ required: false, integer: true, nullable: true }),\n unit: new fields.StringField({ required: false, blank: true, nullable: true })\n });\n schema.damage = new fields.StringField({ required: false, blank: true, trim: true });\n schema.magazine = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.magazineCost = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.traits = new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n );\n schema.options = new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n );\n return schema;\n }\n}\n","import { PhysicalItemData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class ArmorData extends PhysicalItemData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.equipped = new fields.BooleanField({ required: false, initial: false });\n schema.radiations = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.protection = new fields.StringField({ required: false, blank: false, trim: true });\n // A Traveller suffers DM-1 to all checks per missing skill level in the required skill.\n schema.requireSkill = new fields.StringField({ required: false, blank: false });\n schema.requireSkillLevel = new fields.NumberField({ required: false, min: 0, integer: true });\n // Powered armour supports its own weight and is effectively weightless for encumbrance.\n schema.powered = new fields.BooleanField({ required: false, initial: false });\n schema.options = new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n );\n return schema;\n }\n}\n","import { PhysicalItemData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class ComputerData extends PhysicalItemData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.processing = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.processingUsed = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.overload = new fields.BooleanField({ required: false, initial: false });\n schema.options = new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n );\n return schema;\n }\n}\n","import { ItemBaseData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class ItemContainerData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.onHand = new fields.BooleanField({ required: false, initial: false });\n schema.location = new fields.StringField({ required: false, blank: true, trim: true });\n schema.count = new fields.NumberField({ required: false, initial: 0, integer: true });\n schema.weight = new fields.NumberField({ required: false, initial: 0, integer: false });\n schema.weightless = new fields.BooleanField({ required: false, initial: false });\n schema.locked = new fields.BooleanField({ required: false, initial: false }); // GM only\n schema.lockedDescription = new fields.HTMLField({ required: false, blank: true, trim: true });\n return schema;\n }\n}\n","const fields = foundry.data.fields;\n\nexport default class SpeciesData extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n return {\n description: new fields.HTMLField({ required: false, blank: true, trim: true }),\n descriptionLong: new fields.HTMLField({ required: false, blank: true, trim: true }),\n traits: new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n ),\n modifiers: new fields.ArrayField(\n new fields.SchemaField({\n characteristic: new fields.StringField({ required: false, blank: true, trim: true }),\n value: new fields.NumberField({ required: false, integer: true, nullable: true })\n })\n )\n };\n }\n}\n","export const MGT2 = {};\n\nMGT2.MetricRange = Object.freeze({\n meter: \"MGT2.MetricRange.meter\",\n kilometer: \"MGT2.MetricRange.kilometer\"\n});\n\nMGT2.MetricWeight = Object.freeze({\n kilogram: \"MGT2.MetricWeight.kilogram\",\n ton: \"MGT2.MetricWeight.ton\"\n});\n\nMGT2.Difficulty = Object.freeze({\n NA: \"MGT2.Difficulty.NA\",\n Simple: \"MGT2.Difficulty.Simple\",\n Easy: \"MGT2.Difficulty.Easy\",\n Routine: \"MGT2.Difficulty.Routine\",\n Average: \"MGT2.Difficulty.Average\",\n Difficult: \"MGT2.Difficulty.Difficult\",\n VeryDifficult: \"MGT2.Difficulty.VeryDifficult\",\n Formidable: \"MGT2.Difficulty.Formidable\",\n Impossible: \"MGT2.Difficulty.Impossible\"\n});\n\nMGT2.ItemSubType = Object.freeze({\n loot: \"MGT2.ItemSubType.loot\",\n software: \"MGT2.ItemSubType.software\"\n});\n\nMGT2.EquipmentSubType = Object.freeze({\n augment: \"MGT2.EquipmentSubType.augment\",\n clothing: \"MGT2.EquipmentSubType.clothing\",\n equipment: \"MGT2.EquipmentSubType.equipment\",\n trinket: \"MGT2.EquipmentSubType.trinket\",\n toolkit: \"MGT2.EquipmentSubType.toolkit\"\n});\n\nMGT2.TalentSubType = Object.freeze({\n skill: \"MGT2.TalentSubType.skill\",\n psionic: \"MGT2.TalentSubType.psionic\"\n});\n\nMGT2.DiseaseSubType = Object.freeze({\n disease: \"MGT2.DiseaseSubType.disease\",\n poison: \"MGT2.DiseaseSubType.poison\",\n wound: \"MGT2.DiseaseSubType.wound\"\n});\n\nMGT2.PsionicReach = Object.freeze({\n NA: \"MGT2.PsionicReach.NA\",\n Personal: \"MGT2.PsionicReach.Personal\",\n Close: \"MGT2.PsionicReach.Close\",\n Short: \"MGT2.PsionicReach.Short\",\n Medium: \"MGT2.PsionicReach.Medium\",\n Long: \"MGT2.PsionicReach.Long\",\n VeryLong: \"MGT2.PsionicReach.VeryLong\",\n Distant: \"MGT2.PsionicReach.Distant\",\n VeryDistant: \"MGT2.PsionicReach.VeryDistant\",\n Continental: \"MGT2.PsionicReach.Continental\",\n Planetary: \"MGT2.PsionicReach.Planetary\"\n});\n\nMGT2.ContactRelations = Object.freeze({\n Allie: \"MGT2.Contact.Relation.Allie\",\n Contact: \"MGT2.Contact.Relation.Contact\",\n Rival: \"MGT2.Contact.Relation.Rival\",\n Enemy: \"MGT2.Contact.Relation.Enemy\"\n});\n\nMGT2.ContactStatus = Object.freeze({\n Alive: \"MGT2.Contact.Status.Alive\",\n Unknow: \"MGT2.Contact.Status.Unknow\",\n Dead: \"MGT2.Contact.Status.Dead\"\n});\n\nMGT2.Attitudes = Object.freeze({\n Unknow: \"MGT2.Contact.Attitude.Unknow\",\n Hostile: \"MGT2.Contact.Attitude.Hostile\",\n Unfriendly: \"MGT2.Contact.Attitude.Unfriendly\",\n Indifferent: \"MGT2.Contact.Attitude.Indifferent\",\n Friendly: \"MGT2.Contact.Attitude.Friendly\",\n Helpful: \"MGT2.Contact.Attitude.Helpful\",\n Complicated: \"MGT2.Contact.Attitude.Complicated\"\n});\n\nMGT2.Characteristics = Object.freeze({\n strength: \"MGT2.Characteristics.strength.name\",\n dexterity: \"MGT2.Characteristics.dexterity.name\",\n endurance: \"MGT2.Characteristics.endurance.name\",\n intellect: \"MGT2.Characteristics.intellect.name\",\n education: \"MGT2.Characteristics.education.name\",\n social: \"MGT2.Characteristics.social.name\",\n morale: \"MGT2.Characteristics.morale.name\",\n luck: \"MGT2.Characteristics.luck.name\",\n sanity: \"MGT2.Characteristics.sanity.name\",\n charm: \"MGT2.Characteristics.charm.name\",\n psionic: \"MGT2.Characteristics.psionic.name\",\n other: \"MGT2.Characteristics.other.name\"\n});\n\nMGT2.InitiativeCharacteristics = Object.freeze({\n dexterity: \"MGT2.Characteristics.dexterity.name\",\n intellect: \"MGT2.Characteristics.intellect.name\"\n});\n\nMGT2.DamageCharacteristics = Object.freeze({\n strength: \"MGT2.Characteristics.strength.name\",\n dexterity: \"MGT2.Characteristics.dexterity.name\",\n endurance: \"MGT2.Characteristics.endurance.name\"\n});\n\nMGT2.TL = Object.freeze({\n NA: \"MGT2.TL.NA\",\n Unknow: \"MGT2.TL.Unknow\",\n NotIdentified: \"MGT2.TL.NotIdentified\",\n TL00: \"MGT2.TL.L00\",\n TL01: \"MGT2.TL.L01\",\n TL02: \"MGT2.TL.L02\",\n TL03: \"MGT2.TL.L03\",\n TL04: \"MGT2.TL.L04\",\n TL05: \"MGT2.TL.L05\",\n TL06: \"MGT2.TL.L06\",\n TL07: \"MGT2.TL.L07\",\n TL08: \"MGT2.TL.L08\",\n TL09: \"MGT2.TL.L09\",\n TL10: \"MGT2.TL.L10\",\n TL11: \"MGT2.TL.L11\",\n TL12: \"MGT2.TL.L12\",\n TL13: \"MGT2.TL.L13\",\n TL14: \"MGT2.TL.L14\",\n TL15: \"MGT2.TL.L15\"\n});\n\nMGT2.Timeframes = Object.freeze({\n Normal: \"MGT2.Timeframes.Normal\",\n Slower: \"MGT2.Timeframes.Slower\",\n Faster: \"MGT2.Timeframes.Faster\"\n});\n\nMGT2.SpeedBands = Object.freeze({\n Stoppped: \"MGT2.SpeedBands.Stoppped\",\n Idle: \"MGT2.SpeedBands.Idle\",\n VerySlow: \"MGT2.SpeedBands.VerySlow\",\n Slow: \"MGT2.SpeedBands.Slow\",\n Medium: \"MGT2.SpeedBands.Medium\",\n High: \"MGT2.SpeedBands.High\",\n Fast: \"MGT2.SpeedBands.Fast\",\n VeryFast: \"MGT2.SpeedBands.VeryFast\",\n Subsonic: \"MGT2.SpeedBands.Subsonic\",\n Hypersonic: \"MGT2.SpeedBands.Hypersonic\"\n});\n\nMGT2.Durations = Object.freeze({\n Seconds: \"MGT2.Durations.Seconds\",\n Minutes: \"MGT2.Durations.Minutes\",\n Heures: \"MGT2.Durations.Heures\"\n});\n\nMGT2.CreatureBehaviorType = Object.freeze({\n herbivore: \"MGT2.CreatureBehaviorType.herbivore\",\n carnivore: \"MGT2.CreatureBehaviorType.carnivore\",\n charognard: \"MGT2.CreatureBehaviorType.charognard\",\n omnivore: \"MGT2.CreatureBehaviorType.omnivore\"\n});\n\nMGT2.CreatureBehaviorSubType = Object.freeze({\n accumulateur: \"MGT2.CreatureBehaviorSubType.accumulateur\",\n brouteur: \"MGT2.CreatureBehaviorSubType.brouteur\",\n filtreur: \"MGT2.CreatureBehaviorSubType.filtreur\",\n intermittent: \"MGT2.CreatureBehaviorSubType.intermittent\",\n chasseur: \"MGT2.CreatureBehaviorSubType.chasseur\",\n detourneur: \"MGT2.CreatureBehaviorSubType.detourneux\",\n guetteur: \"MGT2.CreatureBehaviorSubType.guetteur\",\n mangeur: \"MGT2.CreatureBehaviorSubType.mangeur\",\n piegeur: \"MGT2.CreatureBehaviorSubType.piegeur\",\n intimidateur: \"MGT2.CreatureBehaviorSubType.intimidateur\",\n necrophage: \"MGT2.CreatureBehaviorSubType.necrophage\",\n reducteur: \"MGT2.CreatureBehaviorSubType.reducteur\",\n opportuniste: \"MGT2.CreatureBehaviorSubType.opportuniste\"\n});\n\nMGT2.HealingType = Object.freeze({\n FIRST_AID: \"MGT2.Healing.FirstAid\",\n SURGERY: \"MGT2.Healing.Surgery\",\n MEDICAL_CARE: \"MGT2.Healing.MedicalCare\",\n NATURAL_HEALING: \"MGT2.Healing.NaturalHealing\"\n});","export class ActorCharacter {\n static preCreate($this, data, options, user) {\n $this.updateSource({ prototypeToken: { actorLink: true } }) // QoL\n }\n\n static prepareData(actorData) {\n actorData.initiative = this.getInitiative(actorData);\n }\n\n static getInitiative($this) {\n let c = $this.system.config.initiative;\n return $this.system.characteristics[c].dm;\n }\n\n static async onDeleteDescendantDocuments($this, parent, collection, documents, ids, options, userId) {\n const toDeleteIds = [];\n const itemToUpdates = [];\n\n for (let d of documents) {\n if (d.type === \"container\") {\n // Delete content\n for (let item of $this.items) {\n if (item.system.hasOwnProperty(\"container\") && item.system.container.id === d._id)\n toDeleteIds.push(item._id);\n }\n } else if (d.type === \"computer\") {\n // Eject software\n for (let item of $this.items) {\n if (item.system.hasOwnProperty(\"software\") && item.system.computerId === d._id) {\n let clone = foundry.utils.deepClone(item);\n clone.system.software.computerId = \"\";\n itemToUpdates.push(clone);\n }\n }\n }\n }\n\n if (toDeleteIds.length > 0)\n await $this.deleteEmbeddedDocuments(\"Item\", toDeleteIds);\n\n if (itemToUpdates.length > 0)\n await $this.updateEmbeddedDocuments('Item', itemToUpdates);\n\n await this.recalculateWeight($this);\n }\n\n static async onUpdateDescendantDocuments($this, parent, collection, documents, changes, options, userId) {\n await this.calculEncumbranceAndWeight($this, parent, collection, documents, changes, options, userId);\n await this.calculComputers($this, parent, collection, documents, changes, options, userId);\n }\n\n static async calculComputers($this, parent, collection, documents, changes, options, userId) {\n let change;\n let i = 0;\n\n let recalculProcessing = false;\n for (let d of documents) {\n if (changes[i].hasOwnProperty(\"system\")) {\n change = changes[i];\n if (d.type === \"item\" && d.system.subType === \"software\") {\n if (change.system.software.hasOwnProperty(\"bandwidth\") || change.system.software.hasOwnProperty(\"computerId\")) {\n recalculProcessing = true;\n break;\n }\n }\n }\n }\n\n if (recalculProcessing) {\n let updatedComputers = [];\n let computerChanges = {};\n let computers = [];\n\n for (let item of $this.items) {\n if (item.system.trash === true) continue;\n if (item.type === \"computer\") {\n computers.push(item);\n computerChanges[item._id] = { processingUsed: 0 };\n }\n }\n\n for (let item of $this.items) {\n if (item.type !== \"item\" && item.system.subType !== \"software\") continue;\n\n if (item.system.software.hasOwnProperty(\"computerId\") && item.system.software.computerId !== \"\") {\n computerChanges[item.system.software.computerId].processingUsed += item.system.software.bandwidth;\n }\n }\n\n for (let computer of computers) {\n let newProcessingUsed = computerChanges[computer._id].processingUsed;\n if (computer.system.processingUsed !== newProcessingUsed) {\n const cloneComputer = foundry.utils.deepClone($this.getEmbeddedDocument(\"Item\", computer._id));\n cloneComputer.system.processingUsed = newProcessingUsed;\n cloneComputer.system.overload = cloneComputer.system.processingUsed > cloneComputer.system.processing;\n updatedComputers.push(cloneComputer);\n }\n }\n\n if (updatedComputers.length > 0) {\n await $this.updateEmbeddedDocuments('Item', updatedComputers);\n }\n }\n }\n\n static async calculEncumbranceAndWeight($this, parent, collection, documents, changes, options, userId) {\n let recalculEncumbrance = false;\n let recalculWeight = false;\n\n let change;\n let i = 0;\n for (let d of documents) {\n if (changes[i].hasOwnProperty(\"system\")) {\n change = changes[i];\n\n if (d.type === \"armor\" ||\n d.type === \"computer\" ||\n d.type === \"gear\" ||\n d.type === \"item\" ||\n d.type === \"weapon\") {\n if (change.system.hasOwnProperty(\"quantity\") ||\n change.system.hasOwnProperty(\"weight\") ||\n change.system.hasOwnProperty(\"weightless\") ||\n change.system.hasOwnProperty(\"container\") ||\n change.system.hasOwnProperty(\"equipped\") ||\n d.type === \"armor\") {\n recalculWeight = true;\n }\n } else if (d.type === \"talent\" && d.system.subType === \"skill\") {\n if (change.system.level || (change.system?.hasOwnProperty(\"skill\") && change.system?.skill.hasOwnProperty(\"reduceEncumbrance\"))) {\n recalculEncumbrance = true;\n }\n } else if (d.type === \"container\" && (change.system.hasOwnProperty(\"onHand\") || change.system.hasOwnProperty(\"weightless\"))) {\n recalculWeight = true;\n }\n }\n i++;\n }\n\n if (recalculEncumbrance || recalculWeight) {\n const updateData = {};\n\n this.recalculateArmor($this, updateData);\n\n if (recalculEncumbrance) {\n const str = $this.system.characteristics.strength.value;\n const end = $this.system.characteristics.endurance.value;\n let sumSkill = 0;\n $this.items.filter(x => x.type === \"talent\" && x.system.subType === \"skill\" && x.system.skill.reduceEncumbrance === true).forEach(x => sumSkill += x.system.level);\n let normal = str + end + sumSkill;\n let heavy = normal * 2;\n\n updateData[\"system.states.encumbrance\"] = $this.system.inventory.weight > normal;\n updateData[\"system.inventory.encumbrance.normal\"] = normal;\n updateData[\"system.inventory.encumbrance.heavy\"] = heavy;\n }\n\n if (recalculWeight)\n await this.recalculateWeight($this, updateData);\n else if (Object.keys(updateData).length > 0)\n await $this.update(updateData);\n }\n }\n\n static recalculateArmor($this, updateData) {\n if (updateData === null || updateData === undefined)\n updateData = {};\n\n let armor = 0;\n for (let item of $this.items) {\n if (item.type === \"armor\") {\n if (item.system.equipped === true && !isNaN(item.system.protection)) {\n armor += (+item.system.protection || 0);\n }\n }\n }\n\n updateData[\"system.inventory.armor\"] = armor;\n return updateData;\n }\n\n static async recalculateWeight($this, updateData) {\n\n if (updateData === null || updateData === undefined)\n updateData = {};\n\n let updatedContainers = [];\n let containerChanges = {};\n\n let containers = [];\n\n // List all containers\n for (let item of $this.items) {\n if (item.system.trash === true) continue;\n\n if (item.type === \"container\") {\n containers.push(item);\n containerChanges[item._id] = { count: 0, weight: 0 };\n }\n }\n\n let onHandWeight = 0;\n for (let item of $this.items) {\n if (item.type === \"container\") continue;\n if (item.system.hasOwnProperty(\"weightless\") && item.system.weightless === true) continue;\n\n let itemWeight = 0;\n if (item.system.hasOwnProperty(\"weight\")) {\n let itemQty = item.system.quantity;\n if (!isNaN(itemQty) && itemQty > 0) {\n itemWeight = item.system.weight;\n if (itemWeight > 0) {\n itemWeight *= itemQty;\n }\n }\n\n if (item.type === \"armor\") {\n if (item.system.equipped === true) {\n if (item.system.powered === true)\n itemWeight = 0;\n else\n itemWeight *= 0.25; // mass of armor that is being worn by 75% OPTIONAL\n }\n }\n\n if (item.system.container && item.system.container.id && item.system.container.id !== \"\") {\n // bad deleted container id\n if (containerChanges.hasOwnProperty(item.system.container.id)) {\n containerChanges[item.system.container.id].weight += Math.round(itemWeight * 10) / 10;\n containerChanges[item.system.container.id].count += item.system.quantity;\n }\n } else {\n onHandWeight += Math.round(itemWeight * 10) / 10;\n }\n }\n }\n\n // Check containers new weight\n for (let container of containers) {\n let newWeight = containerChanges[container._id].weight;\n let newCount = containerChanges[container._id].count;\n if (container.system.weight !== newWeight || container.system.count !== newCount) {\n updatedContainers.push({\n _id: container._id,\n \"system.weight\": newWeight,\n \"system.count\": newCount,\n });\n\n if (container.system.onHand === true &&\n (container.system.weight > 0 || container.system.weightless !== true)) {\n onHandWeight += container.system.weight;\n }\n }\n }\n\n updateData[\"system.inventory.weight\"] = onHandWeight;\n updateData[\"system.states.encumbrance\"] = onHandWeight > $this.system.inventory.encumbrance.normal;\n\n await $this.update(updateData);\n\n if (updatedContainers.length > 0) {\n await $this.updateEmbeddedDocuments('Item', updatedContainers);\n }\n }\n\n static async preUpdate($this, changed, options, user) {\n // Calc encumbrance\n\n const newStr = foundry.utils.getProperty(changed, \"system.characteristics.strength.value\") ?? $this.system.characteristics.strength.value;\n const newEnd = foundry.utils.getProperty(changed, \"system.characteristics.endurance.value\") ?? $this.system.characteristics.endurance.value;\n if ((newStr !== $this.system.characteristics.strength.value) || (newEnd !== $this.system.characteristics.endurance.value)) {\n let sumSkill = 0;\n $this.items.filter(x => x.type === \"talent\" && x.system.subType === \"skill\" && x.system.skill.reduceEncumbrance === true).forEach(x => sumSkill += x.system.level);\n let normal = newStr + newEnd + sumSkill;\n let heavy = normal * 2;\n foundry.utils.setProperty(changed, \"system.inventory.encumbrance.normal\", normal);\n foundry.utils.setProperty(changed, \"system.inventory.encumbrance.heavy\", heavy);\n }\n\n //console.log(foundry.utils.getProperty(changed, \"system.characteristics.strength.value\"));\n const characteristicModified = this.computeCharacteristics(changed);\n const strengthValue = foundry.utils.getProperty(changed, \"system.characteristics.strength.value\") ?? $this.system.characteristics.strength.value;\n const strengthMax = foundry.utils.getProperty(changed, \"system.characteristics.strength.max\") ?? $this.system.characteristics.strength.max;\n const dexterityValue = foundry.utils.getProperty(changed, \"system.characteristics.dexterity.value\") ?? $this.system.characteristics.dexterity.value;\n const dexterityMax = foundry.utils.getProperty(changed, \"system.characteristics.dexterity.max\") ?? $this.system.characteristics.dexterity.max;\n const enduranceValue = foundry.utils.getProperty(changed, \"system.characteristics.endurance.value\") ?? $this.system.characteristics.endurance.value;\n const enduranceMax = foundry.utils.getProperty(changed, \"system.characteristics.endurance.max\") ?? $this.system.characteristics.endurance.max;\n const lifeValue = strengthValue + dexterityValue + enduranceValue;\n const lifeMax = strengthMax + dexterityMax + enduranceMax;\n\n if ($this.system.life.value !== lifeValue)\n foundry.utils.setProperty(changed, \"system.life.value\", lifeValue);\n if ($this.system.life.max !== lifeMax)\n foundry.utils.setProperty(changed, \"system.life.max\", lifeMax);\n\n if (characteristicModified && $this.system.personal.ucp === undefined || $this.system.personal.ucp === \"\") {\n // calc\n\n }\n //}\n\n // Apply changes in Actor size to Token width/height\n // if ( \"size\" in (this.system.traits || {}) ) {\n // const newSize = foundry.utils.getProperty(changed, \"system.traits.size\");\n // if ( newSize && (newSize !== this.system.traits?.size) ) {\n // let size = CONFIG.DND5E.tokenSizes[newSize];\n // if ( !foundry.utils.hasProperty(changed, \"prototypeToken.width\") ) {\n // changed.prototypeToken ||= {};\n // changed.prototypeToken.height = size;\n // changed.prototypeToken.width = size;\n // }\n // }\n // }\n }\n\n // static applyHealing($this, amount) {\n // if (isNaN(amount) || amount === 0) return;\n\n // const strength = $this.system.characteristics.strength;\n // const dexterity = $this.system.characteristics.dexterity;\n // const endurance = $this.system.characteristics.endurance;\n\n // const data = {\n // strength: { value: strength.value },\n // dexterity: { value: dexterity.value },\n // endurance: { value: endurance.value }\n // };\n\n\n\n // $this.update({ system: { characteristics: data } });\n // }\n\n static applyDamage($this, amount, { ignoreArmor = false } = {}) {\n if (isNaN(amount) || amount === 0) return;\n const rank1 = $this.system.config.damages.rank1;\n const rank2 = $this.system.config.damages.rank2;\n const rank3 = $this.system.config.damages.rank3;\n\n const data = {};\n data[rank1] = { value: $this.system.characteristics[rank1].value };\n data[rank2] = { value: $this.system.characteristics[rank2].value };\n data[rank3] = { value: $this.system.characteristics[rank3].value };\n\n if (amount < 0) amount = Math.abs(amount);\n\n if (!ignoreArmor) {\n const armorValue = $this.system.inventory?.armor ?? 0;\n amount = Math.max(0, amount - armorValue);\n if (amount === 0) return;\n }\n\n for (const [key, rank] of Object.entries(data)) {\n if (rank.value > 0) {\n if (rank.value >= amount) {\n rank.value -= amount;\n amount = 0;\n } else {\n amount -= rank.value;\n rank.value = 0;\n }\n rank.dm = this.getModifier(rank.value);\n if (amount <= 0) break;\n }\n }\n\n $this.update({ system: { characteristics: data } });\n }\n\n static applyHealing($this, amount, type) {\n if (isNaN(amount) || amount === 0) return;\n\n const rank1 = $this.system.config.damages.rank1;\n const rank2 = $this.system.config.damages.rank2;\n const rank3 = $this.system.config.damages.rank3;\n\n // Data to restore (reverse cascade: END → DEX → STR)\n const data = {};\n const rankOrder = [rank3, rank2, rank1]; // Reverse order for healing\n const maxValues = {\n [rank1]: $this.system.characteristics[rank1].max,\n [rank2]: $this.system.characteristics[rank2].max,\n [rank3]: $this.system.characteristics[rank3].max\n };\n\n if (amount < 0) amount = Math.abs(amount);\n\n // Distribute healing from lowest rank first (END → DEX → STR typically)\n for (const rank of rankOrder) {\n const current = $this.system.characteristics[rank].value;\n const max = maxValues[rank];\n\n if (current < max && amount > 0) {\n const canRestore = max - current;\n const restore = Math.min(amount, canRestore);\n \n if (!data[rank]) {\n data[rank] = { value: current };\n }\n data[rank].value += restore;\n data[rank].dm = this.getModifier(data[rank].value);\n amount -= restore;\n }\n }\n\n // Only update if something was restored\n if (Object.keys(data).length > 0) {\n return $this.update({ system: { characteristics: data } });\n }\n }\n\n static getContainers($this) {\n const containers = [];\n for (let item of $this.items) {\n if (item.type == \"container\") {\n containers.push(item);\n }\n }\n\n containers.sort(this.compareByName);\n\n return containers;\n }\n\n static getComputers($this) {\n const containers = [];\n for (let item of $this.items) {\n if (item.type == \"computer\") {\n containers.push(item);\n }\n }\n\n containers.sort(this.compareByName);\n\n return containers;\n }\n\n static getSkills($this) {\n const skills = [];\n for (let item of $this.items) {\n if (item.type === \"talent\" && item.system.subType === \"skill\") {\n skills.push(item);\n }\n }\n\n skills.sort(this.compareByName);\n\n return skills;\n }\n\n static computeCharacteristics(changed) {\n let modified = this.computeCharacteristic(changed, \"strength\");\n\n if (this.computeCharacteristic(changed, \"dexterity\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"endurance\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"intellect\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"education\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"social\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"morale\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"luck\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"sanity\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"charm\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"psionic\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"other\") && !modified) modified = true;\n\n return modified;\n }\n\n static computeCharacteristic(changed, name) {\n //if (isNaN(c.value) || c.value <= 0) c.value = 0;\n //c.dm = this._getModifier(c.value)\n const path = `system.characteristics.${name}`;\n const newValue = foundry.utils.getProperty(changed, path + \".value\");// || this.system.characteristics[name].value;\n if (newValue) {\n const dm = this.getModifier(newValue);\n foundry.utils.setProperty(changed, path + \".dm\", dm);\n return true;\n }\n\n return false;\n }\n\n static getModifier(value) {\n if (isNaN(value) || value <= 0) return -3;\n if (value >= 1 && value <= 2) return -2;\n if (value >= 3 && value <= 5) return -1;\n if (value >= 6 && value <= 8) return 0;\n if (value >= 9 && value <= 11) return 1;\n if (value >= 12 && value <= 14) return 2;\n\n return 3;\n }\n\n static compareByName(a, b) {\n if (!a.hasOwnProperty(\"name\") || !b.hasOwnProperty(\"name\")) {\n return 0;\n }\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n }\n}","import { ActorCharacter } from \"./character.js\";\n\nexport class MGT2Combatant extends Combatant {\n \n}\n\nexport class TravellerActor extends Actor {\n\n\n prepareDerivedData() {\n if (this.type === \"character\") {\n this.system.initiative = ActorCharacter.getInitiative(this);\n }\n }\n\n async _preCreate(data, options, user) {\n if ( (await super._preCreate(data, options, user)) === false ) return false;\n \n if (this.type === \"character\") {\n ActorCharacter.preCreate(this, data, options, user);\n }\n }\n\n async _onDeleteDescendantDocuments(parent, collection, documents, ids, options, userId) {\n await super._onDeleteDescendantDocuments(parent, collection, documents, ids, options, userId);\n\n if (this.type === \"character\") {\n await ActorCharacter.onDeleteDescendantDocuments(this, parent, collection, documents, ids, options, userId);\n }\n }\n\n async _onUpdateDescendantDocuments(parent, collection, documents, changes, options, userId) {\n super._onUpdateDescendantDocuments(parent, collection, documents, changes, options, userId);\n //console.log(\"_onUpdateDescendantDocuments\");\n\n if (this.type === \"character\") {\n await ActorCharacter.onUpdateDescendantDocuments(this, parent, collection, documents, changes, options, userId);\n }\n }\n\n async _preUpdate(changed, options, user) {\n if ((await super._preUpdate(changed, options, user)) === false) return false;\n\n if (this.type === \"character\") {\n await ActorCharacter.preUpdate(this, changed, options, user);\n }\n }\n\n getInitiative($this) {\n if (this.type === \"character\") {\n return ActorCharacter.getInitiative(this);\n }\n }\n\n applyDamage(amount, { ignoreArmor = false } = {}) {\n if (this.type === \"character\") {\n return ActorCharacter.applyDamage(this, amount, { ignoreArmor });\n } else if (this.type === \"creature\") {\n if (isNaN(amount) || amount === 0) return;\n if (amount < 0) amount = Math.abs(amount);\n const armorValue = ignoreArmor ? 0 : (this.system.armor ?? 0);\n const effective = Math.max(0, amount - armorValue);\n if (effective === 0) return;\n const newValue = Math.max(0, (this.system.life.value ?? 0) - effective);\n return this.update({ \"system.life.value\": newValue });\n }\n }\n\n applyHealing(amount) {\n if (this.type === \"character\") {\n return ActorCharacter.applyHealing(this, amount);\n } else if (this.type === \"creature\") {\n if (isNaN(amount) || amount === 0) return;\n if (amount < 0) amount = Math.abs(amount);\n const maxValue = this.system.life.max ?? 0;\n const current = this.system.life.value ?? 0;\n const newValue = Math.min(current + amount, maxValue);\n if (newValue !== current) {\n return this.update({ \"system.life.value\": newValue });\n }\n }\n }\n\n getContainers() {\n if (this.type === \"character\") {\n return ActorCharacter.getContainers(this);\n }\n\n return [];\n }\n\n getComputers() {\n if (this.type === \"character\") {\n return ActorCharacter.getComputers(this);\n }\n\n return [];\n }\n\n getSkills() {\n if (this.type === \"character\") {\n return ActorCharacter.getSkills(this);\n }\n\n return [];\n }\n\n async recalculateWeight() {\n if (this.type === \"character\") {\n return ActorCharacter.recalculateWeight(this);\n }\n }\n\n}\n","export class TravellerItem extends Item {\n\n /** @inheritdoc */\n prepareDerivedData() {\n super.prepareDerivedData();\n\n }\n\n async _preUpdate(changed, options, user) {\n if ((await super._preUpdate(changed, options, user)) === false) return false;\n\n if (this.type === \"computer\") {\n // Overload\n const newProcessing = foundry.utils.getProperty(changed, \"system.processing\") ?? this.system.processing;\n if (newProcessing !== this.system.processing) {\n let overload = this.system.processingUsed > newProcessing;\n foundry.utils.setProperty(changed, \"system.overload\", overload);\n }\n }\n\n // Qty max 1\n if (this.type === \"computer\" || this.type === \"container\" || (this.type === \"item\" && this.system.subType === \"software\")) {\n const newQty = foundry.utils.getProperty(changed, \"system.quantity\") ?? this.system.quantity;\n if (newQty !== this.system.quantity && newQty > 1) {\n foundry.utils.setProperty(changed, \"system.quantity\", 1);\n }\n }\n\n // No Weight\n if (this.type === \"item\" && this.system.subType === \"software\") {\n const newWeight = foundry.utils.getProperty(changed, \"system.weight\") ?? this.system.weight;\n if (newWeight !== this.system.weight && newWeight > 0) {\n foundry.utils.setProperty(changed, \"system.weight\", 0);\n }\n }\n }\n\n getRollDisplay() {\n if (this.type === \"talent\") {\n if (this.system.subType === \"skill\") {\n let label;\n if (this.system.skill.speciality !== \"\" && this.system.skill.speciality !== undefined) {\n label = `${this.name} (${this.system.skill.speciality})`;\n } else {\n label = this.name;\n }\n\n if (this.system.level > 0)\n label += ` (+${this.system.level})`;\n else if (this.system.level < 0)\n label += ` (${this.system.level})`;\n\n return label;\n } else if (this.system.subType === \"psionic\") {\n\n }\n }\n\n return name;\n }\n}\n","const { HandlebarsApplicationMixin } = foundry.applications.api;\n\nexport default class MGT2ActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) {\n\n static SHEET_MODES = { EDIT: 0, PLAY: 1 }\n\n constructor(options = {}) {\n super(options);\n this._sheetMode = this.constructor.SHEET_MODES.PLAY;\n }\n\n /** @override */\n static DEFAULT_OPTIONS = {\n classes: [\"mgt2\", \"sheet\", \"actor\"],\n position: {\n width: 780,\n },\n form: {\n submitOnChange: true,\n closeOnSubmit: false,\n },\n window: {\n resizable: true,\n },\n dragDrop: [{ dragSelector: \".drag-item-list\", dropSelector: \".drop-item-list\" }],\n actions: {\n toggleSheet: MGT2ActorSheet.#onToggleSheet,\n },\n }\n\n get isPlayMode() {\n if (this._sheetMode === undefined) this._sheetMode = this.constructor.SHEET_MODES.PLAY;\n return this._sheetMode === this.constructor.SHEET_MODES.PLAY;\n }\n\n get isEditMode() {\n if (this._sheetMode === undefined) this._sheetMode = this.constructor.SHEET_MODES.PLAY;\n return this._sheetMode === this.constructor.SHEET_MODES.EDIT;\n }\n\n tabGroups = { sidebar: \"health\" }\n\n /** @override */\n async _prepareContext() {\n const base = await super._prepareContext();\n const actor = this.document;\n return {\n ...base,\n actor: actor,\n // Flat shorthands for template backward-compat (AppV1 style)\n name: actor.name,\n img: actor.img,\n cssClass: this.isEditable ? \"editable\" : \"locked\",\n system: actor.system,\n source: actor.toObject(),\n fields: actor.schema.fields,\n systemFields: actor.system.schema.fields,\n isEditable: this.isEditable,\n isEditMode: this.isEditMode,\n isPlayMode: this.isPlayMode,\n isGM: game.user.isGM,\n config: CONFIG.MGT2,\n };\n }\n\n /** @override */\n _onRender(context, options) {\n super._onRender(context, options);\n // Inject theme class dynamically (can't use game.settings in static DEFAULT_OPTIONS)\n const theme = game.settings.get(\"mgt2\", \"theme\");\n if (theme) this.element.classList.add(theme);\n this._activateTabGroups();\n }\n\n _activateTabGroups() {\n for (const [group, activeTab] of Object.entries(this.tabGroups)) {\n const nav = this.element.querySelector(`nav[data-group=\"${group}\"]`);\n if (!nav) continue;\n\n nav.querySelectorAll('[data-tab]').forEach(link => {\n link.classList.toggle('active', link.dataset.tab === activeTab);\n link.addEventListener('click', event => {\n event.preventDefault();\n this.tabGroups[group] = link.dataset.tab;\n this.render();\n });\n });\n\n this.element.querySelectorAll(`[data-group=\"${group}\"][data-tab]`).forEach(content => {\n content.classList.toggle('active', content.dataset.tab === activeTab);\n });\n }\n }\n\n /** @override */\n _canDragDrop(selector) {\n return this.isEditable;\n }\n\n static async #onToggleSheet(event) {\n event.preventDefault();\n this._sheetMode = this.isPlayMode\n ? this.constructor.SHEET_MODES.EDIT\n : this.constructor.SHEET_MODES.PLAY;\n this.render();\n }\n}\n","export class MGT2Helper {\n static POUNDS_CONVERT = 2.20462262185;\n\n static decimalSeparator;\n static badDecimalSeparator;\n\n static {\n this.decimalSeparator = Number(1.1).toLocaleString().charAt(1);\n this.badDecimalSeparator = (this.decimalSeparator === \".\" ? \",\" : \".\");\n }\n\n static format = function() {\n var s = arguments[0];\n for (var i = 0; i < arguments.length - 1; i++) { \n var reg = new RegExp(\"\\\\{\" + i + \"\\\\}\", \"gm\"); \n s = s.replace(reg, arguments[i + 1]);\n }\n return s;\n }\n\n static hasValue(object, property) {\n return object !== undefined && object.hasOwnProperty(property) && object[property] !== null && object[property] !== undefined && object[property] !== \"\";\n }\n\n static getItemsWeight(items) {\n let weight = 0;\n for (let i of items) {\n let item = i.hasOwnProperty(\"system\") ? i.system : i;\n if (item.hasOwnProperty(\"weightless\") && item.weightless === true) {\n continue;\n }\n\n if (item.hasOwnProperty(\"weight\")) {\n let itemQty = item.quantity\n if (!isNaN(itemQty) && itemQty > 0) {\n let itemWeight = item.weight;\n if (itemWeight > 0) {\n weight += itemWeight * itemQty;\n }\n }\n }\n }\n return weight;\n }\n\n static generateUID() {\n let result = '';\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n\n for (let i = 0; i < 36; i++) {\n const randomIndex = Math.floor(Math.random() * characters.length);\n result += characters.charAt(randomIndex);\n if (i === 8 || i === 12 || i === 16 || i === 20)\n result += \"-\";\n }\n\n return result;\n }\n\n static compareByName(a, b) {\n if (!a.hasOwnProperty(\"name\") || !b.hasOwnProperty(\"name\")) {\n return 0;\n }\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n }\n\n static getDisplayDM(dm) {\n if (dm === 0) return \" (0)\";\n if (dm > 0) return ` (+${dm})`;\n if (dm < 0) return ` (${dm})`;\n return \"\";\n }\n static getFormulaDM(dm) {\n if (dm === 0) return \"+0\";\n if (dm > 0) return `+${dm}`;\n if (dm < 0) return `${dm}`;\n return \"\";\n }\n\n static getDiceResults(roll) {\n const results = [];\n for (const die of roll.dice) {\n results.push(die.results);\n }\n return results.flat(2);\n }\n\n static getDiceTotal(roll) {\n let total = 0;\n for (const die of roll.dice) {\n total += die.total;\n }\n return total;\n }\n\n static getDifficultyValue(difficulty) {\n switch(difficulty) {\n case \"Simple\": return 2;\n case \"Easy\": return 4;\n case \"Routine\": return 6;\n case \"Average\": return 8;\n case \"Difficult\": return 10;\n case \"VeryDifficult\": return 12;\n case \"Formidable\": return 14;\n case \"Impossible\": return 16;\n default:\n return 0;\n }\n }\n\n static getDifficultyDisplay(difficulty) {\n const key = `MGT2.Difficulty.${difficulty}`;\n const label = game.i18n.localize(key);\n return label !== key ? label : null;\n }\n\n static getRangeDisplay(range) {\n let value = Number(range.value);\n\n if (isNaN(value)) return null;\n\n let label;\n //if (game.settings.get(\"mgt2\", \"useDistanceMetric\") === true) {\n if (range.unit !== null && range.unit !== undefined && range.unit !== \"\")\n label = game.i18n.localize(`MGT2.MetricRange.${range.unit}`).toLowerCase();\n else\n label = \"\";\n //} else {\n // TODO\n //}\n\n return `${value}${label}`;\n }\n\n static getWeightLabel() {\n //const label = game.settings.get(\"mgt2\", \"useWeightMetric\") === true ? \"MGT2.MetricSystem.Weight.kg\" : \"MGT2.ImperialSystem.Weight.lb\";\n //return game.i18n.localize(label);\n return game.i18n.localize(\"MGT2.MetricSystem.Weight.kg\");\n }\n\n static getDistanceLabel() {\n //const label = game.settings.get(\"mgt2\", \"useDistanceMetric\") === true ? \"MGT2.MetricSystem.Distance.km\" : \"MGT2.ImperialSystem.Distance.mi\";\n //return game.i18n.localize(label);\n return game.i18n.localize(\"MGT2.MetricSystem.Distance.km\");\n }\n\n static getIntegerFromInput(data) {\n return Math.trunc(this.getNumberFromInput(data));\n }\n\n static getNumberFromInput(data) {\n if (data === undefined || data === null) return 0;\n\n if (typeof data === \"string\") {\n let converted = Number(data.replace(/\\s+/g, '').replace(this.badDecimalSeparator, this.decimalSeparator).trim());\n if (isNaN(converted))\n return 0;\n\n return converted;\n }\n\n let converted = Number(data);\n\n if (isNaN(converted))\n return 0;\n\n return converted;\n }\n\n static convertWeightForDisplay(weight) {\n //if (game.settings.get(\"mgt2\", \"useWeightMetric\") === true || weight === 0)\n return weight;\n\n // Metric to Imperial\n //const pounds = weight * this.POUNDS_CONVERT;\n //return Math.round(pounds * 10) / 10;\n }\n\n static convertWeightFromInput(weight) {\n //if (game.settings.get(\"mgt2\", \"useWeightMetric\") === true || weight === 0)\n return Math.round(weight * 10) / 10;\n\n // Imperial to Metric\n //const kg = this.POUNDS_CONVERT / weight;\n //return Math.round(kg * 10) / 10;\n }\n\n static getDataFromDropEvent(event) {\n let data;\n try {\n return JSON.parse(event.dataTransfer?.getData(\"text/plain\"));\n } catch (err) {\n return false;\n }\n\n //if ( data.type !== \"Item\" ) return false;\n //const item = await Item.implementation.fromDropData(data);\n }\n\n static async getItemDataFromDropData(dropData) {\n //console.log(\"getItemDataFromDropData\");\n let item;\n if (game.modules.get(\"monks-enhanced-journal\")?.active && dropData.itemId && dropData.uuid.includes(\"JournalEntry\")) {\n const journalEntry = await fromUuid(dropData.uuid);\n } else if (dropData.hasOwnProperty(\"uuid\")) {\n item = await fromUuid(dropData.uuid);\n } else {\n let uuid = `${dropData.type}.${dropData.data._id}`;\n item = await fromUuid(uuid);\n }\n\n if (!item) {\n throw new Error(game.i18n.localize(\"Errors.CouldNotFindItem\").replace(\"_ITEM_ID_\", dropData.uuid));\n }\n if (item.pack) {\n const pack = game.packs.get(item.pack);\n item = await pack?.getDocument(item._id);\n }\n return deepClone(item);\n }\n}","const { DialogV2 } = foundry.applications.api;\nconst { renderTemplate } = foundry.applications.handlebars;\nconst { FormDataExtended } = foundry.applications.ux;\n\nexport class RollPromptHelper {\n\n static async roll(options) {\n // Backward compat: allow (actor, options) or just (options)\n if (options.rollTypeName || options.characteristics || options.skill !== undefined) {\n // Normal call with options\n } else {\n // Called with (actor, options)\n options = arguments[1] || options;\n }\n\n const htmlContent = await renderTemplate('systems/mgt2/templates/roll-prompt.html', {\n config: CONFIG.MGT2,\n // Character-mode fields\n characteristics: options.characteristics ?? [],\n characteristic: options.characteristic ?? \"\",\n skills: options.skills ?? [],\n skill: options.skill ?? \"\",\n fatigue: options.fatigue ?? false,\n encumbrance: options.encumbrance ?? false,\n difficulty: options.difficulty ?? \"Average\",\n timeframe: options.timeframe ?? \"Normal\",\n customDM: options.customDM ?? \"0\",\n rollMode: options.rollMode ?? \"publicroll\",\n // Creature-mode flags\n isCreature: options.isCreature ?? false,\n creatureSkills: options.creatureSkills ?? [],\n selectedSkillIndex: options.selectedSkillIndex ?? -1,\n showSkillSelector: options.showSkillSelector ?? false,\n skillName: options.skillName ?? \"\",\n skillLevel: options.skillLevel ?? 0,\n // Healing fields\n showHeal: options.showHeal ?? false,\n healType: options.healType ?? null\n });\n\n return await DialogV2.wait({\n window: { title: options.title ?? options.rollTypeName ?? game.i18n.localize(\"MGT2.RollPrompt.Roll\") },\n classes: [\"mgt2-roll-dialog\"],\n content: htmlContent,\n rejectClose: false,\n buttons: [\n {\n action: \"boon\",\n label: game.i18n.localize(\"MGT2.RollPrompt.Boon\"),\n callback: (event, button, dialog) => {\n const formData = new FormDataExtended(dialog.element.querySelector('form')).object;\n formData.diceModifier = \"dl\";\n return formData;\n }\n },\n {\n action: \"submit\",\n label: game.i18n.localize(\"MGT2.RollPrompt.Roll\"),\n icon: '',\n default: true,\n callback: (event, button, dialog) => {\n return new FormDataExtended(dialog.element.querySelector('form')).object;\n }\n },\n {\n action: \"bane\",\n label: game.i18n.localize(\"MGT2.RollPrompt.Bane\"),\n callback: (event, button, dialog) => {\n const formData = new FormDataExtended(dialog.element.querySelector('form')).object;\n formData.diceModifier = \"dh\";\n return formData;\n }\n }\n ]\n });\n }\n}\n","const { DialogV2 } = foundry.applications.api;\nconst { renderTemplate } = foundry.applications.handlebars;\nconst { FormDataExtended } = foundry.applications.ux;\n\nasync function _dialogWithForm(title, templatePath, templateData) {\n const htmlContent = await renderTemplate(templatePath, templateData);\n const theme = game.settings.get(\"mgt2\", \"theme\");\n return await DialogV2.wait({\n window: { title },\n content: htmlContent,\n rejectClose: false,\n buttons: [\n {\n action: \"submit\",\n label: game.i18n.localize(\"MGT2.Save\"),\n icon: '',\n default: true,\n callback: (event, button, dialog) => {\n return new FormDataExtended(dialog.element.querySelector('form')).object;\n }\n }\n ]\n });\n}\n\nexport class CharacterPrompts {\n\n static async openConfig(system) {\n return _dialogWithForm(\n \"Configuration\",\n \"systems/mgt2/templates/actors/actor-config-sheet.html\",\n { config: CONFIG.MGT2, system }\n );\n }\n\n static async openCharacteristic(name, show, showMax, showAll = false) {\n return _dialogWithForm(\n \"Configuration: \" + name,\n \"systems/mgt2/templates/actors/actor-config-characteristic-sheet.html\",\n { name, show, showMax, showAll }\n );\n }\n\n static async openTraitEdit(data) {\n const title = data.name ?? game.i18n.localize(\"MGT2.Actor.EditTrait\");\n return _dialogWithForm(\n title,\n \"systems/mgt2/templates/actors/trait-sheet.html\",\n { config: CONFIG.MGT2, data }\n );\n }\n\n static async openEditorFullView(title, html) {\n const htmlContent = await renderTemplate(\"systems/mgt2/templates/editor-fullview.html\", {\n config: CONFIG.MGT2,\n html\n });\n const theme = game.settings.get(\"mgt2\", \"theme\");\n await DialogV2.wait({\n window: { title },\n content: htmlContent,\n rejectClose: false,\n buttons: [\n {\n action: \"close\",\n label: game.i18n.localize(\"MGT2.Close\") || \"Fermer\",\n default: true,\n callback: () => null\n }\n ]\n });\n }\n\n static async openHealingDays() {\n return await DialogV2.wait({\n window: { \n title: game.i18n.localize(\"MGT2.Healing.Title\")\n },\n classes: [\"mgt2-roll-dialog\"],\n content: `\n
\n
\n
\n \n \n
\n
\n
\n `,\n rejectClose: false,\n buttons: [\n {\n action: \"submit\",\n label: game.i18n.localize(\"MGT2.Save\"),\n icon: '',\n default: true,\n callback: (event, button, dialog) => {\n return new FormDataExtended(dialog.element.querySelector('form')).object;\n }\n }\n ]\n });\n }\n}","import MGT2ActorSheet from \"./base-actor-sheet.mjs\";\nimport { MGT2 } from \"../../config.js\";\nimport { MGT2Helper } from \"../../helper.js\";\nimport { RollPromptHelper } from \"../../roll-prompt.js\";\nimport { CharacterPrompts } from \"../../actors/character-prompts.js\";\n\nexport default class TravellerCharacterSheet extends MGT2ActorSheet {\n\n /** @override */\n static DEFAULT_OPTIONS = {\n ...super.DEFAULT_OPTIONS,\n classes: [...super.DEFAULT_OPTIONS.classes, \"character\", \"nopad\"],\n window: {\n ...super.DEFAULT_OPTIONS.window,\n title: \"TYPES.Actor.character\",\n },\n actions: {\n ...super.DEFAULT_OPTIONS.actions,\n createItem: TravellerCharacterSheet.#onCreateItem,\n editItem: TravellerCharacterSheet.#onEditItem,\n deleteItem: TravellerCharacterSheet.#onDeleteItem,\n equipItem: TravellerCharacterSheet.#onEquipItem,\n itemStorageIn: TravellerCharacterSheet.#onItemStorageIn,\n itemStorageOut: TravellerCharacterSheet.#onItemStorageOut,\n softwareEject: TravellerCharacterSheet.#onSoftwareEject,\n createContainer: TravellerCharacterSheet.#onContainerCreate,\n editContainer: TravellerCharacterSheet.#onContainerEdit,\n deleteContainer: TravellerCharacterSheet.#onContainerDelete,\n roll: TravellerCharacterSheet.#onRoll,\n openConfig: TravellerCharacterSheet.#onOpenConfig,\n openCharacteristic: TravellerCharacterSheet.#onOpenCharacteristic,\n traitCreate: TravellerCharacterSheet.#onTraitCreate,\n traitEdit: TravellerCharacterSheet.#onTraitEdit,\n traitDelete: TravellerCharacterSheet.#onTraitDelete,\n openEditor: TravellerCharacterSheet.#onOpenEditor,\n heal: TravellerCharacterSheet.#onHeal,\n },\n }\n\n /** @override */\n static PARTS = {\n sheet: {\n template: \"systems/mgt2/templates/actors/actor-sheet.html\",\n },\n }\n\n /** @override */\n tabGroups = {\n sidebar: \"inventory\",\n characteristics: \"core\",\n inventory: \"onhand\",\n }\n\n /** @override */\n async _prepareContext() {\n const context = await super._prepareContext();\n const actor = this.document;\n const enrich = (html) => foundry.applications.ux.TextEditor.implementation.enrichHTML(html ?? \"\", { async: true });\n\n context.enrichedBiography = await enrich(actor.system.biography);\n context.enrichedNotes = await enrich(actor.system.notes);\n context.enrichedFinanceNotes = await enrich(actor.system.finance?.notes);\n context.settings = {\n weightUnit: \"kg\",\n usePronouns: game.settings.get(\"mgt2\", \"usePronouns\"),\n useGender: game.settings.get(\"mgt2\", \"useGender\"),\n showLife: game.settings.get(\"mgt2\", \"showLife\"),\n };\n context.isGM = game.user.isGM;\n context.showTrash = false;\n context.initiative = actor.getInitiative();\n\n this._prepareCharacterItems(context);\n\n return context;\n }\n\n _prepareCharacterItems(context) {\n const actor = this.document;\n const settings = context.settings;\n const items = actor.items;\n\n const weapons = [], armors = [], augments = [], computers = [], softwares = [];\n const miscItems = [], equipments = [], containerItems = [], careers = [];\n const skills = [], psionics = [], diseases = [], wounds = [], contacts = [];\n const actorContainers = [];\n\n for (let i of items) {\n if (i.type === \"container\") {\n actorContainers.push(i);\n } else if (i.type === \"computer\") {\n computers.push(i);\n i._subItems = [];\n if (i.system.overload === true)\n i._overloadClass = \"computer-overload\";\n }\n }\n\n actorContainers.sort(MGT2Helper.compareByName);\n\n const containers = [{ name: \"(tous)\", _id: \"\" }].concat(actorContainers);\n const containerIndex = new Map();\n\n for (let c of actorContainers) {\n containerIndex.set(c._id, c);\n\n if (c.system.weight > 0) {\n const w = MGT2Helper.convertWeightForDisplay(c.system.weight) + \" \" + settings.weightUnit;\n c._display = c.name.length > 12 ? `${c.name.substring(0, 12)}... (${w})` : `${c.name} (${w})`;\n } else {\n c._display = c.name.length > 12 ? c.name.substring(0, 12) + \"...\" : c.name;\n }\n\n if (c.system.onHand === true)\n c._subItems = [];\n }\n\n const containerView = actor.system.containerView;\n let currentContainerView = containerView !== \"\" ? containerIndex.get(containerView) : null;\n\n context.containerView = currentContainerView || null;\n context.containerWeight = currentContainerView\n ? MGT2Helper.convertWeightForDisplay(currentContainerView.system.weight)\n : MGT2Helper.convertWeightForDisplay(0);\n context.containerShowAll = containerView === \"\";\n\n for (let i of items) {\n const item = i.system;\n\n if (item.hasOwnProperty(\"weight\") && item.weight > 0) {\n i._weight = isNaN(item.quantity)\n ? MGT2Helper.convertWeightForDisplay(item.weight) + \" \" + settings.weightUnit\n : MGT2Helper.convertWeightForDisplay(item.weight * item.quantity) + \" \" + settings.weightUnit;\n }\n\n if (item.hasOwnProperty(\"container\") && item.container.id !== \"\" && item.container.id !== undefined) {\n const container = containerIndex.get(item.container.id);\n if (container === undefined) {\n if (context.containerShowAll) {\n i._containerName = \"#deleted#\";\n containerItems.push(i);\n }\n continue;\n }\n\n if (container.system.locked && !game.user.isGM) continue;\n\n if (container.system.onHand === true)\n container._subItems.push(i);\n\n if (context.containerShowAll || actor.system.containerView === item.container.id) {\n i._containerName = container.name;\n containerItems.push(i);\n }\n continue;\n }\n\n if (item.hasOwnProperty(\"equipped\")) {\n i._canEquip = true;\n i.toggleClass = item.equipped ? \"active\" : \"\";\n } else {\n i._canEquip = false;\n i.toggleClass = \"\";\n }\n\n switch (i.type) {\n case \"equipment\":\n (i.system.subType === \"augment\" ? augments : equipments).push(i);\n break;\n\n case \"armor\":\n if (i.system.options?.length > 0)\n i._subInfo = i.system.options.map(x => x.name).join(\", \");\n armors.push(i);\n break;\n\n case \"computer\":\n if (i.system.options?.length > 0)\n i._subInfo = i.system.options.map(x => x.name).join(\", \");\n break;\n\n case \"item\":\n if (i.system.subType === \"software\") {\n if (i.system.software.computerId && i.system.software.computerId !== \"\") {\n const computer = computers.find(x => x._id === i.system.software.computerId);\n if (computer !== undefined) computer._subItems.push(i);\n else softwares.push(i);\n } else {\n i._display = i.system.software.bandwidth > 0\n ? `${i.name} (${i.system.software.bandwidth})`\n : i.name;\n softwares.push(i);\n }\n } else {\n miscItems.push(i);\n }\n break;\n\n case \"weapon\":\n i._range = i.system.range.isMelee\n ? game.i18n.localize(\"MGT2.Melee\")\n : MGT2Helper.getRangeDisplay(i.system.range);\n if (i.system.traits?.length > 0)\n i._subInfo = i.system.traits.map(x => x.name).join(\", \");\n weapons.push(i);\n break;\n\n case \"career\":\n careers.push(i);\n break;\n\n case \"contact\":\n contacts.push(i);\n break;\n\n case \"disease\":\n (i.system.subType === \"wound\" ? wounds : diseases).push(i);\n break;\n\n case \"talent\":\n if (i.system.subType === \"skill\") {\n skills.push(i);\n } else {\n if (MGT2Helper.hasValue(i.system.psionic, \"reach\"))\n i._reach = game.i18n.localize(`MGT2.PsionicReach.${i.system.psionic.reach}`);\n if (MGT2Helper.hasValue(i.system.roll, \"difficulty\"))\n i._difficulty = game.i18n.localize(`MGT2.Difficulty.${i.system.roll.difficulty}`);\n psionics.push(i);\n }\n break;\n\n case \"container\":\n if (i.system.onHand === true)\n miscItems.push(i);\n break;\n }\n }\n\n const byName = MGT2Helper.compareByName;\n const byEquipName = (a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n\n context.encumbranceNormal = MGT2Helper.convertWeightForDisplay(actor.system.inventory.encumbrance.normal);\n context.encumbranceHeavy = MGT2Helper.convertWeightForDisplay(actor.system.inventory.encumbrance.heavy);\n\n const totalWeight = actor.system.inventory.weight;\n if (totalWeight > actor.system.inventory.encumbrance.heavy) {\n context.encumbranceClasses = \"encumbrance-heavy\";\n context.encumbrance = 2;\n } else if (totalWeight > actor.system.inventory.encumbrance.normal) {\n context.encumbranceClasses = \"encumbrance-normal\";\n context.encumbrance = 1;\n } else {\n context.encumbrance = 0;\n }\n\n if (softwares.length > 0) { softwares.sort(byName); context.softwares = softwares; }\n augments.sort(byEquipName); context.augments = augments;\n armors.sort(byEquipName); context.armors = armors;\n computers.sort(byEquipName); context.computers = computers;\n context.careers = careers;\n contacts.sort(byName); context.contacts = contacts;\n containers.sort(byName); context.containers = containers;\n diseases.sort(byName); context.diseases = diseases;\n context.wounds = wounds;\n equipments.sort(byEquipName); context.equipments = equipments;\n miscItems.sort(byEquipName); context.items = miscItems;\n actorContainers.sort(byName); context.actorContainers = actorContainers;\n skills.sort(byName); context.skills = skills;\n psionics.sort(byName); context.psionics = psionics;\n weapons.sort(byEquipName); context.weapons = weapons;\n\n if (containerItems.length > 0) {\n containerItems.sort((a, b) => {\n const r = a._containerName.localeCompare(b._containerName);\n return r !== 0 ? r : a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n });\n }\n context.containerItems = containerItems;\n }\n\n // =========================================================\n // Event Binding (AppV2 _onRender — replaces jQuery activateListeners)\n // Templates still use CSS class selectors, so we bind manually here.\n // =========================================================\n\n /** @override */\n _onRender(context, options) {\n super._onRender(context, options);\n const html = this.element;\n if (!this.isEditable) return;\n\n this._bindClassEvent(html, \"a[data-roll]\", \"click\", TravellerCharacterSheet.#onRoll);\n this._bindClassEvent(html, \".cfg-characteristic\", \"click\", TravellerCharacterSheet.#onOpenCharacteristic);\n this._bindClassEvent(html, \".item-create\", \"click\", TravellerCharacterSheet.#onCreateItem);\n this._bindClassEvent(html, \".item-edit\", \"click\", TravellerCharacterSheet.#onEditItem);\n this._bindClassEvent(html, \".item-delete\", \"click\", TravellerCharacterSheet.#onDeleteItem);\n this._bindClassEvent(html, \".item-storage-in\", \"click\", TravellerCharacterSheet.#onItemStorageIn);\n this._bindClassEvent(html, \".item-storage-out\", \"click\", TravellerCharacterSheet.#onItemStorageOut);\n this._bindClassEvent(html, \".software-eject\", \"click\", TravellerCharacterSheet.#onSoftwareEject);\n this._bindClassEvent(html, \".container-create\", \"click\", TravellerCharacterSheet.#onContainerCreate);\n this._bindClassEvent(html, \".container-edit\", \"click\", TravellerCharacterSheet.#onContainerEdit);\n this._bindClassEvent(html, \".container-delete\", \"click\", TravellerCharacterSheet.#onContainerDelete);\n this._bindClassEvent(html, \".traits-create\", \"click\", TravellerCharacterSheet.#onTraitCreate);\n this._bindClassEvent(html, \".traits-edit\", \"click\", TravellerCharacterSheet.#onTraitEdit);\n this._bindClassEvent(html, \".traits-delete\", \"click\", TravellerCharacterSheet.#onTraitDelete);\n this._bindClassEvent(html, \"[data-editor='open']\", \"click\", TravellerCharacterSheet.#onOpenEditor);\n html.querySelector(\"[name='config']\")?.addEventListener(\"click\", (ev) => TravellerCharacterSheet.#onOpenConfig.call(this, ev, ev.currentTarget));\n }\n\n /** Helper: bind a handler to all matching elements, with `this` set to the sheet instance */\n _bindClassEvent(html, selector, event, handler) {\n for (const el of html.querySelectorAll(selector)) {\n el.addEventListener(event, (ev) => handler.call(this, ev, ev.currentTarget));\n }\n }\n\n // =========================================================\n // Drag & Drop\n // =========================================================\n\n /** @override */\n async _onDrop(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n const dropData = MGT2Helper.getDataFromDropEvent(event);\n if (!dropData) return false;\n\n const sourceItemData = await MGT2Helper.getItemDataFromDropData(dropData);\n\n if (sourceItemData.type === \"species\") {\n const update = {\n system: {\n personal: {\n species: sourceItemData.name,\n speciesText: {\n description: sourceItemData.system.description,\n descriptionLong: sourceItemData.system.descriptionLong,\n },\n },\n },\n };\n update.system.personal.traits = this.actor.system.personal.traits.concat(sourceItemData.system.traits);\n\n if (sourceItemData.system.modifiers?.length > 0) {\n update.system.characteristics = {};\n for (let modifier of sourceItemData.system.modifiers) {\n if (MGT2Helper.hasValue(modifier, \"characteristic\") && MGT2Helper.hasValue(modifier, \"value\")) {\n const c = this.actor.system.characteristics[modifier.characteristic];\n const updateValue = { value: c.value + modifier.value };\n if (c.showMax) updateValue.max = c.max + modifier.value;\n update.system.characteristics[modifier.characteristic] = updateValue;\n }\n }\n }\n\n this.actor.update(update);\n return true;\n }\n\n if ([\"contact\", \"disease\", \"career\", \"talent\"].includes(sourceItemData.type)) {\n let transferData = {};\n try { transferData = sourceItemData.toJSON(); } catch (e) { transferData = sourceItemData; }\n delete transferData._id;\n delete transferData.id;\n await this.actor.createEmbeddedDocuments(\"Item\", [transferData]);\n return true;\n }\n\n if (![\"armor\", \"weapon\", \"computer\", \"container\", \"item\", \"equipment\"].includes(sourceItemData.type)) return false;\n\n const target = event.target.closest(\".table-row\");\n let targetId = null;\n let targetItem = null;\n if (target !== null) {\n targetId = target.dataset.itemId;\n targetItem = this.actor.getEmbeddedDocument(\"Item\", targetId);\n }\n\n let sourceItem = this.actor.getEmbeddedDocument(\"Item\", sourceItemData.id);\n if (sourceItem) {\n if (!targetItem) return false;\n if (sourceItem.id === targetId) return false;\n\n if (targetItem.type === \"item\" || targetItem.type === \"equipment\") {\n if (targetItem.system.subType === \"software\")\n await sourceItem.update({ \"system.software.computerId\": targetItem.system.software.computerId });\n else\n await sourceItem.update({ \"system.container.id\": targetItem.system.container.id });\n return true;\n } else if (targetItem.type === \"computer\") {\n await sourceItem.update({ \"system.software.computerId\": targetId });\n return true;\n } else if (targetItem.type === \"container\") {\n if (targetItem.system.locked && !game.user.isGM) {\n ui.notifications.error(\"Verrouillé\");\n } else {\n await sourceItem.update({ \"system.container.id\": targetId });\n return true;\n }\n }\n } else {\n let transferData = {};\n try { transferData = sourceItemData.toJSON(); } catch (e) { transferData = sourceItemData; }\n delete transferData._id;\n delete transferData.id;\n\n const recalcWeight = transferData.system.hasOwnProperty(\"weight\");\n\n if (transferData.system.hasOwnProperty(\"container\")) transferData.system.container.id = \"\";\n if (transferData.type === \"item\" && transferData.system.subType === \"software\") transferData.system.software.computerId = \"\";\n if (transferData.type === \"container\") transferData.system.onHand = true;\n if (transferData.system.hasOwnProperty(\"equipment\")) transferData.system.equipped = false;\n\n if (targetItem !== null) {\n if (transferData.type === \"item\" && transferData.system.subType === \"software\") {\n if (targetItem.type === \"item\" && targetItem.system.subType === \"software\")\n transferData.system.software.computerId = targetItem.system.software.computerId;\n else if (targetItem.type === \"computer\")\n transferData.system.software.computerId = targetItem._id;\n } else if ([\"armor\", \"computer\", \"equipment\", \"item\", \"weapon\"].includes(transferData.type)) {\n if (targetItem.type === \"container\") {\n if (!targetItem.system.locked || game.user.isGM)\n transferData.system.container.id = targetId;\n } else {\n transferData.system.container.id = targetItem.system.container.id;\n }\n }\n }\n\n await this.actor.createEmbeddedDocuments(\"Item\", [transferData]);\n if (recalcWeight) await this.actor.recalculateWeight();\n }\n return true;\n }\n\n // =========================================================\n // Actions (static private methods)\n // =========================================================\n\n static async #onCreateItem(event, target) {\n event.preventDefault();\n const data = {\n name: target.dataset.createName,\n type: target.dataset.typeItem,\n };\n if (target.dataset.subtype) {\n data.system = { subType: target.dataset.subtype };\n }\n const cls = getDocumentClass(\"Item\");\n return cls.create(data, { parent: this.actor });\n }\n\n static async #onEditItem(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n const item = this.actor.getEmbeddedDocument(\"Item\", li?.dataset.itemId);\n if (item) item.sheet.render(true);\n }\n\n static async #confirmDelete(name) {\n return foundry.applications.api.DialogV2.confirm({\n window: { title: game.i18n.localize(\"MGT2.Dialog.ConfirmDeleteTitle\") },\n content: `

${game.i18n.format(\"MGT2.Dialog.ConfirmDeleteContent\", { name })}

`,\n yes: { label: game.i18n.localize(\"MGT2.Dialog.Yes\"), icon: \"fas fa-trash\" },\n no: { label: game.i18n.localize(\"MGT2.Dialog.No\"), icon: \"fas fa-times\" },\n rejectClose: false,\n modal: true\n });\n }\n\n static async #onDeleteItem(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n if (!li?.dataset.itemId) return;\n const item = this.actor.items.get(li.dataset.itemId);\n if (!item) return;\n const confirmed = await TravellerCharacterSheet.#confirmDelete(item.name);\n if (!confirmed) return;\n this.actor.deleteEmbeddedDocuments(\"Item\", [li.dataset.itemId]);\n }\n\n static async #onEquipItem(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n const itemId = li?.dataset.itemId;\n if (!itemId) return;\n const item = this.actor.items.get(itemId);\n if (!item) return;\n await item.update({ \"system.equipped\": !item.system.equipped });\n }\n\n static async #onItemStorageIn(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n const item = this.actor.getEmbeddedDocument(\"Item\", li?.dataset.itemId);\n if (!item) return;\n\n if (item.type === \"container\") {\n await item.update({ \"system.onHand\": false });\n } else {\n const containers = this.actor.getContainers();\n let container;\n const dropInId = this.actor.system.containerDropIn;\n\n if (!dropInId) {\n container = containers.length === 0\n ? await getDocumentClass(\"Item\").create({ name: \"New container\", type: \"container\" }, { parent: this.actor })\n : containers[0];\n } else {\n container = containers.find(x => x._id === dropInId);\n }\n\n if (container?.system.locked && !game.user.isGM) {\n ui.notifications.error(\"Objet verrouillé\");\n return;\n }\n await item.update({ \"system.container.id\": container._id });\n }\n }\n\n static async #onItemStorageOut(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n const item = this.actor.getEmbeddedDocument(\"Item\", li?.dataset.itemId);\n if (!item) return;\n await item.update({ \"system.container.id\": \"\" });\n }\n\n static async #onSoftwareEject(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n const item = this.actor.getEmbeddedDocument(\"Item\", li?.dataset.itemId);\n if (!item) return;\n await item.update({ \"system.software.computerId\": \"\" });\n }\n\n static async #onContainerCreate(event) {\n event.preventDefault();\n const cls = getDocumentClass(\"Item\");\n return cls.create({ name: \"New container\", type: \"container\" }, { parent: this.actor });\n }\n\n static async #onContainerEdit(event) {\n event.preventDefault();\n const container = this.actor.getEmbeddedDocument(\"Item\", this.actor.system.containerView);\n if (container) container.sheet.render(true);\n }\n\n static async #onContainerDelete(event) {\n event.preventDefault();\n const containers = this.actor.getContainers();\n const container = containers.find(x => x._id === this.actor.system.containerView);\n if (!container) return;\n\n const confirmed = await TravellerCharacterSheet.#confirmDelete(container.name);\n if (!confirmed) return;\n\n const containerItems = this.actor.items.filter(\n x => x.system.hasOwnProperty(\"container\") && x.system.container.id === container._id\n );\n\n if (containerItems.length > 0) {\n const updates = containerItems.map(item => ({ _id: item.id, \"system.container.id\": \"\" }));\n await this.actor.updateEmbeddedDocuments(\"Item\", updates);\n }\n\n const actorUpdate = { \"system.containerView\": \"\" };\n if (this.actor.system.containerDropIn === container._id) {\n actorUpdate[\"system.containerDropIn\"] = \"\";\n const remaining = containers.filter(x => x._id !== container._id);\n if (remaining.length > 0) actorUpdate[\"system.containerDropIn\"] = remaining[0]._id;\n }\n\n await this.actor.deleteEmbeddedDocuments(\"Item\", [container._id]);\n await this.actor.update(actorUpdate);\n }\n\n static async #onRoll(event, target) {\n event.preventDefault();\n\n const rollOptions = {\n rollTypeName: game.i18n.localize(\"MGT2.RollPrompt.Roll\"),\n rollObjectName: \"\",\n characteristics: [{ _id: \"\", name: \"\" }],\n characteristic: \"\",\n skills: [],\n skill: \"\",\n fatigue: this.actor.system.states.fatigue,\n encumbrance: this.actor.system.states.encumbrance,\n difficulty: null,\n damageFormula: null,\n isMelee: false,\n };\n\n const cardButtons = [];\n for (const [key, label] of Object.entries(MGT2.Characteristics)) {\n const c = this.actor.system.characteristics[key];\n if (c.show) {\n rollOptions.characteristics.push({\n _id: key,\n name: game.i18n.localize(label) + MGT2Helper.getDisplayDM(c.dm),\n });\n }\n }\n\n for (let item of this.actor.items) {\n if (item.type === \"talent\" && item.system.subType === \"skill\")\n rollOptions.skills.push({ _id: item._id, name: item.getRollDisplay() });\n }\n\n rollOptions.skills.sort(MGT2Helper.compareByName);\n rollOptions.skills = [{ _id: \"NP\", name: game.i18n.localize(\"MGT2.Items.NotProficient\") }].concat(rollOptions.skills);\n\n let itemObj = null;\n let isInitiative = false;\n const rollType = target.dataset.roll;\n\n if (rollType === \"initiative\") {\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.RollPrompt.InitiativeRoll\");\n rollOptions.characteristic = this.actor.system.config.initiative;\n isInitiative = true;\n } else if (rollType === \"characteristic\") {\n rollOptions.characteristic = target.dataset.rollCharacteristic;\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.RollPrompt.CharacteristicRoll\");\n rollOptions.rollObjectName = game.i18n.localize(`MGT2.Characteristics.${rollOptions.characteristic}.name`);\n } else {\n if (rollType === \"skill\") {\n rollOptions.skill = target.dataset.rollSkill;\n itemObj = this.actor.getEmbeddedDocument(\"Item\", rollOptions.skill);\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.RollPrompt.SkillRoll\");\n rollOptions.rollObjectName = itemObj.name;\n } else if (rollType === \"psionic\") {\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.RollPrompt.PsionicRoll\");\n }\n\n if (itemObj === null && target.dataset.itemId) {\n itemObj = this.actor.getEmbeddedDocument(\"Item\", target.dataset.itemId);\n rollOptions.rollObjectName = itemObj.name;\n if (itemObj.type === \"weapon\") rollOptions.rollTypeName = game.i18n.localize(\"TYPES.Item.weapon\");\n else if (itemObj.type === \"armor\") rollOptions.rollTypeName = game.i18n.localize(\"TYPES.Item.armor\");\n else if (itemObj.type === \"computer\") rollOptions.rollTypeName = game.i18n.localize(\"TYPES.Item.computer\");\n }\n\n if (rollType === \"psionic\" && itemObj) {\n rollOptions.rollObjectName = itemObj.name;\n if (MGT2Helper.hasValue(itemObj.system.psionic, \"duration\")) {\n cardButtons.push({\n label: game.i18n.localize(\"MGT2.Items.Duration\"),\n formula: itemObj.system.psionic.duration,\n message: {\n objectName: itemObj.name,\n flavor: \"{0} \".concat(game.i18n.localize(`MGT2.Durations.${itemObj.system.psionic.durationUnit}`)),\n },\n });\n }\n }\n\n if (itemObj?.system.hasOwnProperty(\"damage\")) {\n rollOptions.damageFormula = itemObj.system.damage;\n if (itemObj.type === \"weapon\") {\n rollOptions.isMelee = itemObj.system.range?.isMelee === true;\n }\n if (itemObj.type === \"disease\") {\n if (itemObj.system.subType === \"disease\")\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.DiseaseSubType.disease\");\n else if (itemObj.system.subType === \"poison\")\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.DiseaseSubType.poison\");\n }\n }\n\n if (itemObj?.system.hasOwnProperty(\"roll\")) {\n if (MGT2Helper.hasValue(itemObj.system.roll, \"characteristic\")) rollOptions.characteristic = itemObj.system.roll.characteristic;\n if (MGT2Helper.hasValue(itemObj.system.roll, \"skill\")) rollOptions.skill = itemObj.system.roll.skill;\n if (MGT2Helper.hasValue(itemObj.system.roll, \"difficulty\")) rollOptions.difficulty = itemObj.system.roll.difficulty;\n }\n }\n\n const userRollData = await RollPromptHelper.roll(rollOptions);\n\n const rollModifiers = [];\n const rollFormulaParts = [];\n\n if (userRollData.diceModifier) {\n rollFormulaParts.push(\"3d6\", userRollData.diceModifier);\n } else {\n rollFormulaParts.push(\"2d6\");\n }\n\n if (userRollData.characteristic) {\n const c = this.actor.system.characteristics[userRollData.characteristic];\n rollFormulaParts.push(MGT2Helper.getFormulaDM(c.dm));\n rollModifiers.push(game.i18n.localize(`MGT2.Characteristics.${userRollData.characteristic}.name`) + MGT2Helper.getDisplayDM(c.dm));\n }\n\n if (userRollData.skill) {\n if (userRollData.skill === \"NP\") {\n rollFormulaParts.push(\"-3\");\n rollModifiers.push(game.i18n.localize(\"MGT2.Items.NotProficient\"));\n } else {\n const skillObj = this.actor.getEmbeddedDocument(\"Item\", userRollData.skill);\n rollFormulaParts.push(MGT2Helper.getFormulaDM(skillObj.system.level));\n rollModifiers.push(skillObj.getRollDisplay());\n }\n }\n\n if (userRollData.psionic) {\n const psionicObj = this.actor.getEmbeddedDocument(\"Item\", userRollData.psionic);\n rollFormulaParts.push(MGT2Helper.getFormulaDM(psionicObj.system.level));\n rollModifiers.push(psionicObj.getRollDisplay());\n }\n\n if (userRollData.timeframes && userRollData.timeframes !== \"\" && userRollData.timeframes !== \"Normal\") {\n rollModifiers.push(game.i18n.localize(`MGT2.Timeframes.${userRollData.timeframes}`));\n rollFormulaParts.push(userRollData.timeframes === \"Slower\" ? \"+2\" : \"-2\");\n }\n\n if (userRollData.encumbrance === true) {\n rollFormulaParts.push(\"-2\");\n rollModifiers.push(game.i18n.localize(\"MGT2.Actor.Encumbrance\") + \" -2\");\n }\n\n if (userRollData.fatigue === true) {\n rollFormulaParts.push(\"-2\");\n rollModifiers.push(game.i18n.localize(\"MGT2.Actor.Fatigue\") + \" -2\");\n }\n\n const customDMVal = parseInt(userRollData.customDM ?? \"0\", 10);\n if (!isNaN(customDMVal) && customDMVal !== 0) {\n rollFormulaParts.push(customDMVal > 0 ? `+${customDMVal}` : `${customDMVal}`);\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.CustomDM\") + \" \" + (customDMVal > 0 ? `+${customDMVal}` : `${customDMVal}`));\n }\n\n if (MGT2Helper.hasValue(userRollData, \"difficulty\") && userRollData.difficulty !== \"\") rollOptions.difficulty = userRollData.difficulty;\n\n const rollFormula = rollFormulaParts.join(\"\");\n if (!Roll.validate(rollFormula)) {\n ui.notifications.error(game.i18n.localize(\"MGT2.Errors.InvalidRollFormula\"));\n return;\n }\n\n let roll = await new Roll(rollFormula, this.actor.getRollData()).roll({ rollMode: userRollData.rollMode });\n\n if (isInitiative && this.token?.combatant) {\n await this.token.combatant.update({ initiative: roll.total });\n }\n\n // ── Compute effect and effective damage formula ──────────────────────\n let rollSuccess = false;\n let rollFailure = false;\n let rollEffect = undefined;\n let rollEffectStr = undefined;\n let difficultyValue = null;\n\n if (MGT2Helper.hasValue(rollOptions, \"difficulty\")) {\n difficultyValue = MGT2Helper.getDifficultyValue(rollOptions.difficulty);\n rollEffect = roll.total - difficultyValue;\n rollEffectStr = (rollEffect >= 0 ? \"+\" : \"\") + rollEffect;\n rollSuccess = rollEffect >= 0;\n rollFailure = !rollSuccess;\n }\n\n // Build effective damage formula: base + effect + STR DM (melee)\n let effectiveDamageFormula = rollOptions.damageFormula || null;\n if (effectiveDamageFormula) {\n if (rollEffect !== undefined && rollEffect !== 0) {\n effectiveDamageFormula += (rollEffect >= 0 ? \"+\" : \"\") + rollEffect;\n }\n if (rollOptions.isMelee) {\n const strDm = this.actor.system.characteristics.strength?.dm ?? 0;\n if (strDm !== 0) effectiveDamageFormula += (strDm >= 0 ? \"+\" : \"\") + strDm;\n }\n }\n\n // ── Build roll breakdown tooltip ─────────────────────────────────────\n const diceRawTotal = roll.dice.reduce((s, d) => s + d.total, 0);\n const breakdownParts = [game.i18n.localize(\"MGT2.Chat.Roll.Dice\") + \" \" + diceRawTotal];\n for (const mod of rollModifiers) breakdownParts.push(mod);\n if (rollEffectStr !== undefined)\n breakdownParts.push(game.i18n.localize(\"MGT2.Chat.Roll.Effect\") + \" \" + rollEffectStr);\n const rollBreakdown = breakdownParts.join(\" | \");\n\n const chatData = {\n user: game.user.id,\n speaker: this.actor ? ChatMessage.getSpeaker({ actor: this.actor }) : null,\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total * 100) / 100,\n rollBreakdown,\n showButtons: true,\n showLifeButtons: false,\n showRollRequest: false,\n rollTypeName: rollOptions.rollTypeName,\n rollObjectName: rollOptions.rollObjectName,\n rollModifiers: rollModifiers,\n // Show damage button only if there's a formula AND (no difficulty check OR roll succeeded)\n showRollDamage: !!effectiveDamageFormula && (!difficultyValue || rollSuccess),\n cardButtons: cardButtons,\n };\n\n if (MGT2Helper.hasValue(rollOptions, \"difficulty\")) {\n chatData.rollDifficulty = rollOptions.difficulty;\n chatData.rollDifficultyLabel = MGT2Helper.getDifficultyDisplay(rollOptions.difficulty);\n chatData.rollEffect = rollEffect;\n chatData.rollEffectStr = rollEffectStr;\n chatData.rollSuccess = rollSuccess || undefined;\n chatData.rollFailure = rollFailure || undefined;\n }\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/roll.html\", chatData);\n chatData.content = html;\n\n let flags = null;\n if (effectiveDamageFormula) {\n flags = { mgt2: { damage: { formula: effectiveDamageFormula, rollObjectName: rollOptions.rollObjectName, rollTypeName: rollOptions.rollTypeName } } };\n }\n if (cardButtons.length > 0) {\n if (!flags) flags = { mgt2: {} };\n flags.mgt2.buttons = cardButtons;\n }\n if (flags) chatData.flags = flags;\n\n return roll.toMessage(chatData);\n }\n\n static async #onOpenConfig(event) {\n event.preventDefault();\n const userConfig = await CharacterPrompts.openConfig(this.actor.system);\n if (userConfig) this.actor.update({ \"system.config\": userConfig });\n }\n\n static async #onOpenCharacteristic(event, target) {\n event.preventDefault();\n const name = target.dataset.cfgCharacteristic;\n const c = this.actor.system.characteristics[name];\n\n let showAll = false;\n for (const value of Object.values(this.actor.system.characteristics)) {\n if (!value.show) { showAll = true; break; }\n }\n\n const userConfig = await CharacterPrompts.openCharacteristic(\n game.i18n.localize(`MGT2.Characteristics.${name}.name`),\n c.show, c.showMax, showAll\n );\n\n if (userConfig) {\n const data = { system: { characteristics: {} } };\n data.system.characteristics[name] = { show: userConfig.show, showMax: userConfig.showMax };\n\n if (userConfig.showAll === true) {\n for (const [key, value] of Object.entries(this.actor.system.characteristics)) {\n if (key !== name && !value.show)\n data.system.characteristics[key] = { show: true };\n }\n }\n this.actor.update(data);\n }\n }\n\n static async #onTraitCreate(event) {\n event.preventDefault();\n let traits = this.actor.system.personal.traits;\n let newTraits;\n if (traits.length === 0) {\n newTraits = [{ name: \"\", description: \"\" }];\n } else {\n newTraits = [...traits, { name: \"\", description: \"\" }];\n }\n return this.actor.update({ system: { personal: { traits: newTraits } } });\n }\n\n static async #onTraitEdit(event, target) {\n event.preventDefault();\n const element = target.closest(\"[data-traits-part]\");\n const index = Number(element.dataset.traitsPart);\n const trait = this.actor.system.personal.traits[index];\n const result = await CharacterPrompts.openTraitEdit(trait);\n const traits = [...this.actor.system.personal.traits];\n traits[index] = { ...traits[index], name: result.name, description: result.description };\n return this.actor.update({ system: { personal: { traits: traits } } });\n }\n\n static async #onTraitDelete(event, target) {\n event.preventDefault();\n const confirmed = await TravellerCharacterSheet.#confirmDelete(game.i18n.localize(\"MGT2.Actor.ThisTrait\"));\n if (!confirmed) return;\n const element = target.closest(\"[data-traits-part]\");\n const index = Number(element.dataset.traitsPart);\n const traits = foundry.utils.deepClone(this.actor.system.personal.traits);\n const newTraits = Object.entries(traits)\n .filter(([key]) => Number(key) !== index)\n .map(([, value]) => value);\n return this.actor.update({ system: { personal: { traits: newTraits } } });\n }\n\n static async #onOpenEditor(event) {\n event.preventDefault();\n await CharacterPrompts.openEditorFullView(\n this.actor.system.personal.species,\n this.actor.system.personal.speciesText.descriptionLong\n );\n }\n\n static async #onHeal(event, target) {\n event.preventDefault();\n const healType = target.dataset.healType;\n\n if (canvas.tokens.controlled.length === 0) {\n ui.notifications.warn(game.i18n.localize(\"MGT2.Errors.NoTokenSelected\"));\n return;\n }\n\n if (healType === \"firstaid\") {\n // Find Medicine skill to pre-select\n // Use normalized string matching to handle accents\n const medSkill = this.actor.items.find(i => {\n if (i.type !== \"talent\" || i.system.subType !== \"skill\") return false;\n const normalized = i.name.toLowerCase().normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n return normalized.includes(\"medecin\") || normalized.includes(\"medicine\");\n });\n \n // Only EDU characteristic available for First Aid\n const characteristics = [\n { _id: \"education\", name: game.i18n.localize(\"MGT2.Characteristics.education.name\") }\n ];\n \n const rollOptions = {\n rollTypeName: game.i18n.localize(\"MGT2.Healing.FirstAid\"),\n rollObjectName: this.actor.name,\n characteristics: characteristics, // Only EDU\n characteristic: \"education\", // Pre-selected\n skill: medSkill?.id ?? \"\", // Medicine skill ID for pre-selection (must match _id in array)\n skillName: medSkill?.name ?? game.i18n.localize(\"MGT2.Healing.NoMedicineSkill\"), // Display name\n skillLevel: medSkill?.system.level ?? -3, // -3 if not found\n skills: medSkill ? [{ _id: medSkill.id, name: medSkill.name, level: medSkill.system.level }] : [],\n difficulty: \"Average\", // First Aid difficulty is 8 (Average)\n showHeal: true,\n healType: MGT2.HealingType.FIRST_AID,\n };\n const userRollData = await RollPromptHelper.roll(rollOptions);\n if (userRollData) {\n // Build formula with all DMs — same pattern as standard skill roll\n const rollFormulaParts = [];\n const rollModifiers = [];\n\n if (userRollData.diceModifier) {\n rollFormulaParts.push(\"3d6\");\n rollFormulaParts.push(userRollData.diceModifier);\n } else {\n rollFormulaParts.push(\"2d6\");\n }\n\n if (userRollData.characteristic) {\n const c = this.actor.system.characteristics[userRollData.characteristic];\n rollFormulaParts.push(MGT2Helper.getFormulaDM(c.dm));\n rollModifiers.push(game.i18n.localize(`MGT2.Characteristics.${userRollData.characteristic}.name`) + MGT2Helper.getDisplayDM(c.dm));\n }\n\n if (userRollData.skill && userRollData.skill !== \"\") {\n if (userRollData.skill === \"NP\") {\n rollFormulaParts.push(\"-3\");\n rollModifiers.push(game.i18n.localize(\"MGT2.Items.NotProficient\"));\n } else {\n const skillObj = this.actor.getEmbeddedDocument(\"Item\", userRollData.skill);\n rollFormulaParts.push(MGT2Helper.getFormulaDM(skillObj.system.level));\n rollModifiers.push(skillObj.getRollDisplay());\n }\n }\n\n if (userRollData.customDM && userRollData.customDM !== \"\") {\n let s = userRollData.customDM.trim();\n if (/^[0-9]/.test(s)) rollFormulaParts.push(\"+\");\n rollFormulaParts.push(s);\n rollModifiers.push(\"DM \" + s);\n }\n\n const rollFormula = rollFormulaParts.join(\"\");\n const roll = await new Roll(rollFormula, this.actor.getRollData()).roll();\n\n // Difficulty for First Aid is Average (8)\n const difficulty = 8;\n const effect = roll.total - difficulty;\n const isSuccess = effect >= 0;\n const healing = isSuccess ? Math.max(1, effect) : 0;\n\n const cardButtons = isSuccess\n ? [{ label: game.i18n.localize(\"MGT2.Healing.ApplyHealing\"), action: \"healing\" }]\n : [];\n\n const chatData = {\n user: game.user.id,\n speaker: ChatMessage.getSpeaker({ actor: this.actor }),\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total * 100) / 100,\n rollTypeName: game.i18n.localize(\"MGT2.Healing.FirstAid\"),\n rollObjectName: this.actor.name,\n rollModifiers: rollModifiers,\n rollDifficulty: difficulty,\n rollDifficultyLabel: MGT2Helper.getDifficultyDisplay(\"Average\"),\n rollEffectStr: isSuccess ? effect.toString() : undefined,\n healingAmount: isSuccess ? healing : undefined,\n rollSuccess: isSuccess || undefined,\n rollFailure: !isSuccess || undefined,\n showButtons: isSuccess,\n hasDamage: false,\n showRollDamage: false,\n cardButtons: cardButtons,\n };\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/roll.html\", chatData);\n chatData.content = html;\n chatData.flags = { mgt2: { healing: { amount: healing } } };\n\n return roll.toMessage(chatData);\n }\n } else if (healType === \"surgery\") {\n // Find Medicine skill to pre-select (same as first aid)\n const medSkill = this.actor.items.find(i => {\n if (i.type !== \"talent\" || i.system.subType !== \"skill\") return false;\n const normalized = i.name.toLowerCase().normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n return normalized.includes(\"medecin\") || normalized.includes(\"medicine\");\n });\n\n const characteristics = [\n { _id: \"education\", name: game.i18n.localize(\"MGT2.Characteristics.education.name\") }\n ];\n\n const rollOptions = {\n rollTypeName: game.i18n.localize(\"MGT2.Healing.Surgery\"),\n rollObjectName: this.actor.name,\n characteristics: characteristics,\n characteristic: \"education\",\n skill: medSkill?.id ?? \"\",\n skillName: medSkill?.name ?? game.i18n.localize(\"MGT2.Healing.NoMedicineSkill\"),\n skillLevel: medSkill?.system.level ?? -3,\n skills: medSkill ? [{ _id: medSkill.id, name: medSkill.name, level: medSkill.system.level }] : [],\n difficulty: \"Average\",\n showHeal: true,\n healType: MGT2.HealingType.SURGERY,\n };\n const userRollData = await RollPromptHelper.roll(rollOptions);\n if (userRollData) {\n // Build formula with all DMs — same pattern as standard skill roll\n const rollFormulaParts = [];\n const rollModifiers = [];\n\n if (userRollData.diceModifier) {\n rollFormulaParts.push(\"3d6\");\n rollFormulaParts.push(userRollData.diceModifier);\n } else {\n rollFormulaParts.push(\"2d6\");\n }\n\n if (userRollData.characteristic) {\n const c = this.actor.system.characteristics[userRollData.characteristic];\n rollFormulaParts.push(MGT2Helper.getFormulaDM(c.dm));\n rollModifiers.push(game.i18n.localize(`MGT2.Characteristics.${userRollData.characteristic}.name`) + MGT2Helper.getDisplayDM(c.dm));\n }\n\n if (userRollData.skill && userRollData.skill !== \"\") {\n if (userRollData.skill === \"NP\") {\n rollFormulaParts.push(\"-3\");\n rollModifiers.push(game.i18n.localize(\"MGT2.Items.NotProficient\"));\n } else {\n const skillObj = this.actor.getEmbeddedDocument(\"Item\", userRollData.skill);\n rollFormulaParts.push(MGT2Helper.getFormulaDM(skillObj.system.level));\n rollModifiers.push(skillObj.getRollDisplay());\n }\n }\n\n if (userRollData.customDM && userRollData.customDM !== \"\") {\n let s = userRollData.customDM.trim();\n if (/^[0-9]/.test(s)) rollFormulaParts.push(\"+\");\n rollFormulaParts.push(s);\n rollModifiers.push(\"DM \" + s);\n }\n\n const rollFormula = rollFormulaParts.join(\"\");\n const roll = await new Roll(rollFormula, this.actor.getRollData()).roll();\n\n // Difficulty for Surgery is Average (8)\n const difficulty = 8;\n const effect = roll.total - difficulty;\n const isSuccess = effect >= 0;\n\n // Success: heal Math.max(1, effect); Failure: patient takes 3 + |effect| damage\n const healing = isSuccess ? Math.max(1, effect) : 0;\n const surgeryDamage = isSuccess ? 0 : 3 + Math.abs(effect);\n\n const cardButtons = [];\n if (isSuccess) {\n cardButtons.push({ label: game.i18n.localize(\"MGT2.Healing.ApplyHealing\"), action: \"healing\" });\n } else {\n cardButtons.push({ label: game.i18n.localize(\"MGT2.Healing.ApplySurgeryDamage\"), action: \"surgeryDamage\" });\n }\n\n const chatData = {\n user: game.user.id,\n speaker: ChatMessage.getSpeaker({ actor: this.actor }),\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total * 100) / 100,\n rollTypeName: game.i18n.localize(\"MGT2.Healing.Surgery\"),\n rollObjectName: this.actor.name,\n rollModifiers: rollModifiers,\n rollDifficulty: difficulty,\n rollDifficultyLabel: MGT2Helper.getDifficultyDisplay(\"Average\"),\n rollEffectStr: effect.toString(),\n healingAmount: isSuccess ? healing : undefined,\n surgeryDamageAmount: isSuccess ? undefined : surgeryDamage,\n rollSuccess: isSuccess || undefined,\n rollFailure: !isSuccess || undefined,\n showButtons: true,\n hasDamage: false,\n showRollDamage: false,\n cardButtons: cardButtons,\n };\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/roll.html\", chatData);\n chatData.content = html;\n chatData.flags = { mgt2: { surgery: { healing, surgeryDamage } } };\n\n return roll.toMessage(chatData);\n }\n } else if (healType === \"medical\") {\n const result = await CharacterPrompts.openHealingDays();\n if (result) {\n const endMD = this.actor.system.characteristics.endurance.dm;\n const medSkill = this.actor.items.find(i =>\n i.type === \"talent\" &&\n i.system.subType === \"skill\" &&\n (i.name.toLowerCase().includes(\"medecin\") || i.name.toLowerCase().includes(\"medicine\"))\n );\n const skillValue = medSkill ? medSkill.system.level : 0;\n const days = result.days;\n const healingPerDay = Math.max(1, 3 + endMD + skillValue);\n const totalHealing = healingPerDay * days;\n\n const rollModifiers = [\n `3 (base)`,\n `${endMD >= 0 ? \"+\" : \"\"}${endMD} END`,\n `+${skillValue} ${medSkill?.name ?? \"Médecine\"}`,\n `× ${days} ${game.i18n.localize(\"MGT2.RollPrompt.Days\").toLowerCase()}`\n ];\n\n const templateData = {\n rollObjectName: this.actor.name,\n rollTypeName: game.i18n.localize(\"MGT2.Healing.MedicalCare\"),\n rollModifiers,\n formula: `${healingPerDay} ${game.i18n.localize(\"MGT2.Items.PerDay\")}`,\n tooltip: \"\",\n total: totalHealing,\n rollSuccess: true,\n showButtons: true,\n cardButtons: [\n { action: \"healing\", label: game.i18n.localize(\"MGT2.Healing.ApplyHealing\") }\n ]\n };\n\n const content = await renderTemplate(\n \"systems/mgt2/templates/chat/roll.html\",\n templateData\n );\n await ChatMessage.create({\n user: game.user.id,\n speaker: ChatMessage.getSpeaker({ actor: this.actor }),\n content,\n flags: { mgt2: { healing: { amount: totalHealing } } }\n });\n }\n } else if (healType === \"natural\") {\n const result = await CharacterPrompts.openHealingDays();\n if (result) {\n const endMD = this.actor.system.characteristics.endurance.dm;\n let totalAmount = 0;\n const rolls = [];\n \n for (let i = 0; i < result.days; i++) {\n const roll = await new Roll(\"1d6\").evaluate();\n const dayHealing = Math.max(1, roll.total + endMD);\n rolls.push({ roll, dayHealing });\n totalAmount += dayHealing;\n }\n \n // Build roll details\n const rollDisplay = rolls.map((r, idx) => \n `
${game.i18n.localize(\"MGT2.RollPrompt.Days\")} ${idx + 1}: 1d6 = ${r.roll.total} + ${endMD > 0 ? \"+\" : \"\"}${endMD} = ${r.dayHealing}
`\n ).join(\"\");\n \n const chatData = {\n user: game.user.id,\n speaker: ChatMessage.getSpeaker({ actor: this.actor }),\n content: `
\n
\n ${this.actor.name}\n
\n ${game.i18n.localize(\"MGT2.Healing.NaturalHealing\")}\n
\n
\n
${result.days} ${game.i18n.localize(\"MGT2.RollPrompt.Days\")}
\n
\n ${rollDisplay}\n
\n
\n ${game.i18n.localize(\"MGT2.Chat.Roll.Effect\")} ${totalAmount}\n
\n
`,\n flags: { mgt2: { healing: { amount: totalAmount } } }\n };\n await ChatMessage.create(chatData);\n \n // Apply healing immediately\n await this.actor.applyHealing(totalAmount);\n ui.notifications.info(\n game.i18n.format(\"MGT2.Notifications.HealingApplied\",\n { name: this.actor.name, amount: totalAmount })\n );\n }\n }\n }\n}\n","import MGT2ActorSheet from \"./base-actor-sheet.mjs\";\n\nexport default class TravellerVehiculeSheet extends MGT2ActorSheet {\n\n /** @override */\n static DEFAULT_OPTIONS = {\n ...super.DEFAULT_OPTIONS,\n classes: [...super.DEFAULT_OPTIONS.classes, \"vehicule\", \"nopad\"],\n window: {\n ...super.DEFAULT_OPTIONS.window,\n title: \"TYPES.Actor.vehicule\",\n },\n }\n\n /** @override */\n static PARTS = {\n sheet: {\n template: \"systems/mgt2/templates/actors/vehicule-sheet.html\",\n },\n }\n\n /** @override */\n tabGroups = { primary: \"stats\" }\n\n /** @override */\n async _prepareContext() {\n const context = await super._prepareContext();\n const actor = this.document;\n const enrich = (html) => foundry.applications.ux.TextEditor.implementation.enrichHTML(html ?? \"\", { async: true });\n\n context.enrichedDescription = await enrich(actor.system.description);\n context.enrichedNotes = await enrich(actor.system.notes);\n return context;\n }\n}\n","import MGT2ActorSheet from \"./base-actor-sheet.mjs\";\nimport { RollPromptHelper } from \"../../roll-prompt.js\";\nimport { MGT2Helper } from \"../../helper.js\";\n\nconst { renderTemplate } = foundry.applications.handlebars;\n\n/** Convert Traveller dice notation (e.g. \"2D\", \"4D+2\", \"3D6\") to FoundryVTT formula */\nfunction normalizeDice(formula) {\n if (!formula) return \"1d6\";\n return formula\n .replace(/(\\d*)D(\\d*)([+-]\\d+)?/gi, (_, count, sides, mod) => {\n const n = count || \"1\";\n const d = sides || \"6\";\n return mod ? `${n}d${d}${mod}` : `${n}d${d}`;\n });\n}\n\nexport default class TravellerCreatureSheet extends MGT2ActorSheet {\n\n /** @override */\n static DEFAULT_OPTIONS = {\n ...super.DEFAULT_OPTIONS,\n classes: [...super.DEFAULT_OPTIONS.classes, \"creature\", \"nopad\"],\n position: {\n width: 720,\n height: 600,\n },\n window: {\n ...super.DEFAULT_OPTIONS.window,\n title: \"TYPES.Actor.creature\",\n },\n actions: {\n ...super.DEFAULT_OPTIONS.actions,\n rollAttack: TravellerCreatureSheet.#onRollAttack,\n rollSkill: TravellerCreatureSheet.#onRollSkill,\n addSkill: TravellerCreatureSheet.#onAddRow,\n deleteSkill: TravellerCreatureSheet.#onDeleteRow,\n addAttack: TravellerCreatureSheet.#onAddRow,\n deleteAttack: TravellerCreatureSheet.#onDeleteRow,\n addTrait: TravellerCreatureSheet.#onAddRow,\n deleteTrait: TravellerCreatureSheet.#onDeleteRow,\n },\n }\n\n /** @override */\n static PARTS = {\n sheet: {\n template: \"systems/mgt2/templates/actors/creature-sheet.html\",\n },\n }\n\n /** @override */\n tabGroups = { primary: \"combat\" }\n\n /** @override */\n async _prepareContext() {\n const context = await super._prepareContext();\n const actor = this.document;\n const enrich = (html) => foundry.applications.ux.TextEditor.implementation.enrichHTML(html ?? \"\", { async: true });\n\n context.enrichedBiography = await enrich(actor.system.biography);\n context.enrichedNotes = await enrich(actor.system.notes);\n context.sizeLabel = this._getSizeLabel(actor.system.life.max);\n context.sizeTraitLabel = this._getSizeTrait(actor.system.life.max);\n context.config = CONFIG.MGT2;\n\n return context;\n }\n\n _getSizeLabel(pdv) {\n if (pdv <= 2) return \"Souris / Rat\";\n if (pdv <= 5) return \"Chat\";\n if (pdv <= 7) return \"Blaireau / Chien\";\n if (pdv <= 13) return \"Chimpanzé / Chèvre\";\n if (pdv <= 28) return \"Humain\";\n if (pdv <= 35) return \"Vache / Cheval\";\n if (pdv <= 49) return \"Requin\";\n if (pdv <= 70) return \"Rhinocéros\";\n if (pdv <= 90) return \"Éléphant\";\n if (pdv <= 125) return \"Carnosaure\";\n return \"Sauropode / Baleine\";\n }\n\n _getSizeTrait(pdv) {\n if (pdv <= 2) return \"Petit (−4)\";\n if (pdv <= 5) return \"Petit (−3)\";\n if (pdv <= 7) return \"Petit (−2)\";\n if (pdv <= 13) return \"Petit (−1)\";\n if (pdv <= 28) return \"—\";\n if (pdv <= 35) return \"Grand (+1)\";\n if (pdv <= 49) return \"Grand (+2)\";\n if (pdv <= 70) return \"Grand (+3)\";\n if (pdv <= 90) return \"Grand (+4)\";\n if (pdv <= 125) return \"Grand (+5)\";\n return \"Grand (+6)\";\n }\n\n // ───────────────────────────────────────────────────────── Roll Helpers\n\n static async #postCreatureRoll({ actor, roll, rollLabel, dm, difficulty, difficultyLabel, rollMode, extraTooltip }) {\n const diffTarget = MGT2Helper.getDifficultyValue(difficulty ?? \"Average\");\n const hasDifficulty = !!difficulty;\n const success = hasDifficulty ? roll.total >= diffTarget : true;\n const effect = roll.total - diffTarget;\n const effectStr = (effect >= 0 ? \"+\" : \"\") + effect;\n\n const diceRawTotal = roll.dice.reduce((s, d) => s + d.total, 0);\n const breakdownParts = [game.i18n.localize(\"MGT2.Chat.Roll.Dice\") + \" \" + diceRawTotal];\n if (dm !== 0) breakdownParts.push(`DM ${dm >= 0 ? \"+\" : \"\"}${dm}`);\n if (hasDifficulty) breakdownParts.push(game.i18n.localize(\"MGT2.Chat.Roll.Effect\") + \" \" + effectStr);\n if (extraTooltip) breakdownParts.push(extraTooltip);\n const rollBreakdown = breakdownParts.join(\" | \");\n\n const chatData = {\n creatureName: actor.name,\n creatureImg: actor.img,\n rollLabel,\n formula: roll.formula,\n total: roll.total,\n tooltip: await roll.getTooltip(),\n rollBreakdown,\n difficulty: hasDifficulty ? diffTarget : null,\n difficultyLabel: difficultyLabel ?? MGT2Helper.getDifficultyDisplay(difficulty),\n success: hasDifficulty ? success : null,\n failure: hasDifficulty ? !success : null,\n effect: hasDifficulty ? effect : null,\n effectStr: hasDifficulty ? effectStr : null,\n modifiers: dm !== 0 ? [`DM ${dm >= 0 ? \"+\" : \"\"}${dm}`] : [],\n };\n\n const chatContent = await renderTemplate(\n \"systems/mgt2/templates/chat/creature-roll.html\",\n chatData\n );\n\n await ChatMessage.create({\n content: chatContent,\n speaker: ChatMessage.getSpeaker({ actor }),\n rolls: [roll],\n rollMode: rollMode ?? game.settings.get(\"core\", \"rollMode\"),\n });\n\n return { success, effect, total: roll.total };\n }\n\n // ───────────────────────────────────────────────────────── Roll Handlers\n\n /** Roll a skill check (2d6 + level vs difficulty) — uses unified dialog */\n static async #onRollSkill(event, target) {\n const index = parseInt(target.dataset.index ?? 0);\n const actor = this.document;\n const skill = actor.system.skills[index];\n if (!skill) return;\n\n const result = await RollPromptHelper.roll({\n isCreature: true,\n showSkillSelector: false,\n skillName: skill.name,\n skillLevel: skill.level,\n difficulty: \"Average\",\n title: game.i18n.localize(\"MGT2.Creature.RollSkill\") + \" — \" + skill.name,\n });\n if (!result) return;\n\n const customDM = parseInt(result.customDM ?? \"0\", 10) || 0;\n const skillLevel = parseInt(skill.level ?? 0, 10) || 0;\n const dm = skillLevel + customDM;\n const diceModifier = result.diceModifier ?? \"\";\n\n // Build formula exactly like character-sheet: parts joined without spaces\n const parts = [];\n if (diceModifier) {\n parts.push(\"3d6\", diceModifier);\n } else {\n parts.push(\"2d6\");\n }\n if (dm !== 0) parts.push(MGT2Helper.getFormulaDM(dm));\n const fullFormula = parts.join(\"\");\n\n const roll = await new Roll(fullFormula).evaluate();\n const rollLabel = `${skill.name.toUpperCase()} (${skillLevel >= 0 ? \"+\" : \"\"}${skillLevel})`;\n\n const tooltipParts = [`Dés: ${roll.dice.reduce((s, d) => s + d.total, 0)}`];\n if (skillLevel !== 0) tooltipParts.push(`${skill.name} ${skillLevel >= 0 ? \"+\" : \"\"}${skillLevel}`);\n if (customDM !== 0) tooltipParts.push(`MD perso ${customDM >= 0 ? \"+\" : \"\"}${customDM}`);\n\n await TravellerCreatureSheet.#postCreatureRoll({\n actor, roll, rollLabel,\n dm,\n difficulty: result.difficulty,\n rollMode: result.rollMode,\n extraTooltip: tooltipParts.join(\" | \"),\n });\n }\n\n /** Roll an attack: dialog with skill selector, then roll 2d6+skill+DM vs difficulty; on success roll damage */\n static async #onRollAttack(event, target) {\n const index = parseInt(target.dataset.index ?? 0);\n const actor = this.document;\n const attack = actor.system.attacks[index];\n if (!attack) return;\n\n const skills = actor.system.skills ?? [];\n\n const result = await RollPromptHelper.roll({\n isCreature: true,\n showSkillSelector: true,\n creatureSkills: skills,\n selectedSkillIndex: attack.skill ?? -1,\n difficulty: \"Average\",\n title: game.i18n.localize(\"MGT2.Creature.RollAttack\") + \" — \" + attack.name,\n });\n if (!result) return;\n\n const skillIndex = parseInt(result.creatureSkillIndex ?? \"-1\", 10);\n const chosenSkill = (skillIndex >= 0 && skillIndex < skills.length) ? skills[skillIndex] : null;\n const skillLevel = parseInt(chosenSkill?.level ?? 0, 10) || 0;\n const customDM = parseInt(result.customDM ?? \"0\", 10) || 0;\n const dm = skillLevel + customDM;\n const diceModifier = result.diceModifier ?? \"\";\n\n // Build formula exactly like character-sheet: parts joined without spaces\n const parts = [];\n if (diceModifier) {\n parts.push(\"3d6\", diceModifier);\n } else {\n parts.push(\"2d6\");\n }\n if (dm !== 0) parts.push(MGT2Helper.getFormulaDM(dm));\n const fullFormula = parts.join(\"\");\n\n const roll = await new Roll(fullFormula).evaluate();\n const rollLabel = chosenSkill\n ? `${attack.name} — ${chosenSkill.name} (${skillLevel >= 0 ? \"+\" : \"\"}${skillLevel})`\n : attack.name;\n\n const tooltipParts = [`Dés: ${roll.dice.reduce((s, d) => s + d.total, 0)}`];\n if (chosenSkill) tooltipParts.push(`${chosenSkill.name} ${skillLevel >= 0 ? \"+\" : \"\"}${skillLevel}`);\n if (customDM !== 0) tooltipParts.push(`MD perso ${customDM >= 0 ? \"+\" : \"\"}${customDM}`);\n\n const { success } = await TravellerCreatureSheet.#postCreatureRoll({\n actor, roll, rollLabel,\n dm,\n difficulty: result.difficulty,\n rollMode: result.rollMode,\n extraTooltip: tooltipParts.join(\" | \"),\n });\n\n // Roll damage only on success\n if (success && attack.damage) {\n const dmgFormula = normalizeDice(attack.damage);\n const dmgRoll = await new Roll(dmgFormula).evaluate();\n await dmgRoll.toMessage({\n speaker: ChatMessage.getSpeaker({ actor }),\n flavor: `${actor.name} — ${game.i18n.localize(\"MGT2.Chat.Weapon.Damage\")}: ${attack.name} (${attack.damage})`,\n rollMode: result.rollMode ?? game.settings.get(\"core\", \"rollMode\"),\n });\n }\n }\n\n // ───────────────────────────────────────────────────────── CRUD Handlers\n\n static async #onAddRow(event, target) {\n const prop = target.dataset.prop;\n if (!prop) return;\n const actor = this.document;\n const arr = foundry.utils.deepClone(actor.system[prop] ?? []);\n arr.push(this._getDefaultRow(prop));\n await actor.update({ [`system.${prop}`]: arr });\n }\n\n static async #onDeleteRow(event, target) {\n const prop = target.dataset.prop;\n const index = parseInt(target.dataset.index);\n if (!prop || isNaN(index)) return;\n const actor = this.document;\n const arr = foundry.utils.deepClone(actor.system[prop] ?? []);\n arr.splice(index, 1);\n await actor.update({ [`system.${prop}`]: arr });\n }\n\n _getDefaultRow(prop) {\n switch (prop) {\n case \"skills\": return { name: \"\", level: 0, note: \"\" };\n case \"attacks\": return { name: \"\", damage: \"1D\", skill: -1, description: \"\" };\n case \"traits\": return { name: \"\", value: \"\", description: \"\" };\n default: return {};\n }\n }\n}\n","const { HandlebarsApplicationMixin } = foundry.applications.api;\nimport { MGT2Helper } from \"../../helper.js\";\n\nexport default class TravellerItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {\n\n /** @override */\n static DEFAULT_OPTIONS = {\n classes: [\"mgt2\", \"sheet\", \"item\"],\n position: { width: 630 },\n form: {\n submitOnChange: true,\n closeOnSubmit: false,\n },\n window: { resizable: true },\n actions: {\n careerEventCreate: TravellerItemSheet.#onCareerEventCreate,\n careerEventDelete: TravellerItemSheet.#onCareerEventDelete,\n optionCreate: TravellerItemSheet.#onOptionCreate,\n optionDelete: TravellerItemSheet.#onOptionDelete,\n modifierCreate: TravellerItemSheet.#onModifierCreate,\n modifierDelete: TravellerItemSheet.#onModifierDelete,\n },\n }\n\n /** Dynamic PARTS: template resolved per item type */\n get PARTS() {\n const type = this.document?.type ?? \"item\";\n return {\n sheet: {\n template: `systems/mgt2/templates/items/${type}-sheet.html`,\n },\n };\n }\n\n /** Resolve template dynamically based on item type */\n get template() {\n return `systems/mgt2/templates/items/${this.document.type}-sheet.html`;\n }\n\n tabGroups = { primary: \"tab1\" }\n\n /** @override */\n async _prepareContext() {\n const item = this.document;\n const source = item.toObject();\n\n const settings = {\n usePronouns: game.settings.get(\"mgt2\", \"usePronouns\"),\n };\n\n let containers = null;\n let computers = null;\n let hadContainer = false;\n\n if (item.actor !== null) {\n hadContainer = true;\n containers = [{ name: \"\", _id: \"\" }].concat(item.actor.getContainers());\n computers = [{ name: \"\", _id: \"\" }].concat(item.actor.getComputers());\n }\n\n let weight = null;\n if (item.system.hasOwnProperty(\"weight\")) {\n weight = MGT2Helper.convertWeightForDisplay(item.system.weight);\n }\n\n let skills = [];\n if (this.actor !== null) {\n for (let actorItem of this.actor.items) {\n if (actorItem.type === \"talent\" && actorItem.system.subType === \"skill\")\n skills.push({ _id: actorItem._id, name: actorItem.getRollDisplay() });\n }\n }\n skills.sort(MGT2Helper.compareByName);\n skills = [{ _id: \"NP\", name: game.i18n.localize(\"MGT2.Items.NotProficient\") }].concat(skills);\n\n const enrich = (html) => foundry.applications.ux.TextEditor.implementation.enrichHTML(html ?? \"\", { async: true });\n\n return {\n item: item,\n document: item,\n cssClass: this.isEditable ? \"editable\" : \"locked\",\n system: item.system,\n source: source.system,\n fields: item.schema.fields,\n systemFields: item.system.schema.fields,\n isEditable: this.isEditable,\n isGM: game.user.isGM,\n config: CONFIG.MGT2,\n settings: settings,\n containers: containers,\n computers: computers,\n hadContainer: hadContainer,\n weight: weight,\n unitlabels: { weight: MGT2Helper.getWeightLabel() },\n skills: skills,\n enrichedDescription: await enrich(item.system.description),\n enrichedDescriptionLong: await enrich(item.system.descriptionLong),\n enrichedNotes: await enrich(item.system.notes),\n enrichedLockedDescription: await enrich(item.system.lockedDescription),\n };\n }\n\n /** @override — resolve the per-type template before rendering */\n async _renderHTML(context, options) {\n const templatePath = `systems/mgt2/templates/items/${this.document.type}-sheet.html`;\n const html = await foundry.applications.handlebars.renderTemplate(templatePath, context);\n return { sheet: html };\n }\n\n /** @override — put rendered HTML into the window content */\n _replaceHTML(result, content, options) {\n content.innerHTML = result.sheet;\n // Inject theme class dynamically (can't use game.settings in static DEFAULT_OPTIONS)\n const theme = game.settings.get(\"mgt2\", \"theme\");\n if (theme) this.element.classList.add(theme);\n this._activateTabGroups();\n this._bindItemEvents();\n }\n\n /** Bind CSS class-based events (templates not yet migrated to data-action) */\n _bindItemEvents() {\n const html = this.element;\n if (!this.isEditable) return;\n const bind = (sel, handler) => {\n for (const el of html.querySelectorAll(sel)) {\n el.addEventListener(\"click\", (ev) => handler.call(this, ev, ev.currentTarget));\n }\n };\n bind(\".event-create\", TravellerItemSheet.#onCareerEventCreate);\n bind(\".event-delete\", TravellerItemSheet.#onCareerEventDelete);\n bind(\".options-create\", TravellerItemSheet.#onOptionCreate);\n bind(\".options-delete\", TravellerItemSheet.#onOptionDelete);\n bind(\".modifiers-create\", TravellerItemSheet.#onModifierCreate);\n bind(\".modifiers-delete\", TravellerItemSheet.#onModifierDelete);\n\n // Activate ProseMirror editors for HTMLField fields\n for (const btn of html.querySelectorAll(\".editor-edit\")) {\n btn.addEventListener(\"click\", async (event) => {\n event.preventDefault();\n const editorWrapper = btn.closest(\".editor\");\n if (!editorWrapper) return;\n const editorContent = editorWrapper.querySelector(\".editor-content\");\n if (!editorContent || editorContent.classList.contains(\"ProseMirror\")) return;\n const target = editorContent.dataset.edit;\n const value = foundry.utils.getProperty(this.document, target) ?? \"\";\n btn.remove();\n editorWrapper.classList.add(\"prosemirror\");\n await ProseMirrorEditor.create(editorContent, value, {\n document: this.document,\n fieldName: target,\n plugins: {},\n collaborate: false,\n });\n });\n }\n }\n\n _activateTabGroups() {\n for (const [group, activeTab] of Object.entries(this.tabGroups)) {\n const nav = this.element.querySelector(`nav[data-group=\"${group}\"], .horizontal-tabs`);\n if (!nav) continue;\n\n nav.querySelectorAll('[data-tab]').forEach(link => {\n link.classList.toggle('active', link.dataset.tab === activeTab);\n link.addEventListener('click', event => {\n event.preventDefault();\n this.tabGroups[group] = link.dataset.tab;\n this.render();\n });\n });\n\n this.element.querySelectorAll(`.itemsheet-panel [data-tab], [data-group=\"${group}\"][data-tab]`).forEach(content => {\n content.classList.toggle('active', content.dataset.tab === activeTab);\n });\n }\n }\n\n /** @override — process form data before submit (weight/qty/cost conversions + container logic) */\n _prepareSubmitData(event, form, formData) {\n const data = foundry.utils.expandObject(formData.object);\n\n if (data.hasOwnProperty(\"weight\")) {\n data.system = data.system || {};\n data.system.weight = MGT2Helper.convertWeightFromInput(data.weight);\n delete data.weight;\n }\n\n if (data.system?.hasOwnProperty(\"quantity\")) {\n data.system.quantity = MGT2Helper.getIntegerFromInput(data.system.quantity);\n }\n\n if (data.system?.hasOwnProperty(\"cost\")) {\n data.system.cost = MGT2Helper.getIntegerFromInput(data.system.cost);\n }\n\n // Container/equipped logic\n if (data.system?.hasOwnProperty(\"container\") && this.document.system.hasOwnProperty(\"equipped\")) {\n const equippedChange = this.document.system.equipped !== data.system.equipped;\n const containerChange = this.document.system.container?.id !== data.system.container?.id;\n\n if (equippedChange && data.system.equipped === true) {\n data.system.container = { id: \"\" };\n } else if (containerChange && data.system.container?.id !== \"\" && this.document.system.container?.id === \"\") {\n data.system.equipped = false;\n }\n }\n\n return foundry.utils.flattenObject(data);\n }\n\n // =========================================================\n // Actions\n // =========================================================\n\n static async #onCareerEventCreate(event) {\n event.preventDefault();\n const events = this.document.system.events;\n let newEvents;\n if (!events || events.length === 0) {\n newEvents = [{ age: \"\", description: \"\" }];\n } else {\n newEvents = [...events, { age: \"\", description: \"\" }];\n }\n return this.document.update({ system: { events: newEvents } });\n }\n\n static async #onCareerEventDelete(event, target) {\n event.preventDefault();\n const element = target.closest(\"[data-events-part]\");\n const index = Number(element.dataset.eventsPart);\n const events = foundry.utils.deepClone(this.document.system.events);\n const newEvents = Object.entries(events)\n .filter(([key]) => Number(key) !== index)\n .map(([, val]) => val);\n return this.document.update({ system: { events: newEvents } });\n }\n\n static async #onOptionCreate(event, target) {\n event.preventDefault();\n const property = target.dataset.property;\n const options = this.document.system[property];\n let newOptions;\n if (!options || options.length === 0) {\n newOptions = [{ name: \"\", description: \"\" }];\n } else {\n newOptions = [...options, { name: \"\", description: \"\" }];\n }\n return this.document.update({ [`system.${property}`]: newOptions });\n }\n\n static async #onOptionDelete(event, target) {\n event.preventDefault();\n const element = target.closest(\"[data-options-part]\");\n const property = element.dataset.property;\n const index = Number(element.dataset.optionsPart);\n const options = foundry.utils.deepClone(this.document.system[property]);\n const newOptions = Object.entries(options)\n .filter(([key]) => Number(key) !== index)\n .map(([, val]) => val);\n return this.document.update({ [`system.${property}`]: newOptions });\n }\n\n static async #onModifierCreate(event) {\n event.preventDefault();\n const modifiers = this.document.system.modifiers;\n let newModifiers;\n if (!modifiers || modifiers.length === 0) {\n newModifiers = [{ characteristic: \"Endurance\", value: null }];\n } else {\n newModifiers = [...modifiers, { characteristic: \"Endurance\", value: null }];\n }\n return this.document.update({ system: { modifiers: newModifiers } });\n }\n\n static async #onModifierDelete(event, target) {\n event.preventDefault();\n const element = target.closest(\"[data-modifiers-part]\");\n const index = Number(element.dataset.modifiersPart);\n const modifiers = foundry.utils.deepClone(this.document.system.modifiers);\n const newModifiers = Object.entries(modifiers)\n .filter(([key]) => Number(key) !== index)\n .map(([, val]) => val);\n return this.document.update({ system: { modifiers: newModifiers } });\n }\n}\n","/**\n * Define a set of template paths to pre-load\n * Pre-loaded templates are compiled and cached for fast access when rendering\n * @return {Promise}\n */\nexport const preloadHandlebarsTemplates = async function() {\n\n const templatePaths = [\n \"systems/mgt2/templates/items/armor-sheet.html\",\n \"systems/mgt2/templates/items/career-sheet.html\",\n \"systems/mgt2/templates/items/computer-sheet.html\",\n \"systems/mgt2/templates/items/contact-sheet.html\",\n \"systems/mgt2/templates/items/container-sheet.html\",\n \"systems/mgt2/templates/items/disease-sheet.html\",\n \"systems/mgt2/templates/items/equipment-sheet.html\",\n \"systems/mgt2/templates/items/item-sheet.html\",\n \"systems/mgt2/templates/items/species-sheet.html\",\n \"systems/mgt2/templates/items/talent-sheet.html\",\n \"systems/mgt2/templates/items/weapon-sheet.html\",\n \"systems/mgt2/templates/items/parts/sheet-configuration.html\",\n \"systems/mgt2/templates/items/parts/sheet-physical-item.html\",\n \"systems/mgt2/templates/items/parts/sheet-physical-item-tab.html\",\n \"systems/mgt2/templates/roll-prompt.html\",\n \"systems/mgt2/templates/chat/roll.html\",\n //\"systems/mgt2/templates/chat/roll-characteristic.html\",\n \"systems/mgt2/templates/actors/actor-config-sheet.html\",\n \"systems/mgt2/templates/actors/actor-config-characteristic-sheet.html\",\n \"systems/mgt2/templates/actors/trait-sheet.html\",\n \"systems/mgt2/templates/actors/creature-sheet.html\",\n \"systems/mgt2/templates/chat/creature-roll.html\",\n \"systems/mgt2/templates/editor-fullview.html\"\n ];\n \n const loader = foundry.applications?.handlebars?.loadTemplates ?? loadTemplates;\n return loader(templatePaths);\n };","import { MGT2Helper } from \"./helper.js\";\n\nexport class ChatHelper {\n\n static setupCardListeners(message, element, messageData) {\n if (!message || !element) {\n return;\n }\n element.querySelectorAll('button[data-action=\"rollDamage\"]').forEach(el => {\n el.addEventListener('click', async event => {\n await this._processRollDamageButtonEvent(message, event);\n });\n });\n\n element.querySelectorAll('button[data-action=\"damage\"]').forEach(el => {\n el.addEventListener('click', async event => {\n await this._applyChatCardDamage(message, event);\n });\n });\n\n element.querySelectorAll('button[data-action=\"healing\"]').forEach(el => {\n el.addEventListener('click', async event => {\n await this._applyChatCardHealing(message, event);\n });\n });\n\n element.querySelectorAll('button[data-action=\"surgeryDamage\"]').forEach(el => {\n el.addEventListener('click', async event => {\n await this._applyChatCardSurgeryDamage(message, event);\n });\n });\n\n element.querySelectorAll('button[data-index]:not([data-action])').forEach(el => {\n el.addEventListener('click', async event => {\n await this._processRollButtonEvent(message, event);\n });\n });\n }\n\n static async _processRollButtonEvent(message, event) {\n event.preventDefault();\n event.stopPropagation();\n let buttons = message.flags.mgt2.buttons;\n const index = event.target.dataset.index;\n const button = buttons[index];\n let roll = await new Roll(button.formula, {}).roll();\n\n const chatData = {\n user: game.user.id,\n speaker: message.speaker,\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total * 100) / 100,\n rollObjectName: button.message.objectName,\n rollMessage: MGT2Helper.format(button.message.flavor, Math.round(roll.total * 100) / 100),\n };\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/roll.html\", chatData);\n chatData.content = html;\n return roll.toMessage(chatData);\n }\n\n static async _processRollDamageButtonEvent(message, event) {\n event.preventDefault();\n event.stopPropagation();\n let rollFormula = message.flags.mgt2.damage.formula;\n\n let roll = await new Roll(rollFormula, {}).roll();\n\n let speaker;\n let selectTokens = canvas.tokens.controlled;\n if (selectTokens.length > 0) {\n speaker = selectTokens[0].actor;\n } else {\n speaker = game.user.character;\n }\n\n let rollTypeName = message.flags.mgt2.damage.rollTypeName ? message.flags.mgt2.damage.rollTypeName + \" \" + game.i18n.localize(\"MGT2.Actor.Damage\") : null;\n\n const chatData = {\n user: game.user.id,\n speaker: ChatMessage.getSpeaker({ actor: speaker }),\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total * 100) / 100,\n showButtons: true,\n hasDamage: true,\n rollTypeName: rollTypeName,\n rollObjectName: message.flags.mgt2.damage.rollObjectName\n };\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/roll.html\", chatData);\n chatData.content = html;\n\n return roll.toMessage(chatData);\n }\n\n static _applyChatCardDamage(message, event) {\n if (canvas.tokens.controlled.length === 0) {\n ui.notifications.warn(game.i18n.localize(\"MGT2.Errors.NoTokenSelected\"));\n return;\n }\n const roll = message.rolls[0];\n return Promise.all(canvas.tokens.controlled.map(t => {\n const a = t.actor;\n return a.applyDamage(roll.total);\n }));\n }\n\n static _applyChatCardHealing(message, event) {\n if (canvas.tokens.controlled.length === 0) {\n ui.notifications.warn(game.i18n.localize(\"MGT2.Errors.NoTokenSelected\"));\n return;\n }\n // For First Aid/Surgery healing, use amount from flags; otherwise use roll total\n const amount = message.flags?.mgt2?.healing?.amount\n ?? message.flags?.mgt2?.surgery?.healing\n ?? Math.max(1, message.rolls[0].total);\n return Promise.all(canvas.tokens.controlled.map(t => {\n const a = t.actor;\n return a.applyHealing(amount);\n }));\n }\n\n static _applyChatCardSurgeryDamage(message, event) {\n if (canvas.tokens.controlled.length === 0) {\n ui.notifications.warn(game.i18n.localize(\"MGT2.Errors.NoTokenSelected\"));\n return;\n }\n const amount = message.flags?.mgt2?.surgery?.surgeryDamage ?? 3;\n return Promise.all(canvas.tokens.controlled.map(t => {\n const a = t.actor;\n return a.applyDamage(amount, { ignoreArmor: true });\n }));\n }\n}","export const registerSettings = function () {\n\n game.settings.register(\"mgt2\", \"theme\", {\n name: \"MGT2.Settings.theme.name\",\n hint: \"MGT2.Settings.theme.hint\",\n scope: \"client\",\n config: true,\n default: \"black-and-red\",\n type: String,\n choices: {\n \"black-and-red\": \"MGT2.Themes.BlackAndRed\",\n \"mwamba\": \"MGT2.Themes.Mwamba\",\n \"blue\": \"MGT2.Themes.Blue\"\n },\n requiresReload: true\n });\n\n game.settings.register('mgt2', 'usePronouns', {\n name: \"MGT2.Settings.usePronouns.name\",\n hint: \"MGT2.Settings.usePronouns.hint\",\n default: false,\n scope: 'world',\n type: Boolean,\n config: true,\n requiresReload: false\n });\n\n game.settings.register('mgt2', 'useGender', {\n name: \"MGT2.Settings.useGender.name\",\n hint: \"MGT2.Settings.useGender.hint\",\n default: false,\n scope: 'world',\n type: Boolean,\n config: true,\n requiresReload: false\n });\n\n game.settings.register('mgt2', 'showLife', {\n name: \"MGT2.Settings.showLife.name\",\n hint: \"MGT2.Settings.showLife.hint\",\n default: false,\n scope: 'world',\n type: Boolean,\n config: true,\n requiresReload: false\n });\n\n // game.settings.register('mgt2', 'useWeightMetric', {\n // name: \"MGT2.Settings.useWeightMetric.name\",\n // hint: \"MGT2.Settings.useWeightMetric.hint\",\n // default: true,\n // scope: 'world',\n // type: Boolean,\n // config: true,\n // requiresReload: true\n // });\n\n // game.settings.register('mgt2', 'useDistanceMetric', {\n // name: \"MGT2.Settings.useDistanceMetric.name\",\n // hint: \"MGT2.Settings.useDistanceMetric.hint\",\n // default: true,\n // scope: 'world',\n // type: Boolean,\n // config: true,\n // requiresReload: true\n // });\n\n // game.settings.register('mgt2', 'showTrash', {\n // name: \"Show Trash tab to Player\",\n // hint: \"Player can see the Trash tab and recover item\",\n // default: false,\n // scope: 'world',\n // type: Boolean,\n // config: true,\n // requiresReload: false\n // });\n\n /*game.settings.register('mgt2', 'containerDropIn', {\n name: \"Test\",\n hint: \"Mon hint\",\n default: true,\n scope: 'client',\n type: Boolean,\n config: true\n });*/\n};\n","import {\n CharacterData,\n VehiculeData,\n CreatureData,\n ItemData,\n EquipmentData,\n DiseaseData,\n CareerData,\n TalentData,\n ContactData,\n ArmorData,\n ComputerData,\n WeaponData,\n ItemContainerData,\n SpeciesData\n} from \"./models/index.mjs\";\n\nimport { MGT2 } from \"./config.js\";\nimport { TravellerActor, MGT2Combatant } from \"./actors/actor.js\";\nimport { TravellerItem } from \"./item.js\";\nimport { TravellerItemSheet, TravellerCharacterSheet, TravellerVehiculeSheet, TravellerCreatureSheet } from \"./applications/sheets/_module.mjs\";\nimport { preloadHandlebarsTemplates } from \"./templates.js\";\n//import { MGT2Helper } from \"./helper.js\";\nimport {ChatHelper} from \"./chatHelper.js\";\n\n/* -------------------------------------------- */\n/* Foundry VTT Initialization */\n/* -------------------------------------------- */\nimport { registerSettings } from \"./settings.js\";\n\nfunction registerHandlebarsHelpers() {\n Handlebars.registerHelper('showDM', function (dm) {\n if (dm === 0) return \"0\";\n if (dm > 0) return `+${dm}`;\n if (dm < 0) return `${dm}`;\n return \"\";\n });\n}\n\nHooks.once(\"init\", async function () {\n CONFIG.MGT2 = MGT2;\n CONFIG.Combat.initiative = {\n formula: \"2d6 + @initiative\",\n decimals: 2\n };\n\n CONFIG.Actor.trackableAttributes = {\n character: {\n bar: [\"life\",\n \"characteristics.strength\",\n \"characteristics.dexterity\",\n \"characteristics.endurance\",\n \"characteristics.intellect\",\n \"characteristics.education\",\n \"characteristics.social\",\n \"characteristics.morale\",\n \"characteristics.luck\",\n \"characteristics.sanity\",\n \"characteristics.charm\",\n \"characteristics.psionic\",\n \"characteristics.other\"\n ],\n value: [\"life.value\",\n \"health.radiations\",\n \"characteristics.strength.value\",\n \"characteristics.dexterity.value\",\n \"characteristics.endurance.value\",\n \"characteristics.intellect.value\",\n \"characteristics.education.value\",\n \"characteristics.social.value\",\n \"characteristics.morale.value\",\n \"characteristics.luck.value\",\n \"characteristics.sanity.value\",\n \"characteristics.charm.value\",\n \"characteristics.psionic.value\",\n \"characteristics.other.value\"]\n },\n creature: {\n bar: [\"life\"],\n value: [\"life.value\", \"life.max\", \"speed\", \"armor\", \"psi\"]\n }\n };\n\n game.mgt2 = {\n TravellerActor,\n TravellerItem\n };\n\n registerHandlebarsHelpers();\n registerSettings();\n\n CONFIG.Combatant.documentClass = MGT2Combatant;\n CONFIG.Actor.documentClass = TravellerActor;\n CONFIG.Item.documentClass = TravellerItem;\n\n foundry.documents.collections.Actors.unregisterSheet(\"core\", foundry.appv1.sheets.ActorSheet);\n foundry.documents.collections.Actors.registerSheet(\"mgt2\", TravellerCharacterSheet, { types: [\"character\"], makeDefault: true, label: \"Traveller Sheet\" });\n foundry.documents.collections.Actors.registerSheet(\"mgt2\", TravellerVehiculeSheet, { types: [\"vehicule\"], makeDefault: true, label: \"Vehicule Sheet\" });\n foundry.documents.collections.Actors.registerSheet(\"mgt2\", TravellerCreatureSheet, { types: [\"creature\"], makeDefault: true, label: \"Creature Sheet\" });\n\n foundry.documents.collections.Items.unregisterSheet(\"core\", foundry.appv1.sheets.ItemSheet);\n foundry.documents.collections.Items.registerSheet(\"mgt2\", TravellerItemSheet, { makeDefault: true });\n\n Object.assign(CONFIG.Actor.dataModels, {\n \"character\": CharacterData,\n \"vehicule\": VehiculeData,\n \"creature\": CreatureData\n });\n\n Object.assign(CONFIG.Item.dataModels, {\n \"item\": ItemData,\n \"equipment\": EquipmentData,\n \"disease\": DiseaseData,\n \"career\": CareerData,\n \"talent\": TalentData,\n \"contact\": ContactData,\n \"weapon\": WeaponData,\n \"computer\": ComputerData,\n \"armor\": ArmorData,\n \"container\": ItemContainerData,\n \"species\": SpeciesData\n });\n\n\n Hooks.on(\"renderChatMessageHTML\", (message, element, messageData) => {\n ChatHelper.setupCardListeners(message, element, messageData);\n });\n\n // Preload template partials\n await preloadHandlebarsTemplates();\n});\n\nexport { MGT2 };"],"names":["fields","HandlebarsApplicationMixin","DialogV2","renderTemplate","FormDataExtended"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"mgt2.bundle.js","sources":["src/module/models/items/base-item.mjs","src/module/models/character.mjs","src/module/models/vehicule.mjs","src/module/models/creature.mjs","src/module/models/items/item.mjs","src/module/models/items/equipment.mjs","src/module/models/items/disease.mjs","src/module/models/items/career.mjs","src/module/models/items/talent.mjs","src/module/models/items/contact.mjs","src/module/models/items/weapon.mjs","src/module/models/items/armor.mjs","src/module/models/items/computer.mjs","src/module/models/items/container.mjs","src/module/models/items/species.mjs","src/module/config.js","src/module/actors/character.js","src/module/actors/actor.js","src/module/item.js","src/module/applications/sheets/base-actor-sheet.mjs","src/module/helper.js","src/module/roll-prompt.js","src/module/actors/character-prompts.js","src/module/applications/sheets/character-sheet.mjs","src/module/applications/sheets/vehicule-sheet.mjs","src/module/applications/sheets/creature-sheet.mjs","src/module/applications/sheets/item-sheet.mjs","src/module/templates.js","src/module/chatHelper.js","src/module/settings.js","src/module/core.js"],"sourcesContent":["const fields = foundry.data.fields;\n\nexport function createCharacteristicField(show = true, showMax = false) {\n return new fields.SchemaField({\n value: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n max: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),\n dm: new fields.NumberField({ required: false, initial: 0, integer: true }),\n show: new fields.BooleanField({ required: false, initial: show }),\n showMax: new fields.BooleanField({ required: false, initial: showMax })\n });\n}\n\nexport class ItemBaseData extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n return {\n description: new fields.HTMLField({ required: false, blank: true, trim: true }),\n subType: new fields.StringField({ required: false, blank: false, nullable: true })\n };\n }\n}\n\nexport class PhysicalItemData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.quantity = new fields.NumberField({ required: true, initial: 1, min: 0, integer: true });\n schema.weight = new fields.NumberField({ required: true, initial: 0, min: 0, integer: false });\n schema.weightless = new fields.BooleanField({ required: false, initial: false });\n schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });\n schema.tl = new fields.StringField({ required: true, blank: false, initial: \"TL12\" });\n schema.container = new fields.SchemaField({\n id: new fields.StringField({ required: false, blank: true })\n });\n schema.roll = new fields.SchemaField({\n characteristic: new fields.StringField({ required: false, blank: true, trim: true }),\n skill: new fields.StringField({ required: false, blank: true, trim: true }),\n difficulty: new fields.StringField({ required: false, blank: true, trim: true })\n });\n schema.trash = new fields.BooleanField({ required: false, initial: false });\n return schema;\n }\n}\n","import { createCharacteristicField } from \"./items/base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class CharacterData extends foundry.abstract.TypeDataModel {\n\n static defineSchema() {\n return {\n name: new fields.StringField({ required: false, blank: false, trim: true }),\n life: new fields.SchemaField({\n value: new fields.NumberField({ required: false, initial: 0, integer: true }),\n max: new fields.NumberField({ required: true, initial: 0, integer: true })\n }),\n personal: new fields.SchemaField({\n title: new fields.StringField({ required: false, blank: true, trim: true }),\n species: new fields.StringField({ required: false, blank: true, trim: true }),\n speciesText: new fields.SchemaField({\n description: new fields.StringField({ required: false, blank: true, trim: true, nullable: true }),\n descriptionLong: new fields.HTMLField({ required: false, blank: true, trim: true })\n }),\n age: new fields.StringField({ required: false, blank: true, trim: true }),\n gender: new fields.StringField({ required: false, blank: true, trim: true }),\n pronouns: new fields.StringField({ required: false, blank: true, trim: true }),\n homeworld: new fields.StringField({ required: false, blank: true, trim: true }),\n ucp: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n traits: new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n )\n }),\n biography: new fields.HTMLField({ required: false, blank: true, trim: true }),\n\n characteristics: new fields.SchemaField({\n strength: createCharacteristicField(true, true),\n dexterity: createCharacteristicField(true, true),\n endurance: createCharacteristicField(true, true),\n intellect: createCharacteristicField(true, false),\n education: createCharacteristicField(true, false),\n social: createCharacteristicField(true, false),\n morale: createCharacteristicField(true, false),\n luck: createCharacteristicField(true, false),\n sanity: createCharacteristicField(true, false),\n charm: createCharacteristicField(true, false),\n psionic: createCharacteristicField(true, false),\n other: createCharacteristicField(true, false)\n }),\n\n health: new fields.SchemaField({\n radiations: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),\n lastFirstAidDate: new fields.StringField({ required: false, blank: true, trim: true }),\n healingRecoveryMode: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" })\n }),\n study: new fields.SchemaField({\n skill: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n total: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),\n completed: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true })\n }),\n finance: new fields.SchemaField({\n pension: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n credits: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n cashOnHand: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n debt: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n livingCost: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n monthlyShipPayments: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n notes: new fields.HTMLField({ required: false, blank: true, trim: true })\n }),\n containerView: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n containerDropIn: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n notes: new fields.HTMLField({ required: false, blank: true, trim: true }),\n\n inventory: new fields.SchemaField({\n armor: new fields.NumberField({ required: true, initial: 0, integer: true }),\n weight: new fields.NumberField({ required: true, initial: 0, min: 0, integer: false }),\n encumbrance: new fields.SchemaField({\n normal: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n heavy: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true })\n })\n }),\n states: new fields.SchemaField({\n encumbrance: new fields.BooleanField({ required: false, initial: false }),\n fatigue: new fields.BooleanField({ required: false, initial: false }),\n unconscious: new fields.BooleanField({ required: false, initial: false }),\n surgeryRequired: new fields.BooleanField({ required: false, initial: false })\n }),\n\n config: new fields.SchemaField({\n psionic: new fields.BooleanField({ required: false, initial: true }),\n initiative: new fields.StringField({ required: false, blank: true, initial: \"dexterity\" }),\n damages: new fields.SchemaField({\n rank1: new fields.StringField({ required: false, blank: true, initial: \"strength\" }),\n rank2: new fields.StringField({ required: false, blank: true, initial: \"dexterity\" }),\n rank3: new fields.StringField({ required: false, blank: true, initial: \"endurance\" })\n })\n })\n };\n }\n}\n","const fields = foundry.data.fields;\n\nexport default class VehiculeData extends foundry.abstract.TypeDataModel {\n\n static defineSchema() {\n return {\n name: new fields.StringField({ required: false, blank: false, trim: true }),\n skillId: new fields.StringField({ required: false, initial: \"\", blank: true, trim: true }),\n speed: new fields.SchemaField({\n cruise: new fields.StringField({ required: false, initial: \"Slow\", blank: true }),\n maximum: new fields.StringField({ required: false, initial: \"Medium\", blank: true })\n }),\n agility: new fields.NumberField({ required: false, min: 0, integer: true }),\n crew: new fields.NumberField({ required: false, min: 0, integer: true }),\n passengers: new fields.NumberField({ required: false, min: 0, integer: true }),\n cargo: new fields.NumberField({ required: false, min: 0, integer: false }),\n life: new fields.SchemaField({\n value: new fields.NumberField({ required: true, initial: 0, integer: true }),\n max: new fields.NumberField({ required: true, initial: 0, integer: true })\n }),\n shipping: new fields.NumberField({ required: false, min: 0, integer: true }),\n cost: new fields.NumberField({ required: false, min: 0, integer: true }),\n armor: new fields.SchemaField({\n front: new fields.NumberField({ required: true, initial: 0, integer: true }),\n rear: new fields.NumberField({ required: true, initial: 0, integer: true }),\n sides: new fields.NumberField({ required: true, initial: 0, integer: true })\n }),\n skills: new fields.SchemaField({\n autopilot: new fields.NumberField({ required: true, initial: 0, integer: true })\n }),\n description: new fields.HTMLField({ required: false, blank: true, trim: true }),\n notes: new fields.HTMLField({ required: false, blank: true, trim: true })\n };\n }\n}\n","const fields = foundry.data.fields;\n\nexport default class CreatureData extends foundry.abstract.TypeDataModel {\n\n static defineSchema() {\n return {\n life: new fields.SchemaField({\n value: new fields.NumberField({ required: true, initial: 10, min: 0, integer: true }),\n max: new fields.NumberField({ required: true, initial: 10, min: 0, integer: true })\n }),\n\n speed: new fields.NumberField({ required: true, initial: 6, min: 0, integer: true }),\n\n armor: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n\n psi: new fields.NumberField({ required: true, initial: 0, min: 0, integer: true }),\n\n initiativeBonus: new fields.NumberField({ required: true, initial: 0, integer: true }),\n\n skills: new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true, initial: \"\" }),\n level: new fields.NumberField({ required: true, initial: 0, integer: true }),\n note: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" })\n })\n ),\n\n attacks: new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true, initial: \"\" }),\n damage: new fields.StringField({ required: true, blank: true, trim: true, initial: \"1D\" }),\n skill: new fields.NumberField({ required: false, initial: -1, integer: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" })\n })\n ),\n\n traits: new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true, initial: \"\" }),\n value: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n description: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" })\n })\n ),\n\n behavior: new fields.SchemaField({\n type: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n subtype: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" })\n }),\n\n biography: new fields.HTMLField({ required: false, blank: true, trim: true }),\n notes: new fields.HTMLField({ required: false, blank: true, trim: true }),\n };\n }\n\n /** @override */\n prepareDerivedData() {\n // Compute initiative bonus from Métabolisme traits\n let bonus = 0;\n for (const trait of this.traits) {\n const nameLower = trait.name.toLowerCase();\n if (nameLower.includes(\"métabolisme rapide\") || nameLower.includes(\"metabolisme rapide\")) {\n const val = parseInt(trait.value);\n if (!isNaN(val)) bonus += val;\n } else if (nameLower.includes(\"métabolisme lent\") || nameLower.includes(\"metabolisme lent\")) {\n const val = parseInt(trait.value);\n if (!isNaN(val)) bonus -= val;\n }\n }\n this.initiativeBonus = bonus;\n\n // Compute armor from Armure trait if not set manually\n if (this.armor === 0) {\n for (const trait of this.traits) {\n if (trait.name.toLowerCase().startsWith(\"armure\")) {\n const val = parseInt(trait.value);\n if (!isNaN(val)) {\n this.armor = val;\n break;\n }\n }\n }\n }\n\n // Compute PSI from Psionique trait\n if (this.psi === 0) {\n for (const trait of this.traits) {\n if (trait.name.toLowerCase().startsWith(\"psionique\")) {\n const val = parseInt(trait.value);\n if (!isNaN(val)) {\n this.psi = val;\n break;\n }\n }\n }\n }\n }\n}\n","import { PhysicalItemData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class ItemData extends PhysicalItemData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.subType.initial = \"loot\";\n schema.software = new fields.SchemaField({\n bandwidth: new fields.NumberField({ required: false, initial: 0, min: 0, max: 10, integer: true }),\n effect: new fields.StringField({ required: false, blank: true, trim: true, initial: \"\" }),\n computerId: new fields.StringField({ required: false, blank: true, initial: \"\" })\n });\n return schema;\n }\n}\n","import { PhysicalItemData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class EquipmentData extends PhysicalItemData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.equipped = new fields.BooleanField({ required: false, initial: false });\n schema.augment = new fields.SchemaField({\n improvement: new fields.StringField({ required: false, blank: true, trim: true })\n });\n schema.subType.initial = \"equipment\"; // augment, clothing, trinket, toolkit, equipment\n return schema;\n }\n}\n","import { ItemBaseData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class DiseaseData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.subType.initial = \"disease\"; // disease, poison\n schema.difficulty = new fields.StringField({ required: true, initial: \"Average\" });\n schema.damage = new fields.StringField({ required: false, blank: true });\n schema.interval = new fields.StringField({ required: false, blank: true });\n return schema;\n }\n}\n","import { ItemBaseData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class CareerData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.difficulty = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });\n schema.damage = new fields.StringField({ required: false, blank: true });\n schema.interval = new fields.StringField({ required: false, blank: true });\n schema.assignment = new fields.StringField({ required: false, blank: true });\n schema.terms = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.rank = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.events = new fields.ArrayField(\n new fields.SchemaField({\n age: new fields.NumberField({ required: false, integer: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n );\n return schema;\n }\n}\n","import { ItemBaseData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class TalentData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.subType.initial = \"skill\";\n schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });\n schema.level = new fields.NumberField({ required: true, initial: 0, min: 0, integer: true });\n schema.skill = new fields.SchemaField({\n speciality: new fields.StringField({ required: false, blank: true, trim: true }),\n reduceEncumbrance: new fields.BooleanField({ required: false, initial: false })\n });\n schema.psionic = new fields.SchemaField({\n reach: new fields.StringField({ required: false, blank: true, trim: true }),\n cost: new fields.NumberField({ required: false, initial: 1, min: 0, integer: true }),\n duration: new fields.StringField({ required: false, blank: true, trim: true }),\n durationUnit: new fields.StringField({ required: false })\n });\n schema.roll = new fields.SchemaField({\n characteristic: new fields.StringField({ required: false, blank: true, trim: true }),\n skill: new fields.StringField({ required: false, blank: true, trim: true }),\n difficulty: new fields.StringField({ required: false, blank: true, trim: true })\n });\n return schema;\n }\n}\n","import { ItemBaseData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class ContactData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.subType.initial = \"skill\";\n schema.cost = new fields.NumberField({ required: true, initial: 1, min: 0, integer: true });\n schema.skill = new fields.SchemaField({\n speciality: new fields.StringField({ required: false, blank: true, trim: true }),\n characteristic: new fields.StringField({ required: false, blank: true, trim: true })\n });\n schema.status = new fields.StringField({ required: false, blank: true, trim: true, initial: \"Alive\" });\n schema.attitude = new fields.StringField({ required: false, blank: true, trim: true, initial: \"Unknow\" });\n schema.relation = new fields.StringField({ required: false, blank: true, trim: true, initial: \"Contact\" });\n schema.title = new fields.StringField({ required: false, blank: true, trim: true });\n schema.nickname = new fields.StringField({ required: false, blank: true, trim: true });\n schema.species = new fields.StringField({ required: false, blank: true, trim: true });\n schema.gender = new fields.StringField({ required: false, blank: true, trim: true });\n schema.pronouns = new fields.StringField({ required: false, blank: true, trim: true });\n schema.homeworld = new fields.StringField({ required: false, blank: true, trim: true });\n schema.location = new fields.StringField({ required: false, blank: true, trim: true });\n schema.occupation = new fields.StringField({ required: false, blank: true, trim: true });\n schema.notes = new fields.HTMLField({ required: false, blank: true, trim: true });\n return schema;\n }\n}\n","import { PhysicalItemData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class WeaponData extends PhysicalItemData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.equipped = new fields.BooleanField({ required: false, initial: false });\n schema.range = new fields.SchemaField({\n isMelee: new fields.BooleanField({ required: false, initial: false }),\n value: new fields.NumberField({ required: false, integer: true, nullable: true }),\n unit: new fields.StringField({ required: false, blank: true, nullable: true })\n });\n schema.damage = new fields.StringField({ required: false, blank: true, trim: true });\n schema.magazine = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.magazineCost = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.traits = new fields.SchemaField({\n ap: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),\n auto: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),\n blast: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }),\n bulky: new fields.BooleanField({ required: false, initial: false }),\n veryBulky: new fields.BooleanField({ required: false, initial: false }),\n stun: new fields.BooleanField({ required: false, initial: false }),\n smart: new fields.BooleanField({ required: false, initial: false }),\n radiation: new fields.BooleanField({ required: false, initial: false }),\n scope: new fields.BooleanField({ required: false, initial: false }),\n zeroG: new fields.BooleanField({ required: false, initial: false })\n });\n schema.options = new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n );\n return schema;\n }\n\n /** Returns a compact display string of active traits (e.g. \"AP 2, Auto 3, Blast 5, Bulky\") */\n static getTraitsSummary(traits) {\n if (!traits) return \"\";\n const parts = [];\n if (traits.ap > 0) parts.push(`AP ${traits.ap}`);\n if (traits.auto > 0) parts.push(`Auto ${traits.auto}`);\n if (traits.blast > 0) parts.push(`Blast ${traits.blast}`);\n if (traits.bulky) parts.push(game.i18n.localize(\"MGT2.WeaponTraits.Bulky\"));\n if (traits.veryBulky) parts.push(game.i18n.localize(\"MGT2.WeaponTraits.VeryBulky\"));\n if (traits.stun) parts.push(game.i18n.localize(\"MGT2.WeaponTraits.Stun\"));\n if (traits.smart) parts.push(game.i18n.localize(\"MGT2.WeaponTraits.Smart\"));\n if (traits.radiation) parts.push(game.i18n.localize(\"MGT2.WeaponTraits.Radiation\"));\n if (traits.scope) parts.push(game.i18n.localize(\"MGT2.WeaponTraits.Scope\"));\n if (traits.zeroG) parts.push(game.i18n.localize(\"MGT2.WeaponTraits.ZeroG\"));\n return parts.join(\", \");\n }\n}\n","import { PhysicalItemData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class ArmorData extends PhysicalItemData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.equipped = new fields.BooleanField({ required: false, initial: false });\n schema.radiations = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.protection = new fields.StringField({ required: false, blank: false, trim: true });\n // A Traveller suffers DM-1 to all checks per missing skill level in the required skill.\n schema.requireSkill = new fields.StringField({ required: false, blank: false });\n schema.requireSkillLevel = new fields.NumberField({ required: false, min: 0, integer: true });\n // Powered armour supports its own weight and is effectively weightless for encumbrance.\n schema.powered = new fields.BooleanField({ required: false, initial: false });\n schema.options = new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n );\n return schema;\n }\n}\n","import { PhysicalItemData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class ComputerData extends PhysicalItemData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.processing = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.processingUsed = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true });\n schema.overload = new fields.BooleanField({ required: false, initial: false });\n schema.options = new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n );\n return schema;\n }\n}\n","import { ItemBaseData } from \"./base-item.mjs\";\nconst fields = foundry.data.fields;\n\nexport default class ItemContainerData extends ItemBaseData {\n static defineSchema() {\n const schema = super.defineSchema();\n schema.onHand = new fields.BooleanField({ required: false, initial: false });\n schema.location = new fields.StringField({ required: false, blank: true, trim: true });\n schema.count = new fields.NumberField({ required: false, initial: 0, integer: true });\n schema.weight = new fields.NumberField({ required: false, initial: 0, integer: false });\n schema.weightless = new fields.BooleanField({ required: false, initial: false });\n schema.locked = new fields.BooleanField({ required: false, initial: false }); // GM only\n schema.lockedDescription = new fields.HTMLField({ required: false, blank: true, trim: true });\n return schema;\n }\n}\n","const fields = foundry.data.fields;\n\nexport default class SpeciesData extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n return {\n description: new fields.HTMLField({ required: false, blank: true, trim: true }),\n descriptionLong: new fields.HTMLField({ required: false, blank: true, trim: true }),\n traits: new fields.ArrayField(\n new fields.SchemaField({\n name: new fields.StringField({ required: true, blank: true, trim: true }),\n description: new fields.StringField({ required: false, blank: true, trim: true })\n })\n ),\n modifiers: new fields.ArrayField(\n new fields.SchemaField({\n characteristic: new fields.StringField({ required: false, blank: true, trim: true }),\n value: new fields.NumberField({ required: false, integer: true, nullable: true })\n })\n )\n };\n }\n}\n","export const MGT2 = {};\n\nMGT2.MetricRange = Object.freeze({\n meter: \"MGT2.MetricRange.meter\",\n kilometer: \"MGT2.MetricRange.kilometer\"\n});\n\nMGT2.MetricWeight = Object.freeze({\n kilogram: \"MGT2.MetricWeight.kilogram\",\n ton: \"MGT2.MetricWeight.ton\"\n});\n\nMGT2.Difficulty = Object.freeze({\n NA: \"MGT2.Difficulty.NA\",\n Simple: \"MGT2.Difficulty.Simple\",\n Easy: \"MGT2.Difficulty.Easy\",\n Routine: \"MGT2.Difficulty.Routine\",\n Average: \"MGT2.Difficulty.Average\",\n Difficult: \"MGT2.Difficulty.Difficult\",\n VeryDifficult: \"MGT2.Difficulty.VeryDifficult\",\n Formidable: \"MGT2.Difficulty.Formidable\",\n Impossible: \"MGT2.Difficulty.Impossible\"\n});\n\nMGT2.ItemSubType = Object.freeze({\n loot: \"MGT2.ItemSubType.loot\",\n software: \"MGT2.ItemSubType.software\"\n});\n\nMGT2.EquipmentSubType = Object.freeze({\n augment: \"MGT2.EquipmentSubType.augment\",\n clothing: \"MGT2.EquipmentSubType.clothing\",\n equipment: \"MGT2.EquipmentSubType.equipment\",\n trinket: \"MGT2.EquipmentSubType.trinket\",\n toolkit: \"MGT2.EquipmentSubType.toolkit\"\n});\n\nMGT2.TalentSubType = Object.freeze({\n skill: \"MGT2.TalentSubType.skill\",\n psionic: \"MGT2.TalentSubType.psionic\"\n});\n\nMGT2.DiseaseSubType = Object.freeze({\n disease: \"MGT2.DiseaseSubType.disease\",\n poison: \"MGT2.DiseaseSubType.poison\",\n wound: \"MGT2.DiseaseSubType.wound\"\n});\n\nMGT2.PsionicReach = Object.freeze({\n NA: \"MGT2.PsionicReach.NA\",\n Personal: \"MGT2.PsionicReach.Personal\",\n Close: \"MGT2.PsionicReach.Close\",\n Short: \"MGT2.PsionicReach.Short\",\n Medium: \"MGT2.PsionicReach.Medium\",\n Long: \"MGT2.PsionicReach.Long\",\n VeryLong: \"MGT2.PsionicReach.VeryLong\",\n Distant: \"MGT2.PsionicReach.Distant\",\n VeryDistant: \"MGT2.PsionicReach.VeryDistant\",\n Continental: \"MGT2.PsionicReach.Continental\",\n Planetary: \"MGT2.PsionicReach.Planetary\"\n});\n\nMGT2.ContactRelations = Object.freeze({\n Allie: \"MGT2.Contact.Relation.Allie\",\n Contact: \"MGT2.Contact.Relation.Contact\",\n Rival: \"MGT2.Contact.Relation.Rival\",\n Enemy: \"MGT2.Contact.Relation.Enemy\"\n});\n\nMGT2.ContactStatus = Object.freeze({\n Alive: \"MGT2.Contact.Status.Alive\",\n Unknow: \"MGT2.Contact.Status.Unknow\",\n Dead: \"MGT2.Contact.Status.Dead\"\n});\n\nMGT2.Attitudes = Object.freeze({\n Unknow: \"MGT2.Contact.Attitude.Unknow\",\n Hostile: \"MGT2.Contact.Attitude.Hostile\",\n Unfriendly: \"MGT2.Contact.Attitude.Unfriendly\",\n Indifferent: \"MGT2.Contact.Attitude.Indifferent\",\n Friendly: \"MGT2.Contact.Attitude.Friendly\",\n Helpful: \"MGT2.Contact.Attitude.Helpful\",\n Complicated: \"MGT2.Contact.Attitude.Complicated\"\n});\n\nMGT2.Characteristics = Object.freeze({\n strength: \"MGT2.Characteristics.strength.name\",\n dexterity: \"MGT2.Characteristics.dexterity.name\",\n endurance: \"MGT2.Characteristics.endurance.name\",\n intellect: \"MGT2.Characteristics.intellect.name\",\n education: \"MGT2.Characteristics.education.name\",\n social: \"MGT2.Characteristics.social.name\",\n morale: \"MGT2.Characteristics.morale.name\",\n luck: \"MGT2.Characteristics.luck.name\",\n sanity: \"MGT2.Characteristics.sanity.name\",\n charm: \"MGT2.Characteristics.charm.name\",\n psionic: \"MGT2.Characteristics.psionic.name\",\n other: \"MGT2.Characteristics.other.name\"\n});\n\nMGT2.InitiativeCharacteristics = Object.freeze({\n dexterity: \"MGT2.Characteristics.dexterity.name\",\n intellect: \"MGT2.Characteristics.intellect.name\"\n});\n\nMGT2.DamageCharacteristics = Object.freeze({\n strength: \"MGT2.Characteristics.strength.name\",\n dexterity: \"MGT2.Characteristics.dexterity.name\",\n endurance: \"MGT2.Characteristics.endurance.name\"\n});\n\nMGT2.TL = Object.freeze({\n NA: \"MGT2.TL.NA\",\n Unknow: \"MGT2.TL.Unknow\",\n NotIdentified: \"MGT2.TL.NotIdentified\",\n TL00: \"MGT2.TL.L00\",\n TL01: \"MGT2.TL.L01\",\n TL02: \"MGT2.TL.L02\",\n TL03: \"MGT2.TL.L03\",\n TL04: \"MGT2.TL.L04\",\n TL05: \"MGT2.TL.L05\",\n TL06: \"MGT2.TL.L06\",\n TL07: \"MGT2.TL.L07\",\n TL08: \"MGT2.TL.L08\",\n TL09: \"MGT2.TL.L09\",\n TL10: \"MGT2.TL.L10\",\n TL11: \"MGT2.TL.L11\",\n TL12: \"MGT2.TL.L12\",\n TL13: \"MGT2.TL.L13\",\n TL14: \"MGT2.TL.L14\",\n TL15: \"MGT2.TL.L15\"\n});\n\nMGT2.Timeframes = Object.freeze({\n Normal: \"MGT2.Timeframes.Normal\",\n Slower: \"MGT2.Timeframes.Slower\",\n Faster: \"MGT2.Timeframes.Faster\"\n});\n\nMGT2.SpeedBands = Object.freeze({\n Stoppped: \"MGT2.SpeedBands.Stoppped\",\n Idle: \"MGT2.SpeedBands.Idle\",\n VerySlow: \"MGT2.SpeedBands.VerySlow\",\n Slow: \"MGT2.SpeedBands.Slow\",\n Medium: \"MGT2.SpeedBands.Medium\",\n High: \"MGT2.SpeedBands.High\",\n Fast: \"MGT2.SpeedBands.Fast\",\n VeryFast: \"MGT2.SpeedBands.VeryFast\",\n Subsonic: \"MGT2.SpeedBands.Subsonic\",\n Hypersonic: \"MGT2.SpeedBands.Hypersonic\"\n});\n\nMGT2.Durations = Object.freeze({\n Seconds: \"MGT2.Durations.Seconds\",\n Minutes: \"MGT2.Durations.Minutes\",\n Heures: \"MGT2.Durations.Heures\"\n});\n\nMGT2.CreatureBehaviorType = Object.freeze({\n herbivore: \"MGT2.CreatureBehaviorType.herbivore\",\n carnivore: \"MGT2.CreatureBehaviorType.carnivore\",\n charognard: \"MGT2.CreatureBehaviorType.charognard\",\n omnivore: \"MGT2.CreatureBehaviorType.omnivore\"\n});\n\nMGT2.CreatureBehaviorSubType = Object.freeze({\n accumulateur: \"MGT2.CreatureBehaviorSubType.accumulateur\",\n brouteur: \"MGT2.CreatureBehaviorSubType.brouteur\",\n filtreur: \"MGT2.CreatureBehaviorSubType.filtreur\",\n intermittent: \"MGT2.CreatureBehaviorSubType.intermittent\",\n chasseur: \"MGT2.CreatureBehaviorSubType.chasseur\",\n detourneur: \"MGT2.CreatureBehaviorSubType.detourneux\",\n guetteur: \"MGT2.CreatureBehaviorSubType.guetteur\",\n mangeur: \"MGT2.CreatureBehaviorSubType.mangeur\",\n piegeur: \"MGT2.CreatureBehaviorSubType.piegeur\",\n intimidateur: \"MGT2.CreatureBehaviorSubType.intimidateur\",\n necrophage: \"MGT2.CreatureBehaviorSubType.necrophage\",\n reducteur: \"MGT2.CreatureBehaviorSubType.reducteur\",\n opportuniste: \"MGT2.CreatureBehaviorSubType.opportuniste\"\n});\n\nMGT2.HealingType = Object.freeze({\n FIRST_AID: \"MGT2.Healing.FirstAid\",\n SURGERY: \"MGT2.Healing.Surgery\",\n MEDICAL_CARE: \"MGT2.Healing.MedicalCare\",\n NATURAL_HEALING: \"MGT2.Healing.NaturalHealing\"\n});","export class ActorCharacter {\n static preCreate($this, data, options, user) {\n $this.updateSource({ prototypeToken: { actorLink: true } }) // QoL\n }\n\n static prepareData(actorData) {\n actorData.initiative = this.getInitiative(actorData);\n }\n\n static getInitiative($this) {\n let c = $this.system.config.initiative;\n return $this.system.characteristics[c].dm;\n }\n\n static async onDeleteDescendantDocuments($this, parent, collection, documents, ids, options, userId) {\n const toDeleteIds = [];\n const itemToUpdates = [];\n\n for (let d of documents) {\n if (d.type === \"container\") {\n // Delete content\n for (let item of $this.items) {\n if (item.system.hasOwnProperty(\"container\") && item.system.container.id === d._id)\n toDeleteIds.push(item._id);\n }\n } else if (d.type === \"computer\") {\n // Eject software\n for (let item of $this.items) {\n if (item.system.hasOwnProperty(\"software\") && item.system.computerId === d._id) {\n let clone = foundry.utils.deepClone(item);\n clone.system.software.computerId = \"\";\n itemToUpdates.push(clone);\n }\n }\n }\n }\n\n if (toDeleteIds.length > 0)\n await $this.deleteEmbeddedDocuments(\"Item\", toDeleteIds);\n\n if (itemToUpdates.length > 0)\n await $this.updateEmbeddedDocuments('Item', itemToUpdates);\n\n await this.recalculateWeight($this);\n }\n\n static async onUpdateDescendantDocuments($this, parent, collection, documents, changes, options, userId) {\n await this.calculEncumbranceAndWeight($this, parent, collection, documents, changes, options, userId);\n await this.calculComputers($this, parent, collection, documents, changes, options, userId);\n }\n\n static async calculComputers($this, parent, collection, documents, changes, options, userId) {\n let change;\n let i = 0;\n\n let recalculProcessing = false;\n for (let d of documents) {\n if (changes[i].hasOwnProperty(\"system\")) {\n change = changes[i];\n if (d.type === \"item\" && d.system.subType === \"software\") {\n if (change.system.software.hasOwnProperty(\"bandwidth\") || change.system.software.hasOwnProperty(\"computerId\")) {\n recalculProcessing = true;\n break;\n }\n }\n }\n }\n\n if (recalculProcessing) {\n let updatedComputers = [];\n let computerChanges = {};\n let computers = [];\n\n for (let item of $this.items) {\n if (item.system.trash === true) continue;\n if (item.type === \"computer\") {\n computers.push(item);\n computerChanges[item._id] = { processingUsed: 0 };\n }\n }\n\n for (let item of $this.items) {\n if (item.type !== \"item\" && item.system.subType !== \"software\") continue;\n\n if (item.system.software.hasOwnProperty(\"computerId\") && item.system.software.computerId !== \"\") {\n computerChanges[item.system.software.computerId].processingUsed += item.system.software.bandwidth;\n }\n }\n\n for (let computer of computers) {\n let newProcessingUsed = computerChanges[computer._id].processingUsed;\n if (computer.system.processingUsed !== newProcessingUsed) {\n const cloneComputer = foundry.utils.deepClone($this.getEmbeddedDocument(\"Item\", computer._id));\n cloneComputer.system.processingUsed = newProcessingUsed;\n cloneComputer.system.overload = cloneComputer.system.processingUsed > cloneComputer.system.processing;\n updatedComputers.push(cloneComputer);\n }\n }\n\n if (updatedComputers.length > 0) {\n await $this.updateEmbeddedDocuments('Item', updatedComputers);\n }\n }\n }\n\n static async calculEncumbranceAndWeight($this, parent, collection, documents, changes, options, userId) {\n let recalculEncumbrance = false;\n let recalculWeight = false;\n\n let change;\n let i = 0;\n for (let d of documents) {\n if (changes[i].hasOwnProperty(\"system\")) {\n change = changes[i];\n\n if (d.type === \"armor\" ||\n d.type === \"computer\" ||\n d.type === \"gear\" ||\n d.type === \"item\" ||\n d.type === \"weapon\") {\n if (change.system.hasOwnProperty(\"quantity\") ||\n change.system.hasOwnProperty(\"weight\") ||\n change.system.hasOwnProperty(\"weightless\") ||\n change.system.hasOwnProperty(\"container\") ||\n change.system.hasOwnProperty(\"equipped\") ||\n d.type === \"armor\") {\n recalculWeight = true;\n }\n } else if (d.type === \"talent\" && d.system.subType === \"skill\") {\n if (change.system.level || (change.system?.hasOwnProperty(\"skill\") && change.system?.skill.hasOwnProperty(\"reduceEncumbrance\"))) {\n recalculEncumbrance = true;\n }\n } else if (d.type === \"container\" && (change.system.hasOwnProperty(\"onHand\") || change.system.hasOwnProperty(\"weightless\"))) {\n recalculWeight = true;\n }\n }\n i++;\n }\n\n if (recalculEncumbrance || recalculWeight) {\n const updateData = {};\n\n this.recalculateArmor($this, updateData);\n\n if (recalculEncumbrance) {\n const str = $this.system.characteristics.strength.value;\n const end = $this.system.characteristics.endurance.value;\n let sumSkill = 0;\n $this.items.filter(x => x.type === \"talent\" && x.system.subType === \"skill\" && x.system.skill.reduceEncumbrance === true).forEach(x => sumSkill += x.system.level);\n let normal = str + end + sumSkill;\n let heavy = normal * 2;\n\n updateData[\"system.states.encumbrance\"] = $this.system.inventory.weight > normal;\n updateData[\"system.inventory.encumbrance.normal\"] = normal;\n updateData[\"system.inventory.encumbrance.heavy\"] = heavy;\n }\n\n if (recalculWeight)\n await this.recalculateWeight($this, updateData);\n else if (Object.keys(updateData).length > 0)\n await $this.update(updateData);\n }\n }\n\n static recalculateArmor($this, updateData) {\n if (updateData === null || updateData === undefined)\n updateData = {};\n\n let armor = 0;\n for (let item of $this.items) {\n if (item.type === \"armor\") {\n if (item.system.equipped === true && !isNaN(item.system.protection)) {\n armor += (+item.system.protection || 0);\n }\n }\n }\n\n updateData[\"system.inventory.armor\"] = armor;\n return updateData;\n }\n\n static async recalculateWeight($this, updateData) {\n\n if (updateData === null || updateData === undefined)\n updateData = {};\n\n let updatedContainers = [];\n let containerChanges = {};\n\n let containers = [];\n\n // List all containers\n for (let item of $this.items) {\n if (item.system.trash === true) continue;\n\n if (item.type === \"container\") {\n containers.push(item);\n containerChanges[item._id] = { count: 0, weight: 0 };\n }\n }\n\n let onHandWeight = 0;\n for (let item of $this.items) {\n if (item.type === \"container\") continue;\n if (item.system.hasOwnProperty(\"weightless\") && item.system.weightless === true) continue;\n\n let itemWeight = 0;\n if (item.system.hasOwnProperty(\"weight\")) {\n let itemQty = item.system.quantity;\n if (!isNaN(itemQty) && itemQty > 0) {\n itemWeight = item.system.weight;\n if (itemWeight > 0) {\n itemWeight *= itemQty;\n }\n }\n\n if (item.type === \"armor\") {\n if (item.system.equipped === true) {\n if (item.system.powered === true)\n itemWeight = 0;\n else\n itemWeight *= 0.25; // mass of armor that is being worn by 75% OPTIONAL\n }\n }\n\n if (item.system.container && item.system.container.id && item.system.container.id !== \"\") {\n // bad deleted container id\n if (containerChanges.hasOwnProperty(item.system.container.id)) {\n containerChanges[item.system.container.id].weight += Math.round(itemWeight * 10) / 10;\n containerChanges[item.system.container.id].count += item.system.quantity;\n }\n } else {\n onHandWeight += Math.round(itemWeight * 10) / 10;\n }\n }\n }\n\n // Check containers new weight\n for (let container of containers) {\n let newWeight = containerChanges[container._id].weight;\n let newCount = containerChanges[container._id].count;\n if (container.system.weight !== newWeight || container.system.count !== newCount) {\n updatedContainers.push({\n _id: container._id,\n \"system.weight\": newWeight,\n \"system.count\": newCount,\n });\n\n if (container.system.onHand === true &&\n (container.system.weight > 0 || container.system.weightless !== true)) {\n onHandWeight += container.system.weight;\n }\n }\n }\n\n updateData[\"system.inventory.weight\"] = onHandWeight;\n // Use the threshold from updateData if it was just recalculated (e.g. STR/END talent change),\n // otherwise fall back to the persisted value.\n const encumbranceThreshold = updateData[\"system.inventory.encumbrance.normal\"] ?? $this.system.inventory.encumbrance.normal;\n updateData[\"system.states.encumbrance\"] = onHandWeight > encumbranceThreshold;\n\n await $this.update(updateData);\n\n if (updatedContainers.length > 0) {\n await $this.updateEmbeddedDocuments('Item', updatedContainers);\n }\n }\n\n static async preUpdate($this, changed, options, user) {\n // Calc encumbrance\n\n const newStr = foundry.utils.getProperty(changed, \"system.characteristics.strength.value\") ?? $this.system.characteristics.strength.value;\n const newEnd = foundry.utils.getProperty(changed, \"system.characteristics.endurance.value\") ?? $this.system.characteristics.endurance.value;\n if ((newStr !== $this.system.characteristics.strength.value) || (newEnd !== $this.system.characteristics.endurance.value)) {\n let sumSkill = 0;\n $this.items.filter(x => x.type === \"talent\" && x.system.subType === \"skill\" && x.system.skill.reduceEncumbrance === true).forEach(x => sumSkill += x.system.level);\n let normal = newStr + newEnd + sumSkill;\n let heavy = normal * 2;\n foundry.utils.setProperty(changed, \"system.inventory.encumbrance.normal\", normal);\n foundry.utils.setProperty(changed, \"system.inventory.encumbrance.heavy\", heavy);\n // Also update the encumbrance state flag against the new threshold\n foundry.utils.setProperty(changed, \"system.states.encumbrance\", $this.system.inventory.weight > normal);\n }\n\n //console.log(foundry.utils.getProperty(changed, \"system.characteristics.strength.value\"));\n const characteristicModified = this.computeCharacteristics(changed);\n const strengthValue = foundry.utils.getProperty(changed, \"system.characteristics.strength.value\") ?? $this.system.characteristics.strength.value;\n const strengthMax = foundry.utils.getProperty(changed, \"system.characteristics.strength.max\") ?? $this.system.characteristics.strength.max;\n const dexterityValue = foundry.utils.getProperty(changed, \"system.characteristics.dexterity.value\") ?? $this.system.characteristics.dexterity.value;\n const dexterityMax = foundry.utils.getProperty(changed, \"system.characteristics.dexterity.max\") ?? $this.system.characteristics.dexterity.max;\n const enduranceValue = foundry.utils.getProperty(changed, \"system.characteristics.endurance.value\") ?? $this.system.characteristics.endurance.value;\n const enduranceMax = foundry.utils.getProperty(changed, \"system.characteristics.endurance.max\") ?? $this.system.characteristics.endurance.max;\n const lifeValue = strengthValue + dexterityValue + enduranceValue;\n const lifeMax = strengthMax + dexterityMax + enduranceMax;\n\n if ($this.system.life.value !== lifeValue)\n foundry.utils.setProperty(changed, \"system.life.value\", lifeValue);\n if ($this.system.life.max !== lifeMax)\n foundry.utils.setProperty(changed, \"system.life.max\", lifeMax);\n\n if (characteristicModified && $this.system.personal.ucp === undefined || $this.system.personal.ucp === \"\") {\n // calc\n\n }\n //}\n\n // Apply changes in Actor size to Token width/height\n // if ( \"size\" in (this.system.traits || {}) ) {\n // const newSize = foundry.utils.getProperty(changed, \"system.traits.size\");\n // if ( newSize && (newSize !== this.system.traits?.size) ) {\n // let size = CONFIG.DND5E.tokenSizes[newSize];\n // if ( !foundry.utils.hasProperty(changed, \"prototypeToken.width\") ) {\n // changed.prototypeToken ||= {};\n // changed.prototypeToken.height = size;\n // changed.prototypeToken.width = size;\n // }\n // }\n // }\n }\n\n // static applyHealing($this, amount) {\n // if (isNaN(amount) || amount === 0) return;\n\n // const strength = $this.system.characteristics.strength;\n // const dexterity = $this.system.characteristics.dexterity;\n // const endurance = $this.system.characteristics.endurance;\n\n // const data = {\n // strength: { value: strength.value },\n // dexterity: { value: dexterity.value },\n // endurance: { value: endurance.value }\n // };\n\n\n\n // $this.update({ system: { characteristics: data } });\n // }\n\n static async applyDamage($this, amount, { ignoreArmor = false, ap = 0, stun = false } = {}) {\n if (isNaN(amount) || amount === 0) return { incapRounds: 0 };\n const rank1 = $this.system.config.damages.rank1;\n const rank2 = $this.system.config.damages.rank2;\n const rank3 = $this.system.config.damages.rank3;\n\n if (amount < 0) amount = Math.abs(amount);\n\n if (!ignoreArmor) {\n const rawArmor = $this.system.inventory?.armor ?? 0;\n const armorValue = Math.max(0, rawArmor - ap);\n amount = Math.max(0, amount - armorValue);\n if (amount === 0) return { incapRounds: 0 };\n }\n\n // ── Stun / Incapacitating: only deduct from endurance (rank3) ─────────\n if (stun) {\n const endKey = rank3; // \"endurance\" by default\n const prevEnd = $this.system.characteristics[endKey].value;\n const newEnd = Math.max(0, prevEnd - amount);\n const incapRounds = newEnd === 0 ? Math.max(0, amount - prevEnd) : 0;\n await $this.update({\n system: { characteristics: { [endKey]: { value: newEnd, dm: this.getModifier(newEnd) } } }\n });\n return { incapRounds };\n }\n\n // ── Normal damage cascade: rank1 → rank2 → rank3 ────────────────────\n const data = {};\n data[rank1] = { value: $this.system.characteristics[rank1].value };\n data[rank2] = { value: $this.system.characteristics[rank2].value };\n data[rank3] = { value: $this.system.characteristics[rank3].value };\n\n for (const [key, rank] of Object.entries(data)) {\n if (rank.value > 0) {\n if (rank.value >= amount) {\n rank.value -= amount;\n amount = 0;\n } else {\n amount -= rank.value;\n rank.value = 0;\n }\n rank.dm = this.getModifier(rank.value);\n if (amount <= 0) break;\n }\n }\n\n await $this.update({ system: { characteristics: data } });\n return { incapRounds: 0 };\n }\n\n static applyHealing($this, amount, type) {\n if (isNaN(amount) || amount === 0) return;\n\n const rank1 = $this.system.config.damages.rank1;\n const rank2 = $this.system.config.damages.rank2;\n const rank3 = $this.system.config.damages.rank3;\n\n // Data to restore (reverse cascade: END → DEX → STR)\n const data = {};\n const rankOrder = [rank3, rank2, rank1]; // Reverse order for healing\n const maxValues = {\n [rank1]: $this.system.characteristics[rank1].max,\n [rank2]: $this.system.characteristics[rank2].max,\n [rank3]: $this.system.characteristics[rank3].max\n };\n\n if (amount < 0) amount = Math.abs(amount);\n\n // Distribute healing from lowest rank first (END → DEX → STR typically)\n for (const rank of rankOrder) {\n const current = $this.system.characteristics[rank].value;\n const max = maxValues[rank];\n\n if (current < max && amount > 0) {\n const canRestore = max - current;\n const restore = Math.min(amount, canRestore);\n \n if (!data[rank]) {\n data[rank] = { value: current };\n }\n data[rank].value += restore;\n data[rank].dm = this.getModifier(data[rank].value);\n amount -= restore;\n }\n }\n\n // Only update if something was restored\n if (Object.keys(data).length > 0) {\n return $this.update({ system: { characteristics: data } });\n }\n }\n\n static getContainers($this) {\n const containers = [];\n for (let item of $this.items) {\n if (item.type == \"container\") {\n containers.push(item);\n }\n }\n\n containers.sort(this.compareByName);\n\n return containers;\n }\n\n static getComputers($this) {\n const containers = [];\n for (let item of $this.items) {\n if (item.type == \"computer\") {\n containers.push(item);\n }\n }\n\n containers.sort(this.compareByName);\n\n return containers;\n }\n\n static getSkills($this) {\n const skills = [];\n for (let item of $this.items) {\n if (item.type === \"talent\" && item.system.subType === \"skill\") {\n skills.push(item);\n }\n }\n\n skills.sort(this.compareByName);\n\n return skills;\n }\n\n static computeCharacteristics(changed) {\n let modified = this.computeCharacteristic(changed, \"strength\");\n\n if (this.computeCharacteristic(changed, \"dexterity\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"endurance\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"intellect\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"education\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"social\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"morale\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"luck\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"sanity\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"charm\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"psionic\") && !modified) modified = true;\n if (this.computeCharacteristic(changed, \"other\") && !modified) modified = true;\n\n return modified;\n }\n\n static computeCharacteristic(changed, name) {\n //if (isNaN(c.value) || c.value <= 0) c.value = 0;\n //c.dm = this._getModifier(c.value)\n const path = `system.characteristics.${name}`;\n const newValue = foundry.utils.getProperty(changed, path + \".value\");// || this.system.characteristics[name].value;\n if (newValue) {\n const dm = this.getModifier(newValue);\n foundry.utils.setProperty(changed, path + \".dm\", dm);\n return true;\n }\n\n return false;\n }\n\n static getModifier(value) {\n if (isNaN(value) || value <= 0) return -3;\n if (value >= 1 && value <= 2) return -2;\n if (value >= 3 && value <= 5) return -1;\n if (value >= 6 && value <= 8) return 0;\n if (value >= 9 && value <= 11) return 1;\n if (value >= 12 && value <= 14) return 2;\n\n return 3;\n }\n\n static compareByName(a, b) {\n if (!a.hasOwnProperty(\"name\") || !b.hasOwnProperty(\"name\")) {\n return 0;\n }\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n }\n}","import { ActorCharacter } from \"./character.js\";\n\nexport class MGT2Combatant extends Combatant {\n \n}\n\nexport class TravellerActor extends Actor {\n\n\n prepareDerivedData() {\n if (this.type === \"character\") {\n this.system.initiative = ActorCharacter.getInitiative(this);\n }\n }\n\n async _preCreate(data, options, user) {\n if ( (await super._preCreate(data, options, user)) === false ) return false;\n \n if (this.type === \"character\") {\n ActorCharacter.preCreate(this, data, options, user);\n }\n }\n\n async _onDeleteDescendantDocuments(parent, collection, documents, ids, options, userId) {\n await super._onDeleteDescendantDocuments(parent, collection, documents, ids, options, userId);\n\n if (this.type === \"character\") {\n await ActorCharacter.onDeleteDescendantDocuments(this, parent, collection, documents, ids, options, userId);\n }\n }\n\n async _onUpdateDescendantDocuments(parent, collection, documents, changes, options, userId) {\n super._onUpdateDescendantDocuments(parent, collection, documents, changes, options, userId);\n //console.log(\"_onUpdateDescendantDocuments\");\n\n if (this.type === \"character\") {\n await ActorCharacter.onUpdateDescendantDocuments(this, parent, collection, documents, changes, options, userId);\n }\n }\n\n async _preUpdate(changed, options, user) {\n if ((await super._preUpdate(changed, options, user)) === false) return false;\n\n if (this.type === \"character\") {\n await ActorCharacter.preUpdate(this, changed, options, user);\n }\n }\n\n getInitiative($this) {\n if (this.type === \"character\") {\n return ActorCharacter.getInitiative(this);\n }\n }\n\n applyDamage(amount, { ignoreArmor = false, ap = 0, stun = false } = {}) {\n if (this.type === \"character\") {\n return ActorCharacter.applyDamage(this, amount, { ignoreArmor, ap, stun });\n } else if (this.type === \"creature\") {\n if (isNaN(amount) || amount === 0) return Promise.resolve({ incapRounds: 0 });\n if (amount < 0) amount = Math.abs(amount);\n const rawArmor = ignoreArmor ? 0 : (this.system.armor ?? 0);\n const armorValue = Math.max(0, rawArmor - ap);\n const effective = Math.max(0, amount - armorValue);\n if (effective === 0) return Promise.resolve({ incapRounds: 0 });\n const newValue = Math.max(0, (this.system.life.value ?? 0) - effective);\n return this.update({ \"system.life.value\": newValue }).then(() => ({ incapRounds: 0 }));\n }\n }\n\n applyHealing(amount) {\n if (this.type === \"character\") {\n return ActorCharacter.applyHealing(this, amount);\n } else if (this.type === \"creature\") {\n if (isNaN(amount) || amount === 0) return;\n if (amount < 0) amount = Math.abs(amount);\n const maxValue = this.system.life.max ?? 0;\n const current = this.system.life.value ?? 0;\n const newValue = Math.min(current + amount, maxValue);\n if (newValue !== current) {\n return this.update({ \"system.life.value\": newValue });\n }\n }\n }\n\n getContainers() {\n if (this.type === \"character\") {\n return ActorCharacter.getContainers(this);\n }\n\n return [];\n }\n\n getComputers() {\n if (this.type === \"character\") {\n return ActorCharacter.getComputers(this);\n }\n\n return [];\n }\n\n getSkills() {\n if (this.type === \"character\") {\n return ActorCharacter.getSkills(this);\n }\n\n return [];\n }\n\n async recalculateWeight() {\n if (this.type === \"character\") {\n return ActorCharacter.recalculateWeight(this);\n }\n }\n\n}\n","export class TravellerItem extends Item {\n\n /** @inheritdoc */\n prepareDerivedData() {\n super.prepareDerivedData();\n\n }\n\n async _preUpdate(changed, options, user) {\n if ((await super._preUpdate(changed, options, user)) === false) return false;\n\n if (this.type === \"computer\") {\n // Overload\n const newProcessing = foundry.utils.getProperty(changed, \"system.processing\") ?? this.system.processing;\n if (newProcessing !== this.system.processing) {\n let overload = this.system.processingUsed > newProcessing;\n foundry.utils.setProperty(changed, \"system.overload\", overload);\n }\n }\n\n // Qty max 1\n if (this.type === \"computer\" || this.type === \"container\" || (this.type === \"item\" && this.system.subType === \"software\")) {\n const newQty = foundry.utils.getProperty(changed, \"system.quantity\") ?? this.system.quantity;\n if (newQty !== this.system.quantity && newQty > 1) {\n foundry.utils.setProperty(changed, \"system.quantity\", 1);\n }\n }\n\n // No Weight\n if (this.type === \"item\" && this.system.subType === \"software\") {\n const newWeight = foundry.utils.getProperty(changed, \"system.weight\") ?? this.system.weight;\n if (newWeight !== this.system.weight && newWeight > 0) {\n foundry.utils.setProperty(changed, \"system.weight\", 0);\n }\n }\n }\n\n getRollDisplay() {\n if (this.type === \"talent\") {\n if (this.system.subType === \"skill\") {\n let label;\n if (this.system.skill.speciality !== \"\" && this.system.skill.speciality !== undefined) {\n label = `${this.name} (${this.system.skill.speciality})`;\n } else {\n label = this.name;\n }\n\n if (this.system.level > 0)\n label += ` (+${this.system.level})`;\n else if (this.system.level < 0)\n label += ` (${this.system.level})`;\n\n return label;\n } else if (this.system.subType === \"psionic\") {\n\n }\n }\n\n return name;\n }\n}\n","const { HandlebarsApplicationMixin } = foundry.applications.api;\n\nexport default class MGT2ActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) {\n\n static SHEET_MODES = { EDIT: 0, PLAY: 1 }\n\n constructor(options = {}) {\n super(options);\n this._sheetMode = this.constructor.SHEET_MODES.PLAY;\n }\n\n /** @override */\n static DEFAULT_OPTIONS = {\n classes: [\"mgt2\", \"sheet\", \"actor\"],\n position: {\n width: 780,\n },\n form: {\n submitOnChange: true,\n closeOnSubmit: false,\n },\n window: {\n resizable: true,\n },\n dragDrop: [{ dragSelector: \".drag-item-list\", dropSelector: \".drop-item-list\" }],\n actions: {\n toggleSheet: MGT2ActorSheet.#onToggleSheet,\n },\n }\n\n get isPlayMode() {\n if (this._sheetMode === undefined) this._sheetMode = this.constructor.SHEET_MODES.PLAY;\n return this._sheetMode === this.constructor.SHEET_MODES.PLAY;\n }\n\n get isEditMode() {\n if (this._sheetMode === undefined) this._sheetMode = this.constructor.SHEET_MODES.PLAY;\n return this._sheetMode === this.constructor.SHEET_MODES.EDIT;\n }\n\n tabGroups = { sidebar: \"health\" }\n\n /** @override */\n async _prepareContext() {\n const base = await super._prepareContext();\n const actor = this.document;\n return {\n ...base,\n actor: actor,\n // Flat shorthands for template backward-compat (AppV1 style)\n name: actor.name,\n img: actor.img,\n cssClass: this.isEditable ? \"editable\" : \"locked\",\n system: actor.system,\n source: actor.toObject(),\n fields: actor.schema.fields,\n systemFields: actor.system.schema.fields,\n isEditable: this.isEditable,\n isEditMode: this.isEditMode,\n isPlayMode: this.isPlayMode,\n isGM: game.user.isGM,\n config: CONFIG.MGT2,\n };\n }\n\n /** @override */\n _onRender(context, options) {\n super._onRender(context, options);\n // Inject theme class dynamically (can't use game.settings in static DEFAULT_OPTIONS)\n const theme = game.settings.get(\"mgt2\", \"theme\");\n if (theme) this.element.classList.add(theme);\n this._activateTabGroups();\n }\n\n _activateTabGroups() {\n for (const [group, activeTab] of Object.entries(this.tabGroups)) {\n const nav = this.element.querySelector(`nav[data-group=\"${group}\"]`);\n if (!nav) continue;\n\n nav.querySelectorAll('[data-tab]').forEach(link => {\n link.classList.toggle('active', link.dataset.tab === activeTab);\n link.addEventListener('click', event => {\n event.preventDefault();\n this.tabGroups[group] = link.dataset.tab;\n this.render();\n });\n });\n\n this.element.querySelectorAll(`[data-group=\"${group}\"][data-tab]`).forEach(content => {\n content.classList.toggle('active', content.dataset.tab === activeTab);\n });\n }\n }\n\n /** @override */\n _canDragDrop(selector) {\n return this.isEditable;\n }\n\n static async #onToggleSheet(event) {\n event.preventDefault();\n this._sheetMode = this.isPlayMode\n ? this.constructor.SHEET_MODES.EDIT\n : this.constructor.SHEET_MODES.PLAY;\n this.render();\n }\n}\n","export class MGT2Helper {\n static POUNDS_CONVERT = 2.20462262185;\n\n static decimalSeparator;\n static badDecimalSeparator;\n\n static {\n this.decimalSeparator = Number(1.1).toLocaleString().charAt(1);\n this.badDecimalSeparator = (this.decimalSeparator === \".\" ? \",\" : \".\");\n }\n\n static format = function() {\n var s = arguments[0];\n for (var i = 0; i < arguments.length - 1; i++) { \n var reg = new RegExp(\"\\\\{\" + i + \"\\\\}\", \"gm\"); \n s = s.replace(reg, arguments[i + 1]);\n }\n return s;\n }\n\n static hasValue(object, property) {\n return object !== undefined && object.hasOwnProperty(property) && object[property] !== null && object[property] !== undefined && object[property] !== \"\";\n }\n\n static getItemsWeight(items) {\n let weight = 0;\n for (let i of items) {\n let item = i.hasOwnProperty(\"system\") ? i.system : i;\n if (item.hasOwnProperty(\"weightless\") && item.weightless === true) {\n continue;\n }\n\n if (item.hasOwnProperty(\"weight\")) {\n let itemQty = item.quantity\n if (!isNaN(itemQty) && itemQty > 0) {\n let itemWeight = item.weight;\n if (itemWeight > 0) {\n weight += itemWeight * itemQty;\n }\n }\n }\n }\n return weight;\n }\n\n static generateUID() {\n let result = '';\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n\n for (let i = 0; i < 36; i++) {\n const randomIndex = Math.floor(Math.random() * characters.length);\n result += characters.charAt(randomIndex);\n if (i === 8 || i === 12 || i === 16 || i === 20)\n result += \"-\";\n }\n\n return result;\n }\n\n static compareByName(a, b) {\n if (!a.hasOwnProperty(\"name\") || !b.hasOwnProperty(\"name\")) {\n return 0;\n }\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n }\n\n static getDisplayDM(dm) {\n if (dm === 0) return \" (0)\";\n if (dm > 0) return ` (+${dm})`;\n if (dm < 0) return ` (${dm})`;\n return \"\";\n }\n static getFormulaDM(dm) {\n if (dm === 0) return \"+0\";\n if (dm > 0) return `+${dm}`;\n if (dm < 0) return `${dm}`;\n return \"\";\n }\n\n static getDiceResults(roll) {\n const results = [];\n for (const die of roll.dice) {\n results.push(die.results);\n }\n return results.flat(2);\n }\n\n static getDiceTotal(roll) {\n let total = 0;\n for (const die of roll.dice) {\n total += die.total;\n }\n return total;\n }\n\n static getDifficultyValue(difficulty) {\n switch(difficulty) {\n case \"Simple\": return 2;\n case \"Easy\": return 4;\n case \"Routine\": return 6;\n case \"Average\": return 8;\n case \"Difficult\": return 10;\n case \"VeryDifficult\": return 12;\n case \"Formidable\": return 14;\n case \"Impossible\": return 16;\n default:\n return 0;\n }\n }\n\n static getDifficultyDisplay(difficulty) {\n const key = `MGT2.Difficulty.${difficulty}`;\n const label = game.i18n.localize(key);\n return label !== key ? label : null;\n }\n\n static getRangeDisplay(range) {\n let value = Number(range.value);\n\n if (isNaN(value)) return null;\n\n let label;\n //if (game.settings.get(\"mgt2\", \"useDistanceMetric\") === true) {\n if (range.unit !== null && range.unit !== undefined && range.unit !== \"\")\n label = game.i18n.localize(`MGT2.MetricRange.${range.unit}`).toLowerCase();\n else\n label = \"\";\n //} else {\n // TODO\n //}\n\n return `${value}${label}`;\n }\n\n static getWeightLabel() {\n //const label = game.settings.get(\"mgt2\", \"useWeightMetric\") === true ? \"MGT2.MetricSystem.Weight.kg\" : \"MGT2.ImperialSystem.Weight.lb\";\n //return game.i18n.localize(label);\n return game.i18n.localize(\"MGT2.MetricSystem.Weight.kg\");\n }\n\n static getDistanceLabel() {\n //const label = game.settings.get(\"mgt2\", \"useDistanceMetric\") === true ? \"MGT2.MetricSystem.Distance.km\" : \"MGT2.ImperialSystem.Distance.mi\";\n //return game.i18n.localize(label);\n return game.i18n.localize(\"MGT2.MetricSystem.Distance.km\");\n }\n\n static getIntegerFromInput(data) {\n return Math.trunc(this.getNumberFromInput(data));\n }\n\n static getNumberFromInput(data) {\n if (data === undefined || data === null) return 0;\n\n if (typeof data === \"string\") {\n let converted = Number(data.replace(/\\s+/g, '').replace(this.badDecimalSeparator, this.decimalSeparator).trim());\n if (isNaN(converted))\n return 0;\n\n return converted;\n }\n\n let converted = Number(data);\n\n if (isNaN(converted))\n return 0;\n\n return converted;\n }\n\n static convertWeightForDisplay(weight) {\n //if (game.settings.get(\"mgt2\", \"useWeightMetric\") === true || weight === 0)\n return weight;\n\n // Metric to Imperial\n //const pounds = weight * this.POUNDS_CONVERT;\n //return Math.round(pounds * 10) / 10;\n }\n\n static convertWeightFromInput(weight) {\n //if (game.settings.get(\"mgt2\", \"useWeightMetric\") === true || weight === 0)\n return Math.round(weight * 10) / 10;\n\n // Imperial to Metric\n //const kg = this.POUNDS_CONVERT / weight;\n //return Math.round(kg * 10) / 10;\n }\n\n static getDataFromDropEvent(event) {\n let data;\n try {\n return JSON.parse(event.dataTransfer?.getData(\"text/plain\"));\n } catch (err) {\n return false;\n }\n\n //if ( data.type !== \"Item\" ) return false;\n //const item = await Item.implementation.fromDropData(data);\n }\n\n static async getItemDataFromDropData(dropData) {\n //console.log(\"getItemDataFromDropData\");\n let item;\n if (game.modules.get(\"monks-enhanced-journal\")?.active && dropData.itemId && dropData.uuid.includes(\"JournalEntry\")) {\n const journalEntry = await fromUuid(dropData.uuid);\n } else if (dropData.hasOwnProperty(\"uuid\")) {\n item = await fromUuid(dropData.uuid);\n } else {\n let uuid = `${dropData.type}.${dropData.data._id}`;\n item = await fromUuid(uuid);\n }\n\n if (!item) {\n throw new Error(game.i18n.localize(\"Errors.CouldNotFindItem\").replace(\"_ITEM_ID_\", dropData.uuid));\n }\n if (item.pack) {\n const pack = game.packs.get(item.pack);\n item = await pack?.getDocument(item._id);\n }\n return deepClone(item);\n }\n}","const { DialogV2 } = foundry.applications.api;\nconst { renderTemplate } = foundry.applications.handlebars;\nconst { FormDataExtended } = foundry.applications.ux;\n\nexport class RollPromptHelper {\n\n static async roll(options) {\n // Backward compat: allow (actor, options) or just (options)\n if (options.rollTypeName || options.characteristics || options.skill !== undefined) {\n // Normal call with options\n } else {\n // Called with (actor, options)\n options = arguments[1] || options;\n }\n\n const htmlContent = await renderTemplate('systems/mgt2/templates/roll-prompt.html', {\n config: CONFIG.MGT2,\n // Character-mode fields\n characteristics: options.characteristics ?? [],\n characteristic: options.characteristic ?? \"\",\n skills: options.skills ?? [],\n skill: options.skill ?? \"\",\n fatigue: options.fatigue ?? false,\n encumbrance: options.encumbrance ?? false,\n difficulty: options.difficulty ?? \"Average\",\n timeframe: options.timeframe ?? \"Normal\",\n customDM: options.customDM ?? \"0\",\n rollMode: options.rollMode ?? \"publicroll\",\n // Creature-mode flags\n isCreature: options.isCreature ?? false,\n creatureSkills: options.creatureSkills ?? [],\n selectedSkillIndex: options.selectedSkillIndex ?? -1,\n showSkillSelector: options.showSkillSelector ?? false,\n skillName: options.skillName ?? \"\",\n skillLevel: options.skillLevel ?? 0,\n // Healing fields\n showHeal: options.showHeal ?? false,\n healType: options.healType ?? null,\n // Ranged/Melee weapon flags\n isRanged: options.isRanged ?? false,\n isMelee: options.isMelee ?? false,\n isAttack: (options.isRanged ?? false) || (options.isMelee ?? false),\n autoLevel: options.autoLevel ?? 0,\n hasScope: options.scope ?? false,\n hasZeroG: options.zeroG ?? false,\n });\n\n return await DialogV2.wait({\n window: { title: options.title ?? options.rollTypeName ?? game.i18n.localize(\"MGT2.RollPrompt.Roll\") },\n classes: [\"mgt2-roll-dialog\"],\n content: htmlContent,\n rejectClose: false,\n buttons: [\n {\n action: \"boon\",\n label: game.i18n.localize(\"MGT2.RollPrompt.Boon\"),\n callback: (event, button, dialog) => {\n const formData = new FormDataExtended(dialog.element.querySelector('form')).object;\n formData.diceModifier = \"dl\";\n return formData;\n }\n },\n {\n action: \"submit\",\n label: game.i18n.localize(\"MGT2.RollPrompt.Roll\"),\n icon: '',\n default: true,\n callback: (event, button, dialog) => {\n return new FormDataExtended(dialog.element.querySelector('form')).object;\n }\n },\n {\n action: \"bane\",\n label: game.i18n.localize(\"MGT2.RollPrompt.Bane\"),\n callback: (event, button, dialog) => {\n const formData = new FormDataExtended(dialog.element.querySelector('form')).object;\n formData.diceModifier = \"dh\";\n return formData;\n }\n }\n ]\n });\n }\n}\n","const { DialogV2 } = foundry.applications.api;\nconst { renderTemplate } = foundry.applications.handlebars;\nconst { FormDataExtended } = foundry.applications.ux;\n\nasync function _dialogWithForm(title, templatePath, templateData) {\n const htmlContent = await renderTemplate(templatePath, templateData);\n const theme = game.settings.get(\"mgt2\", \"theme\");\n return await DialogV2.wait({\n window: { title },\n content: htmlContent,\n rejectClose: false,\n buttons: [\n {\n action: \"submit\",\n label: game.i18n.localize(\"MGT2.Save\"),\n icon: '',\n default: true,\n callback: (event, button, dialog) => {\n return new FormDataExtended(dialog.element.querySelector('form')).object;\n }\n }\n ]\n });\n}\n\nexport class CharacterPrompts {\n\n static async openConfig(system) {\n return _dialogWithForm(\n \"Configuration\",\n \"systems/mgt2/templates/actors/actor-config-sheet.html\",\n { config: CONFIG.MGT2, system }\n );\n }\n\n static async openCharacteristic(name, show, showMax, showAll = false) {\n return _dialogWithForm(\n \"Configuration: \" + name,\n \"systems/mgt2/templates/actors/actor-config-characteristic-sheet.html\",\n { name, show, showMax, showAll }\n );\n }\n\n static async openTraitEdit(data) {\n const title = data.name ?? game.i18n.localize(\"MGT2.Actor.EditTrait\");\n return _dialogWithForm(\n title,\n \"systems/mgt2/templates/actors/trait-sheet.html\",\n { config: CONFIG.MGT2, data }\n );\n }\n\n static async openEditorFullView(title, html) {\n const safeTitle = title || game.i18n.localize(\"MGT2.Actor.Species\") || \"Species\";\n const htmlContent = await renderTemplate(\"systems/mgt2/templates/editor-fullview.html\", {\n config: CONFIG.MGT2,\n html: html ?? \"\"\n });\n const theme = game.settings.get(\"mgt2\", \"theme\");\n await DialogV2.wait({\n window: { title: safeTitle },\n content: htmlContent,\n rejectClose: false,\n buttons: [\n {\n action: \"close\",\n label: game.i18n.localize(\"MGT2.Close\") || \"Fermer\",\n default: true,\n callback: () => null\n }\n ]\n });\n }\n\n static async openHealingDays() {\n return await DialogV2.wait({\n window: { \n title: game.i18n.localize(\"MGT2.Healing.Title\")\n },\n classes: [\"mgt2-roll-dialog\"],\n content: `\n
\n
\n
\n \n \n
\n
\n
\n `,\n rejectClose: false,\n buttons: [\n {\n action: \"submit\",\n label: game.i18n.localize(\"MGT2.Save\"),\n icon: '',\n default: true,\n callback: (event, button, dialog) => {\n return new FormDataExtended(dialog.element.querySelector('form')).object;\n }\n }\n ]\n });\n }\n}","import MGT2ActorSheet from \"./base-actor-sheet.mjs\";\nimport { MGT2 } from \"../../config.js\";\nimport { MGT2Helper } from \"../../helper.js\";\nimport { RollPromptHelper } from \"../../roll-prompt.js\";\nimport { CharacterPrompts } from \"../../actors/character-prompts.js\";\nimport WeaponData from \"../../models/items/weapon.mjs\";\n\nexport default class TravellerCharacterSheet extends MGT2ActorSheet {\n\n /** @override */\n static DEFAULT_OPTIONS = {\n ...super.DEFAULT_OPTIONS,\n classes: [...super.DEFAULT_OPTIONS.classes, \"character\", \"nopad\"],\n window: {\n ...super.DEFAULT_OPTIONS.window,\n title: \"TYPES.Actor.character\",\n },\n actions: {\n ...super.DEFAULT_OPTIONS.actions,\n createItem: TravellerCharacterSheet.#onCreateItem,\n editItem: TravellerCharacterSheet.#onEditItem,\n deleteItem: TravellerCharacterSheet.#onDeleteItem,\n equipItem: TravellerCharacterSheet.#onEquipItem,\n itemStorageIn: TravellerCharacterSheet.#onItemStorageIn,\n itemStorageOut: TravellerCharacterSheet.#onItemStorageOut,\n softwareEject: TravellerCharacterSheet.#onSoftwareEject,\n createContainer: TravellerCharacterSheet.#onContainerCreate,\n editContainer: TravellerCharacterSheet.#onContainerEdit,\n deleteContainer: TravellerCharacterSheet.#onContainerDelete,\n roll: TravellerCharacterSheet.#onRoll,\n openConfig: TravellerCharacterSheet.#onOpenConfig,\n openCharacteristic: TravellerCharacterSheet.#onOpenCharacteristic,\n traitCreate: TravellerCharacterSheet.#onTraitCreate,\n traitEdit: TravellerCharacterSheet.#onTraitEdit,\n traitDelete: TravellerCharacterSheet.#onTraitDelete,\n openEditor: TravellerCharacterSheet.#onOpenEditor,\n heal: TravellerCharacterSheet.#onHeal,\n },\n }\n\n /** @override */\n static PARTS = {\n sheet: {\n template: \"systems/mgt2/templates/actors/actor-sheet.html\",\n },\n }\n\n /** @override */\n tabGroups = {\n sidebar: \"inventory\",\n characteristics: \"core\",\n inventory: \"onhand\",\n }\n\n /** @override */\n async _prepareContext() {\n const context = await super._prepareContext();\n const actor = this.document;\n const enrich = (html) => foundry.applications.ux.TextEditor.implementation.enrichHTML(html ?? \"\", { async: true });\n\n context.enrichedBiography = await enrich(actor.system.biography);\n context.enrichedNotes = await enrich(actor.system.notes);\n context.enrichedFinanceNotes = await enrich(actor.system.finance?.notes);\n context.settings = {\n weightUnit: \"kg\",\n usePronouns: game.settings.get(\"mgt2\", \"usePronouns\"),\n useGender: game.settings.get(\"mgt2\", \"useGender\"),\n showLife: game.settings.get(\"mgt2\", \"showLife\"),\n };\n context.isGM = game.user.isGM;\n context.showTrash = false;\n context.initiative = actor.getInitiative();\n\n this._prepareCharacterItems(context);\n\n return context;\n }\n\n _prepareCharacterItems(context) {\n const actor = this.document;\n const settings = context.settings;\n const items = actor.items;\n\n const weapons = [], armors = [], augments = [], computers = [], softwares = [];\n const miscItems = [], equipments = [], containerItems = [], careers = [];\n const skills = [], psionics = [], diseases = [], wounds = [], contacts = [];\n const actorContainers = [];\n\n for (let i of items) {\n if (i.type === \"container\") {\n actorContainers.push(i);\n } else if (i.type === \"computer\") {\n computers.push(i);\n i._subItems = [];\n if (i.system.overload === true)\n i._overloadClass = \"computer-overload\";\n }\n }\n\n actorContainers.sort(MGT2Helper.compareByName);\n\n const containers = [{ name: \"(tous)\", _id: \"\" }].concat(actorContainers);\n const containerIndex = new Map();\n\n for (let c of actorContainers) {\n containerIndex.set(c._id, c);\n\n if (c.system.weight > 0) {\n const w = MGT2Helper.convertWeightForDisplay(c.system.weight) + \" \" + settings.weightUnit;\n c._display = c.name.length > 12 ? `${c.name.substring(0, 12)}... (${w})` : `${c.name} (${w})`;\n } else {\n c._display = c.name.length > 12 ? c.name.substring(0, 12) + \"...\" : c.name;\n }\n\n if (c.system.onHand === true)\n c._subItems = [];\n }\n\n const containerView = actor.system.containerView;\n let currentContainerView = containerView !== \"\" ? containerIndex.get(containerView) : null;\n\n context.containerView = currentContainerView || null;\n context.containerWeight = currentContainerView\n ? MGT2Helper.convertWeightForDisplay(currentContainerView.system.weight)\n : MGT2Helper.convertWeightForDisplay(0);\n context.containerShowAll = containerView === \"\";\n\n for (let i of items) {\n const item = i.system;\n\n if (item.hasOwnProperty(\"weight\") && item.weight > 0) {\n i._weight = isNaN(item.quantity)\n ? MGT2Helper.convertWeightForDisplay(item.weight) + \" \" + settings.weightUnit\n : MGT2Helper.convertWeightForDisplay(item.weight * item.quantity) + \" \" + settings.weightUnit;\n }\n\n if (item.hasOwnProperty(\"container\") && item.container.id !== \"\" && item.container.id !== undefined) {\n const container = containerIndex.get(item.container.id);\n if (container === undefined) {\n if (context.containerShowAll) {\n i._containerName = \"#deleted#\";\n containerItems.push(i);\n }\n continue;\n }\n\n if (container.system.locked && !game.user.isGM) continue;\n\n if (container.system.onHand === true)\n container._subItems.push(i);\n\n if (context.containerShowAll || actor.system.containerView === item.container.id) {\n i._containerName = container.name;\n containerItems.push(i);\n }\n continue;\n }\n\n if (item.hasOwnProperty(\"equipped\")) {\n i._canEquip = true;\n i.toggleClass = item.equipped ? \"active\" : \"\";\n } else {\n i._canEquip = false;\n i.toggleClass = \"\";\n }\n\n switch (i.type) {\n case \"equipment\":\n (i.system.subType === \"augment\" ? augments : equipments).push(i);\n break;\n\n case \"armor\":\n if (i.system.options?.length > 0)\n i._subInfo = i.system.options.map(x => x.name).join(\", \");\n armors.push(i);\n break;\n\n case \"computer\":\n if (i.system.options?.length > 0)\n i._subInfo = i.system.options.map(x => x.name).join(\", \");\n break;\n\n case \"item\":\n if (i.system.subType === \"software\") {\n if (i.system.software.computerId && i.system.software.computerId !== \"\") {\n const computer = computers.find(x => x._id === i.system.software.computerId);\n if (computer !== undefined) computer._subItems.push(i);\n else softwares.push(i);\n } else {\n i._display = i.system.software.bandwidth > 0\n ? `${i.name} (${i.system.software.bandwidth})`\n : i.name;\n softwares.push(i);\n }\n } else {\n miscItems.push(i);\n }\n break;\n\n case \"weapon\":\n i._range = i.system.range.isMelee\n ? game.i18n.localize(\"MGT2.Melee\")\n : MGT2Helper.getRangeDisplay(i.system.range);\n i._subInfo = WeaponData.getTraitsSummary(i.system.traits);\n weapons.push(i);\n break;\n\n case \"career\":\n careers.push(i);\n break;\n\n case \"contact\":\n contacts.push(i);\n break;\n\n case \"disease\":\n (i.system.subType === \"wound\" ? wounds : diseases).push(i);\n break;\n\n case \"talent\":\n if (i.system.subType === \"skill\") {\n skills.push(i);\n } else {\n if (MGT2Helper.hasValue(i.system.psionic, \"reach\"))\n i._reach = game.i18n.localize(`MGT2.PsionicReach.${i.system.psionic.reach}`);\n if (MGT2Helper.hasValue(i.system.roll, \"difficulty\"))\n i._difficulty = game.i18n.localize(`MGT2.Difficulty.${i.system.roll.difficulty}`);\n psionics.push(i);\n }\n break;\n\n case \"container\":\n if (i.system.onHand === true)\n miscItems.push(i);\n break;\n }\n }\n\n const byName = MGT2Helper.compareByName;\n const byEquipName = (a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n\n context.encumbranceNormal = MGT2Helper.convertWeightForDisplay(actor.system.inventory.encumbrance.normal);\n context.encumbranceHeavy = MGT2Helper.convertWeightForDisplay(actor.system.inventory.encumbrance.heavy);\n\n const totalWeight = actor.system.inventory.weight;\n if (totalWeight > actor.system.inventory.encumbrance.heavy) {\n context.encumbranceClasses = \"encumbrance-heavy\";\n context.encumbrance = 2;\n } else if (totalWeight > actor.system.inventory.encumbrance.normal) {\n context.encumbranceClasses = \"encumbrance-normal\";\n context.encumbrance = 1;\n } else {\n context.encumbrance = 0;\n }\n\n if (softwares.length > 0) { softwares.sort(byName); context.softwares = softwares; }\n augments.sort(byEquipName); context.augments = augments;\n armors.sort(byEquipName); context.armors = armors;\n computers.sort(byEquipName); context.computers = computers;\n context.careers = careers;\n contacts.sort(byName); context.contacts = contacts;\n containers.sort(byName); context.containers = containers;\n diseases.sort(byName); context.diseases = diseases;\n context.wounds = wounds;\n equipments.sort(byEquipName); context.equipments = equipments;\n miscItems.sort(byEquipName); context.items = miscItems;\n actorContainers.sort(byName); context.actorContainers = actorContainers;\n skills.sort(byName); context.skills = skills;\n psionics.sort(byName); context.psionics = psionics;\n weapons.sort(byEquipName); context.weapons = weapons;\n\n if (containerItems.length > 0) {\n containerItems.sort((a, b) => {\n const r = a._containerName.localeCompare(b._containerName);\n return r !== 0 ? r : a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n });\n }\n context.containerItems = containerItems;\n }\n\n // =========================================================\n // Event Binding (AppV2 _onRender — replaces jQuery activateListeners)\n // Templates still use CSS class selectors, so we bind manually here.\n // =========================================================\n\n /** @override */\n _onRender(context, options) {\n super._onRender(context, options);\n const html = this.element;\n if (!this.isEditable) return;\n\n this._bindClassEvent(html, \"a[data-roll]\", \"click\", TravellerCharacterSheet.#onRoll);\n this._bindClassEvent(html, \".cfg-characteristic\", \"click\", TravellerCharacterSheet.#onOpenCharacteristic);\n this._bindClassEvent(html, \".item-create\", \"click\", TravellerCharacterSheet.#onCreateItem);\n this._bindClassEvent(html, \".item-edit\", \"click\", TravellerCharacterSheet.#onEditItem);\n this._bindClassEvent(html, \".item-delete\", \"click\", TravellerCharacterSheet.#onDeleteItem);\n this._bindClassEvent(html, \".item-storage-in\", \"click\", TravellerCharacterSheet.#onItemStorageIn);\n this._bindClassEvent(html, \".item-storage-out\", \"click\", TravellerCharacterSheet.#onItemStorageOut);\n this._bindClassEvent(html, \".software-eject\", \"click\", TravellerCharacterSheet.#onSoftwareEject);\n this._bindClassEvent(html, \".container-create\", \"click\", TravellerCharacterSheet.#onContainerCreate);\n this._bindClassEvent(html, \".container-edit\", \"click\", TravellerCharacterSheet.#onContainerEdit);\n this._bindClassEvent(html, \".container-delete\", \"click\", TravellerCharacterSheet.#onContainerDelete);\n this._bindClassEvent(html, \".traits-create\", \"click\", TravellerCharacterSheet.#onTraitCreate);\n this._bindClassEvent(html, \".traits-edit\", \"click\", TravellerCharacterSheet.#onTraitEdit);\n this._bindClassEvent(html, \".traits-delete\", \"click\", TravellerCharacterSheet.#onTraitDelete);\n this._bindClassEvent(html, \"[data-editor='open']\", \"click\", TravellerCharacterSheet.#onOpenEditor);\n html.querySelector(\"[name='config']\")?.addEventListener(\"click\", (ev) => TravellerCharacterSheet.#onOpenConfig.call(this, ev, ev.currentTarget));\n }\n\n /** Helper: bind a handler to all matching elements, with `this` set to the sheet instance */\n _bindClassEvent(html, selector, event, handler) {\n for (const el of html.querySelectorAll(selector)) {\n el.addEventListener(event, (ev) => handler.call(this, ev, ev.currentTarget));\n }\n }\n\n // =========================================================\n // Drag & Drop\n // =========================================================\n\n /** @override */\n async _onDrop(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n const dropData = MGT2Helper.getDataFromDropEvent(event);\n if (!dropData) return false;\n\n const sourceItemData = await MGT2Helper.getItemDataFromDropData(dropData);\n\n if (sourceItemData.type === \"species\") {\n const update = {\n system: {\n personal: {\n species: sourceItemData.name,\n speciesText: {\n description: sourceItemData.system.description,\n descriptionLong: sourceItemData.system.descriptionLong,\n },\n },\n },\n };\n update.system.personal.traits = this.actor.system.personal.traits.concat(sourceItemData.system.traits);\n\n if (sourceItemData.system.modifiers?.length > 0) {\n update.system.characteristics = {};\n for (let modifier of sourceItemData.system.modifiers) {\n if (MGT2Helper.hasValue(modifier, \"characteristic\") && MGT2Helper.hasValue(modifier, \"value\")) {\n const c = this.actor.system.characteristics[modifier.characteristic];\n const updateValue = { value: c.value + modifier.value };\n if (c.showMax) updateValue.max = c.max + modifier.value;\n update.system.characteristics[modifier.characteristic] = updateValue;\n }\n }\n }\n\n this.actor.update(update);\n return true;\n }\n\n if ([\"contact\", \"disease\", \"career\", \"talent\"].includes(sourceItemData.type)) {\n let transferData = {};\n try { transferData = sourceItemData.toJSON(); } catch (e) { transferData = sourceItemData; }\n delete transferData._id;\n delete transferData.id;\n await this.actor.createEmbeddedDocuments(\"Item\", [transferData]);\n return true;\n }\n\n if (![\"armor\", \"weapon\", \"computer\", \"container\", \"item\", \"equipment\"].includes(sourceItemData.type)) return false;\n\n const target = event.target.closest(\".table-row\");\n let targetId = null;\n let targetItem = null;\n if (target !== null) {\n targetId = target.dataset.itemId;\n targetItem = this.actor.getEmbeddedDocument(\"Item\", targetId);\n }\n\n let sourceItem = this.actor.getEmbeddedDocument(\"Item\", sourceItemData.id);\n if (sourceItem) {\n if (!targetItem) return false;\n if (sourceItem.id === targetId) return false;\n\n if (targetItem.type === \"item\" || targetItem.type === \"equipment\") {\n if (targetItem.system.subType === \"software\")\n await sourceItem.update({ \"system.software.computerId\": targetItem.system.software.computerId });\n else\n await sourceItem.update({ \"system.container.id\": targetItem.system.container.id });\n return true;\n } else if (targetItem.type === \"computer\") {\n await sourceItem.update({ \"system.software.computerId\": targetId });\n return true;\n } else if (targetItem.type === \"container\") {\n if (targetItem.system.locked && !game.user.isGM) {\n ui.notifications.error(\"Verrouillé\");\n } else {\n await sourceItem.update({ \"system.container.id\": targetId });\n return true;\n }\n }\n } else {\n let transferData = {};\n try { transferData = sourceItemData.toJSON(); } catch (e) { transferData = sourceItemData; }\n delete transferData._id;\n delete transferData.id;\n\n const recalcWeight = transferData.system.hasOwnProperty(\"weight\");\n\n if (transferData.system.hasOwnProperty(\"container\")) transferData.system.container.id = \"\";\n if (transferData.type === \"item\" && transferData.system.subType === \"software\") transferData.system.software.computerId = \"\";\n if (transferData.type === \"container\") transferData.system.onHand = true;\n if (transferData.system.hasOwnProperty(\"equipment\")) transferData.system.equipped = false;\n\n if (targetItem !== null) {\n if (transferData.type === \"item\" && transferData.system.subType === \"software\") {\n if (targetItem.type === \"item\" && targetItem.system.subType === \"software\")\n transferData.system.software.computerId = targetItem.system.software.computerId;\n else if (targetItem.type === \"computer\")\n transferData.system.software.computerId = targetItem._id;\n } else if ([\"armor\", \"computer\", \"equipment\", \"item\", \"weapon\"].includes(transferData.type)) {\n if (targetItem.type === \"container\") {\n if (!targetItem.system.locked || game.user.isGM)\n transferData.system.container.id = targetId;\n } else {\n transferData.system.container.id = targetItem.system.container.id;\n }\n }\n }\n\n await this.actor.createEmbeddedDocuments(\"Item\", [transferData]);\n if (recalcWeight) await this.actor.recalculateWeight();\n }\n return true;\n }\n\n // =========================================================\n // Actions (static private methods)\n // =========================================================\n\n static async #onCreateItem(event, target) {\n event.preventDefault();\n const data = {\n name: target.dataset.createName,\n type: target.dataset.typeItem,\n };\n if (target.dataset.subtype) {\n data.system = { subType: target.dataset.subtype };\n }\n const cls = getDocumentClass(\"Item\");\n return cls.create(data, { parent: this.actor });\n }\n\n static async #onEditItem(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n const item = this.actor.getEmbeddedDocument(\"Item\", li?.dataset.itemId);\n if (item) item.sheet.render(true);\n }\n\n static async #confirmDelete(name) {\n return foundry.applications.api.DialogV2.confirm({\n window: { title: game.i18n.localize(\"MGT2.Dialog.ConfirmDeleteTitle\") },\n content: `

${game.i18n.format(\"MGT2.Dialog.ConfirmDeleteContent\", { name })}

`,\n yes: { label: game.i18n.localize(\"MGT2.Dialog.Yes\"), icon: \"fas fa-trash\" },\n no: { label: game.i18n.localize(\"MGT2.Dialog.No\"), icon: \"fas fa-times\" },\n rejectClose: false,\n modal: true\n });\n }\n\n static async #onDeleteItem(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n if (!li?.dataset.itemId) return;\n const item = this.actor.items.get(li.dataset.itemId);\n if (!item) return;\n const confirmed = await TravellerCharacterSheet.#confirmDelete(item.name);\n if (!confirmed) return;\n this.actor.deleteEmbeddedDocuments(\"Item\", [li.dataset.itemId]);\n }\n\n static async #onEquipItem(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n const itemId = li?.dataset.itemId;\n if (!itemId) return;\n const item = this.actor.items.get(itemId);\n if (!item) return;\n await item.update({ \"system.equipped\": !item.system.equipped });\n }\n\n static async #onItemStorageIn(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n const item = this.actor.getEmbeddedDocument(\"Item\", li?.dataset.itemId);\n if (!item) return;\n\n if (item.type === \"container\") {\n await item.update({ \"system.onHand\": false });\n } else {\n const containers = this.actor.getContainers();\n let container;\n const dropInId = this.actor.system.containerDropIn;\n\n if (!dropInId) {\n container = containers.length === 0\n ? await getDocumentClass(\"Item\").create({ name: \"New container\", type: \"container\" }, { parent: this.actor })\n : containers[0];\n } else {\n container = containers.find(x => x._id === dropInId);\n }\n\n if (container?.system.locked && !game.user.isGM) {\n ui.notifications.error(\"Objet verrouillé\");\n return;\n }\n await item.update({ \"system.container.id\": container._id });\n }\n }\n\n static async #onItemStorageOut(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n const item = this.actor.getEmbeddedDocument(\"Item\", li?.dataset.itemId);\n if (!item) return;\n await item.update({ \"system.container.id\": \"\" });\n }\n\n static async #onSoftwareEject(event, target) {\n event.preventDefault();\n const li = target.closest(\"[data-item-id]\");\n const item = this.actor.getEmbeddedDocument(\"Item\", li?.dataset.itemId);\n if (!item) return;\n await item.update({ \"system.software.computerId\": \"\" });\n }\n\n static async #onContainerCreate(event) {\n event.preventDefault();\n const cls = getDocumentClass(\"Item\");\n return cls.create({ name: \"New container\", type: \"container\" }, { parent: this.actor });\n }\n\n static async #onContainerEdit(event) {\n event.preventDefault();\n const container = this.actor.getEmbeddedDocument(\"Item\", this.actor.system.containerView);\n if (container) container.sheet.render(true);\n }\n\n static async #onContainerDelete(event) {\n event.preventDefault();\n const containers = this.actor.getContainers();\n const container = containers.find(x => x._id === this.actor.system.containerView);\n if (!container) return;\n\n const confirmed = await TravellerCharacterSheet.#confirmDelete(container.name);\n if (!confirmed) return;\n\n const containerItems = this.actor.items.filter(\n x => x.system.hasOwnProperty(\"container\") && x.system.container.id === container._id\n );\n\n if (containerItems.length > 0) {\n const updates = containerItems.map(item => ({ _id: item.id, \"system.container.id\": \"\" }));\n await this.actor.updateEmbeddedDocuments(\"Item\", updates);\n }\n\n const actorUpdate = { \"system.containerView\": \"\" };\n if (this.actor.system.containerDropIn === container._id) {\n actorUpdate[\"system.containerDropIn\"] = \"\";\n const remaining = containers.filter(x => x._id !== container._id);\n if (remaining.length > 0) actorUpdate[\"system.containerDropIn\"] = remaining[0]._id;\n }\n\n await this.actor.deleteEmbeddedDocuments(\"Item\", [container._id]);\n await this.actor.update(actorUpdate);\n }\n\n static async #onRoll(event, target) {\n event.preventDefault();\n\n const rollOptions = {\n rollTypeName: game.i18n.localize(\"MGT2.RollPrompt.Roll\"),\n rollObjectName: \"\",\n characteristics: [{ _id: \"\", name: \"\" }],\n characteristic: \"\",\n skills: [],\n skill: \"\",\n fatigue: this.actor.system.states.fatigue,\n encumbrance: this.actor.system.states.encumbrance,\n difficulty: null,\n damageFormula: null,\n damageAP: 0,\n blastRadius: 0,\n stun: false,\n radiation: false,\n isMelee: false,\n isRanged: false,\n bulky: false,\n veryBulky: false,\n };\n\n const cardButtons = [];\n for (const [key, label] of Object.entries(MGT2.Characteristics)) {\n const c = this.actor.system.characteristics[key];\n if (c.show) {\n rollOptions.characteristics.push({\n _id: key,\n name: game.i18n.localize(label) + MGT2Helper.getDisplayDM(c.dm),\n });\n }\n }\n\n for (let item of this.actor.items) {\n if (item.type === \"talent\" && item.system.subType === \"skill\")\n rollOptions.skills.push({ _id: item._id, name: item.getRollDisplay() });\n }\n\n rollOptions.skills.sort(MGT2Helper.compareByName);\n rollOptions.skills = [{ _id: \"NP\", name: game.i18n.localize(\"MGT2.Items.NotProficient\") }].concat(rollOptions.skills);\n\n let itemObj = null;\n let isInitiative = false;\n const rollType = target.dataset.roll;\n\n if (rollType === \"initiative\") {\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.RollPrompt.InitiativeRoll\");\n rollOptions.characteristic = this.actor.system.config.initiative;\n isInitiative = true;\n } else if (rollType === \"characteristic\") {\n rollOptions.characteristic = target.dataset.rollCharacteristic;\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.RollPrompt.CharacteristicRoll\");\n rollOptions.rollObjectName = game.i18n.localize(`MGT2.Characteristics.${rollOptions.characteristic}.name`);\n } else {\n if (rollType === \"skill\") {\n rollOptions.skill = target.dataset.rollSkill;\n itemObj = this.actor.getEmbeddedDocument(\"Item\", rollOptions.skill);\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.RollPrompt.SkillRoll\");\n rollOptions.rollObjectName = itemObj.name;\n } else if (rollType === \"psionic\") {\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.RollPrompt.PsionicRoll\");\n }\n\n if (itemObj === null && target.dataset.itemId) {\n itemObj = this.actor.getEmbeddedDocument(\"Item\", target.dataset.itemId);\n rollOptions.rollObjectName = itemObj.name;\n if (itemObj.type === \"weapon\") rollOptions.rollTypeName = game.i18n.localize(\"TYPES.Item.weapon\");\n else if (itemObj.type === \"armor\") rollOptions.rollTypeName = game.i18n.localize(\"TYPES.Item.armor\");\n else if (itemObj.type === \"computer\") rollOptions.rollTypeName = game.i18n.localize(\"TYPES.Item.computer\");\n }\n\n if (rollType === \"psionic\" && itemObj) {\n rollOptions.rollObjectName = itemObj.name;\n if (MGT2Helper.hasValue(itemObj.system.psionic, \"duration\")) {\n cardButtons.push({\n label: game.i18n.localize(\"MGT2.Items.Duration\"),\n formula: itemObj.system.psionic.duration,\n message: {\n objectName: itemObj.name,\n flavor: \"{0} \".concat(game.i18n.localize(`MGT2.Durations.${itemObj.system.psionic.durationUnit}`)),\n },\n });\n }\n }\n\n if (itemObj?.system.hasOwnProperty(\"damage\")) {\n rollOptions.damageFormula = itemObj.system.damage;\n if (itemObj.type === \"weapon\") {\n rollOptions.isMelee = itemObj.system.range?.isMelee === true;\n rollOptions.isRanged = itemObj.type === \"weapon\" && !itemObj.system.range?.isMelee;\n rollOptions.damageAP = itemObj.system.traits?.ap ?? 0;\n rollOptions.blastRadius = itemObj.system.traits?.blast ?? 0;\n rollOptions.stun = itemObj.system.traits?.stun === true;\n rollOptions.radiation = itemObj.system.traits?.radiation === true;\n rollOptions.scope = itemObj.system.traits?.scope === true;\n rollOptions.zeroG = itemObj.system.traits?.zeroG === true;\n rollOptions.autoLevel = itemObj.system.traits?.auto ?? 0;\n rollOptions.itemId = itemObj._id;\n rollOptions.magazine = itemObj.system.magazine ?? -1; // -1 = not tracked\n rollOptions.bulky = itemObj.system.traits?.bulky === true;\n rollOptions.veryBulky = itemObj.system.traits?.veryBulky === true;\n }\n if (itemObj.type === \"disease\") {\n if (itemObj.system.subType === \"disease\")\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.DiseaseSubType.disease\");\n else if (itemObj.system.subType === \"poison\")\n rollOptions.rollTypeName = game.i18n.localize(\"MGT2.DiseaseSubType.poison\");\n }\n }\n\n if (itemObj?.system.hasOwnProperty(\"roll\")) {\n if (MGT2Helper.hasValue(itemObj.system.roll, \"characteristic\")) rollOptions.characteristic = itemObj.system.roll.characteristic;\n if (MGT2Helper.hasValue(itemObj.system.roll, \"skill\")) rollOptions.skill = itemObj.system.roll.skill;\n if (MGT2Helper.hasValue(itemObj.system.roll, \"difficulty\")) rollOptions.difficulty = itemObj.system.roll.difficulty;\n }\n }\n\n const userRollData = await RollPromptHelper.roll(rollOptions);\n\n const rollModifiers = [];\n const rollFormulaParts = [];\n\n // Auto trait — fire mode\n const autoLevel = rollOptions.autoLevel ?? 0;\n const autoMode = autoLevel > 0 ? (userRollData.autoMode ?? \"single\") : \"single\";\n\n if (userRollData.diceModifier) {\n rollFormulaParts.push(\"3d6\", userRollData.diceModifier);\n } else {\n rollFormulaParts.push(\"2d6\");\n }\n\n if (userRollData.characteristic) {\n const c = this.actor.system.characteristics[userRollData.characteristic];\n rollFormulaParts.push(MGT2Helper.getFormulaDM(c.dm));\n rollModifiers.push(game.i18n.localize(`MGT2.Characteristics.${userRollData.characteristic}.name`) + MGT2Helper.getDisplayDM(c.dm));\n }\n\n if (userRollData.skill) {\n if (userRollData.skill === \"NP\") {\n rollFormulaParts.push(\"-3\");\n rollModifiers.push(game.i18n.localize(\"MGT2.Items.NotProficient\"));\n } else {\n const skillObj = this.actor.getEmbeddedDocument(\"Item\", userRollData.skill);\n rollFormulaParts.push(MGT2Helper.getFormulaDM(skillObj.system.level));\n rollModifiers.push(skillObj.getRollDisplay());\n }\n }\n\n if (userRollData.psionic) {\n const psionicObj = this.actor.getEmbeddedDocument(\"Item\", userRollData.psionic);\n rollFormulaParts.push(MGT2Helper.getFormulaDM(psionicObj.system.level));\n rollModifiers.push(psionicObj.getRollDisplay());\n }\n\n if (userRollData.timeframes && userRollData.timeframes !== \"\" && userRollData.timeframes !== \"Normal\") {\n rollModifiers.push(game.i18n.localize(`MGT2.Timeframes.${userRollData.timeframes}`));\n rollFormulaParts.push(userRollData.timeframes === \"Slower\" ? \"+2\" : \"-2\");\n }\n\n if (userRollData.encumbrance === true) {\n rollFormulaParts.push(\"-2\");\n rollModifiers.push(game.i18n.localize(\"MGT2.Actor.Encumbrance\") + \" -2\");\n }\n\n if (userRollData.fatigue === true) {\n rollFormulaParts.push(\"-2\");\n rollModifiers.push(game.i18n.localize(\"MGT2.Actor.Fatigue\") + \" -2\");\n }\n\n const customDMVal = parseInt(userRollData.customDM ?? \"0\", 10);\n if (!isNaN(customDMVal) && customDMVal !== 0) {\n rollFormulaParts.push(customDMVal > 0 ? `+${customDMVal}` : `${customDMVal}`);\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.CustomDM\") + \" \" + (customDMVal > 0 ? `+${customDMVal}` : `${customDMVal}`));\n }\n\n if (rollOptions.isRanged) {\n const rangedRange = parseInt(userRollData.rangedRange ?? \"0\", 10);\n if (rangedRange === 1) {\n rollFormulaParts.push(\"+1\");\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.RangeShort\") + \" +1\");\n } else if (rangedRange === -2) {\n rollFormulaParts.push(\"-2\");\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.RangeLong\") + \" −2\");\n } else if (rangedRange === -4) {\n rollFormulaParts.push(\"-4\");\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.RangeExtreme\") + \" −4\");\n }\n\n const rangedAim = parseInt(userRollData.rangedAim ?? \"0\", 10);\n // Auto: burst/full-auto cancels all aiming advantages (rules p.75)\n if (rangedAim > 0 && autoMode === \"single\") {\n rollFormulaParts.push(`+${rangedAim}`);\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.Aim\") + ` +${rangedAim}`);\n if (userRollData.rangedLaserSight === true || userRollData.rangedLaserSight === \"true\") {\n rollFormulaParts.push(\"+1\");\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.LaserSight\") + \" +1\");\n }\n }\n\n const rangedFastTarget = parseInt(userRollData.rangedFastTarget ?? \"0\", 10);\n if (rangedFastTarget < 0) {\n rollFormulaParts.push(`${rangedFastTarget}`);\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.FastTarget\") + ` ${rangedFastTarget}`);\n }\n\n if (userRollData.rangedCover === true || userRollData.rangedCover === \"true\") {\n rollFormulaParts.push(\"-2\");\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.Cover\") + \" −2\");\n }\n\n if (userRollData.rangedProne === true || userRollData.rangedProne === \"true\") {\n rollFormulaParts.push(\"-1\");\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.Prone\") + \" −1\");\n }\n\n if (userRollData.rangedDodge === true || userRollData.rangedDodge === \"true\") {\n const dodgeDM = parseInt(userRollData.rangedDodgeDM ?? \"0\", 10);\n if (dodgeDM < 0) {\n rollFormulaParts.push(`${dodgeDM}`);\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.Dodge\") + ` ${dodgeDM}`);\n }\n }\n }\n\n if (rollOptions.isMelee) {\n if (userRollData.meleeDodge === true || userRollData.meleeDodge === \"true\") {\n const dodgeDM = parseInt(userRollData.meleeDodgeDM ?? \"0\", 10);\n if (dodgeDM < 0) {\n rollFormulaParts.push(`${dodgeDM}`);\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.Dodge\") + ` ${dodgeDM}`);\n }\n }\n if (userRollData.meleeParry === true || userRollData.meleeParry === \"true\") {\n const parryDM = parseInt(userRollData.meleeParryDM ?? \"0\", 10);\n if (parryDM < 0) {\n rollFormulaParts.push(`${parryDM}`);\n rollModifiers.push(game.i18n.localize(\"MGT2.RollPrompt.Parry\") + ` ${parryDM}`);\n }\n }\n }\n\n if (MGT2Helper.hasValue(userRollData, \"difficulty\") && userRollData.difficulty !== \"\") rollOptions.difficulty = userRollData.difficulty;\n\n // ── Bulky / Very Bulky trait: STR penalty ────────────────────────────\n const strDm = this.actor.system.characteristics.strength?.dm ?? 0;\n if (rollOptions.veryBulky) {\n // Very Bulky: requires STR DM ≥ +2\n if (strDm < 2) {\n const penalty = strDm - 2;\n rollFormulaParts.push(`${penalty}`);\n rollModifiers.push(game.i18n.localize(\"MGT2.WeaponTraits.VeryBulky\") + ` ${penalty}`);\n ui.notifications.warn(game.i18n.format(\"MGT2.Notifications.VeryBulkyPenalty\", { penalty }));\n }\n } else if (rollOptions.bulky) {\n // Bulky: requires STR DM ≥ +1\n if (strDm < 1) {\n const penalty = strDm - 1;\n rollFormulaParts.push(`${penalty}`);\n rollModifiers.push(game.i18n.localize(\"MGT2.WeaponTraits.Bulky\") + ` ${penalty}`);\n ui.notifications.warn(game.i18n.format(\"MGT2.Notifications.BulkyPenalty\", { penalty }));\n }\n }\n\n const rollFormula = rollFormulaParts.join(\"\");\n if (!Roll.validate(rollFormula)) {\n ui.notifications.error(game.i18n.localize(\"MGT2.Errors.InvalidRollFormula\"));\n return;\n }\n\n // ── Ammo decrement (ranged weapons with magazine tracking) ───────────\n if (rollOptions.isRanged && rollOptions.itemId && rollOptions.magazine >= 0) {\n let ammoUsed = 1;\n if (autoMode === \"burst\" && autoLevel > 0) ammoUsed = autoLevel;\n else if (autoMode === \"fullAuto\" && autoLevel > 0) ammoUsed = autoLevel * 3;\n\n const currentMag = rollOptions.magazine;\n if (currentMag <= 0) {\n ui.notifications.warn(\n game.i18n.format(\"MGT2.Notifications.NoAmmo\", { weapon: rollOptions.rollObjectName })\n );\n } else {\n const newMag = Math.max(0, currentMag - ammoUsed);\n const weaponItem = this.actor.getEmbeddedDocument(\"Item\", rollOptions.itemId);\n if (weaponItem) await weaponItem.update({ \"system.magazine\": newMag });\n if (newMag === 0) {\n ui.notifications.warn(\n game.i18n.format(\"MGT2.Notifications.AmmoEmpty\", { weapon: rollOptions.rollObjectName })\n );\n } else {\n ui.notifications.info(\n game.i18n.format(\"MGT2.Notifications.AmmoUsed\", { used: ammoUsed, remaining: newMag, weapon: rollOptions.rollObjectName })\n );\n }\n }\n }\n\n let roll = await new Roll(rollFormula, this.actor.getRollData()).roll({ rollMode: userRollData.rollMode });\n\n if (isInitiative && this.token?.combatant) {\n await this.token.combatant.update({ initiative: roll.total });\n }\n\n // ── Compute effect and effective damage formula ──────────────────────\n let rollSuccess = false;\n let rollFailure = false;\n let rollEffect = undefined;\n let rollEffectStr = undefined;\n let difficultyValue = null;\n\n if (MGT2Helper.hasValue(rollOptions, \"difficulty\")) {\n difficultyValue = MGT2Helper.getDifficultyValue(rollOptions.difficulty);\n rollEffect = roll.total - difficultyValue;\n rollEffectStr = (rollEffect >= 0 ? \"+\" : \"\") + rollEffect;\n rollSuccess = rollEffect >= 0;\n rollFailure = !rollSuccess;\n }\n\n // Build effective damage formula: base + effect + STR DM (melee) + Auto burst\n let effectiveDamageFormula = rollOptions.damageFormula || null;\n if (effectiveDamageFormula) {\n if (rollEffect !== undefined && rollEffect !== 0) {\n effectiveDamageFormula += (rollEffect >= 0 ? \"+\" : \"\") + rollEffect;\n }\n if (rollOptions.isMelee) {\n const strDm = this.actor.system.characteristics.strength?.dm ?? 0;\n if (strDm !== 0) effectiveDamageFormula += (strDm >= 0 ? \"+\" : \"\") + strDm;\n }\n // Burst: add Auto level to damage\n if (autoMode === \"burst\" && autoLevel > 0) {\n effectiveDamageFormula += `+${autoLevel}`;\n }\n }\n\n // Auto fire mode chat info\n let autoInfo = null;\n if (autoMode === \"burst\" && autoLevel > 0) {\n autoInfo = game.i18n.format(\"MGT2.RollPrompt.AutoBurstInfo\", { level: autoLevel, ammo: autoLevel });\n } else if (autoMode === \"fullAuto\" && autoLevel > 0) {\n autoInfo = game.i18n.format(\"MGT2.RollPrompt.AutoFullInfo\", { level: autoLevel, ammo: autoLevel * 3 });\n }\n\n // ── Build roll breakdown tooltip ─────────────────────────────────────\n const diceRawTotal = roll.dice.reduce((s, d) => s + d.total, 0);\n const breakdownParts = [game.i18n.localize(\"MGT2.Chat.Roll.Dice\") + \" \" + diceRawTotal];\n for (const mod of rollModifiers) breakdownParts.push(mod);\n if (rollEffectStr !== undefined)\n breakdownParts.push(game.i18n.localize(\"MGT2.Chat.Roll.Effect\") + \" \" + rollEffectStr);\n const rollBreakdown = breakdownParts.join(\" | \");\n\n const chatData = {\n user: game.user.id,\n speaker: this.actor ? ChatMessage.getSpeaker({ actor: this.actor }) : null,\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total * 100) / 100,\n rollBreakdown,\n showButtons: true,\n showLifeButtons: false,\n showRollRequest: false,\n rollTypeName: rollOptions.rollTypeName,\n rollObjectName: rollOptions.rollObjectName,\n rollModifiers: rollModifiers,\n // Show damage button only if there's a formula AND (no difficulty check OR roll succeeded)\n showRollDamage: !!effectiveDamageFormula && (!difficultyValue || rollSuccess),\n cardButtons: cardButtons,\n autoInfo,\n };\n\n if (MGT2Helper.hasValue(rollOptions, \"difficulty\")) {\n chatData.rollDifficulty = rollOptions.difficulty;\n chatData.rollDifficultyLabel = MGT2Helper.getDifficultyDisplay(rollOptions.difficulty);\n chatData.rollEffect = rollEffect;\n chatData.rollEffectStr = rollEffectStr;\n chatData.rollSuccess = rollSuccess || undefined;\n chatData.rollFailure = rollFailure || undefined;\n }\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/roll.html\", chatData);\n chatData.content = html;\n\n let flags = null;\n if (effectiveDamageFormula) {\n flags = { mgt2: { damage: { formula: effectiveDamageFormula, ap: rollOptions.damageAP ?? 0, blast: rollOptions.blastRadius ?? 0, stun: rollOptions.stun ?? false, radiation: rollOptions.radiation ?? false, rollObjectName: rollOptions.rollObjectName, rollTypeName: rollOptions.rollTypeName } } };\n }\n if (cardButtons.length > 0) {\n if (!flags) flags = { mgt2: {} };\n flags.mgt2.buttons = cardButtons;\n }\n if (flags) chatData.flags = flags;\n\n return roll.toMessage(chatData);\n }\n\n static async #onOpenConfig(event) {\n event.preventDefault();\n const userConfig = await CharacterPrompts.openConfig(this.actor.system);\n if (userConfig) this.actor.update({ \"system.config\": userConfig });\n }\n\n static async #onOpenCharacteristic(event, target) {\n event.preventDefault();\n const name = target.dataset.cfgCharacteristic;\n const c = this.actor.system.characteristics[name];\n\n let showAll = false;\n for (const value of Object.values(this.actor.system.characteristics)) {\n if (!value.show) { showAll = true; break; }\n }\n\n const userConfig = await CharacterPrompts.openCharacteristic(\n game.i18n.localize(`MGT2.Characteristics.${name}.name`),\n c.show, c.showMax, showAll\n );\n\n if (userConfig) {\n const data = { system: { characteristics: {} } };\n data.system.characteristics[name] = { show: userConfig.show, showMax: userConfig.showMax };\n\n if (userConfig.showAll === true) {\n for (const [key, value] of Object.entries(this.actor.system.characteristics)) {\n if (key !== name && !value.show)\n data.system.characteristics[key] = { show: true };\n }\n }\n this.actor.update(data);\n }\n }\n\n static async #onTraitCreate(event) {\n event.preventDefault();\n let traits = this.actor.system.personal.traits;\n let newTraits;\n if (traits.length === 0) {\n newTraits = [{ name: \"\", description: \"\" }];\n } else {\n newTraits = [...traits, { name: \"\", description: \"\" }];\n }\n return this.actor.update({ system: { personal: { traits: newTraits } } });\n }\n\n static async #onTraitEdit(event, target) {\n event.preventDefault();\n const element = target.closest(\"[data-traits-part]\");\n const index = Number(element.dataset.traitsPart);\n const trait = this.actor.system.personal.traits[index];\n const result = await CharacterPrompts.openTraitEdit(trait);\n const traits = [...this.actor.system.personal.traits];\n traits[index] = { ...traits[index], name: result.name, description: result.description };\n return this.actor.update({ system: { personal: { traits: traits } } });\n }\n\n static async #onTraitDelete(event, target) {\n event.preventDefault();\n const confirmed = await TravellerCharacterSheet.#confirmDelete(game.i18n.localize(\"MGT2.Actor.ThisTrait\"));\n if (!confirmed) return;\n const element = target.closest(\"[data-traits-part]\");\n const index = Number(element.dataset.traitsPart);\n const traits = foundry.utils.deepClone(this.actor.system.personal.traits);\n const newTraits = Object.entries(traits)\n .filter(([key]) => Number(key) !== index)\n .map(([, value]) => value);\n return this.actor.update({ system: { personal: { traits: newTraits } } });\n }\n\n static async #onOpenEditor(event) {\n event.preventDefault();\n const title = this.actor.system.personal.species\n || game.i18n.localize(\"MGT2.Actor.Species\")\n || \"Species\";\n const html = this.actor.system.personal.speciesText?.descriptionLong ?? \"\";\n await CharacterPrompts.openEditorFullView(title, html);\n }\n\n static async #onHeal(event, target) {\n event.preventDefault();\n const healType = target.dataset.healType;\n\n if (game.user.targets.size === 0) {\n ui.notifications.warn(game.i18n.localize(\"MGT2.Errors.NoTokenSelected\"));\n return;\n }\n\n if (healType === \"firstaid\") {\n // Find Medicine skill to pre-select\n // Use normalized string matching to handle accents\n const medSkill = this.actor.items.find(i => {\n if (i.type !== \"talent\" || i.system.subType !== \"skill\") return false;\n const normalized = i.name.toLowerCase().normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n return normalized.includes(\"medecin\") || normalized.includes(\"medicine\");\n });\n \n // Only EDU characteristic available for First Aid\n const characteristics = [\n { _id: \"education\", name: game.i18n.localize(\"MGT2.Characteristics.education.name\") }\n ];\n \n const rollOptions = {\n rollTypeName: game.i18n.localize(\"MGT2.Healing.FirstAid\"),\n rollObjectName: this.actor.name,\n characteristics: characteristics, // Only EDU\n characteristic: \"education\", // Pre-selected\n skill: medSkill?.id ?? \"\", // Medicine skill ID for pre-selection (must match _id in array)\n skillName: medSkill?.name ?? game.i18n.localize(\"MGT2.Healing.NoMedicineSkill\"), // Display name\n skillLevel: medSkill?.system.level ?? -3, // -3 if not found\n skills: medSkill ? [{ _id: medSkill.id, name: medSkill.name, level: medSkill.system.level }] : [],\n difficulty: \"Average\", // First Aid difficulty is 8 (Average)\n showHeal: true,\n healType: MGT2.HealingType.FIRST_AID,\n };\n const userRollData = await RollPromptHelper.roll(rollOptions);\n if (userRollData) {\n // Build formula with all DMs — same pattern as standard skill roll\n const rollFormulaParts = [];\n const rollModifiers = [];\n\n if (userRollData.diceModifier) {\n rollFormulaParts.push(\"3d6\");\n rollFormulaParts.push(userRollData.diceModifier);\n } else {\n rollFormulaParts.push(\"2d6\");\n }\n\n if (userRollData.characteristic) {\n const c = this.actor.system.characteristics[userRollData.characteristic];\n rollFormulaParts.push(MGT2Helper.getFormulaDM(c.dm));\n rollModifiers.push(game.i18n.localize(`MGT2.Characteristics.${userRollData.characteristic}.name`) + MGT2Helper.getDisplayDM(c.dm));\n }\n\n if (userRollData.skill && userRollData.skill !== \"\") {\n if (userRollData.skill === \"NP\") {\n rollFormulaParts.push(\"-3\");\n rollModifiers.push(game.i18n.localize(\"MGT2.Items.NotProficient\"));\n } else {\n const skillObj = this.actor.getEmbeddedDocument(\"Item\", userRollData.skill);\n rollFormulaParts.push(MGT2Helper.getFormulaDM(skillObj.system.level));\n rollModifiers.push(skillObj.getRollDisplay());\n }\n }\n\n if (userRollData.customDM && userRollData.customDM !== \"\") {\n let s = userRollData.customDM.trim();\n if (/^[0-9]/.test(s)) rollFormulaParts.push(\"+\");\n rollFormulaParts.push(s);\n rollModifiers.push(\"DM \" + s);\n }\n\n const rollFormula = rollFormulaParts.join(\"\");\n const roll = await new Roll(rollFormula, this.actor.getRollData()).roll();\n\n // Difficulty for First Aid is Average (8)\n const difficulty = 8;\n const effect = roll.total - difficulty;\n const isSuccess = effect >= 0;\n const healing = isSuccess ? Math.max(1, effect) : 0;\n\n const cardButtons = isSuccess\n ? [{ label: game.i18n.localize(\"MGT2.Healing.ApplyHealing\"), action: \"healing\" }]\n : [];\n\n const chatData = {\n user: game.user.id,\n speaker: ChatMessage.getSpeaker({ actor: this.actor }),\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total * 100) / 100,\n rollTypeName: game.i18n.localize(\"MGT2.Healing.FirstAid\"),\n rollObjectName: this.actor.name,\n rollModifiers: rollModifiers,\n rollDifficulty: difficulty,\n rollDifficultyLabel: MGT2Helper.getDifficultyDisplay(\"Average\"),\n rollEffectStr: isSuccess ? effect.toString() : undefined,\n healingAmount: isSuccess ? healing : undefined,\n rollSuccess: isSuccess || undefined,\n rollFailure: !isSuccess || undefined,\n showButtons: isSuccess,\n hasDamage: false,\n showRollDamage: false,\n cardButtons: cardButtons,\n };\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/roll.html\", chatData);\n chatData.content = html;\n chatData.flags = { mgt2: { healing: { amount: healing } } };\n\n return roll.toMessage(chatData);\n }\n } else if (healType === \"surgery\") {\n // Find Medicine skill to pre-select (same as first aid)\n const medSkill = this.actor.items.find(i => {\n if (i.type !== \"talent\" || i.system.subType !== \"skill\") return false;\n const normalized = i.name.toLowerCase().normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n return normalized.includes(\"medecin\") || normalized.includes(\"medicine\");\n });\n\n const characteristics = [\n { _id: \"education\", name: game.i18n.localize(\"MGT2.Characteristics.education.name\") }\n ];\n\n const rollOptions = {\n rollTypeName: game.i18n.localize(\"MGT2.Healing.Surgery\"),\n rollObjectName: this.actor.name,\n characteristics: characteristics,\n characteristic: \"education\",\n skill: medSkill?.id ?? \"\",\n skillName: medSkill?.name ?? game.i18n.localize(\"MGT2.Healing.NoMedicineSkill\"),\n skillLevel: medSkill?.system.level ?? -3,\n skills: medSkill ? [{ _id: medSkill.id, name: medSkill.name, level: medSkill.system.level }] : [],\n difficulty: \"Average\",\n showHeal: true,\n healType: MGT2.HealingType.SURGERY,\n };\n const userRollData = await RollPromptHelper.roll(rollOptions);\n if (userRollData) {\n // Build formula with all DMs — same pattern as standard skill roll\n const rollFormulaParts = [];\n const rollModifiers = [];\n\n if (userRollData.diceModifier) {\n rollFormulaParts.push(\"3d6\");\n rollFormulaParts.push(userRollData.diceModifier);\n } else {\n rollFormulaParts.push(\"2d6\");\n }\n\n if (userRollData.characteristic) {\n const c = this.actor.system.characteristics[userRollData.characteristic];\n rollFormulaParts.push(MGT2Helper.getFormulaDM(c.dm));\n rollModifiers.push(game.i18n.localize(`MGT2.Characteristics.${userRollData.characteristic}.name`) + MGT2Helper.getDisplayDM(c.dm));\n }\n\n if (userRollData.skill && userRollData.skill !== \"\") {\n if (userRollData.skill === \"NP\") {\n rollFormulaParts.push(\"-3\");\n rollModifiers.push(game.i18n.localize(\"MGT2.Items.NotProficient\"));\n } else {\n const skillObj = this.actor.getEmbeddedDocument(\"Item\", userRollData.skill);\n rollFormulaParts.push(MGT2Helper.getFormulaDM(skillObj.system.level));\n rollModifiers.push(skillObj.getRollDisplay());\n }\n }\n\n if (userRollData.customDM && userRollData.customDM !== \"\") {\n let s = userRollData.customDM.trim();\n if (/^[0-9]/.test(s)) rollFormulaParts.push(\"+\");\n rollFormulaParts.push(s);\n rollModifiers.push(\"DM \" + s);\n }\n\n const rollFormula = rollFormulaParts.join(\"\");\n const roll = await new Roll(rollFormula, this.actor.getRollData()).roll();\n\n // Difficulty for Surgery is Average (8)\n const difficulty = 8;\n const effect = roll.total - difficulty;\n const isSuccess = effect >= 0;\n\n // Success: heal Math.max(1, effect); Failure: patient takes 3 + |effect| damage\n const healing = isSuccess ? Math.max(1, effect) : 0;\n const surgeryDamage = isSuccess ? 0 : 3 + Math.abs(effect);\n\n const cardButtons = [];\n if (isSuccess) {\n cardButtons.push({ label: game.i18n.localize(\"MGT2.Healing.ApplyHealing\"), action: \"healing\" });\n } else {\n cardButtons.push({ label: game.i18n.localize(\"MGT2.Healing.ApplySurgeryDamage\"), action: \"surgeryDamage\" });\n }\n\n const chatData = {\n user: game.user.id,\n speaker: ChatMessage.getSpeaker({ actor: this.actor }),\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total * 100) / 100,\n rollTypeName: game.i18n.localize(\"MGT2.Healing.Surgery\"),\n rollObjectName: this.actor.name,\n rollModifiers: rollModifiers,\n rollDifficulty: difficulty,\n rollDifficultyLabel: MGT2Helper.getDifficultyDisplay(\"Average\"),\n rollEffectStr: effect.toString(),\n healingAmount: isSuccess ? healing : undefined,\n surgeryDamageAmount: isSuccess ? undefined : surgeryDamage,\n rollSuccess: isSuccess || undefined,\n rollFailure: !isSuccess || undefined,\n showButtons: true,\n hasDamage: false,\n showRollDamage: false,\n cardButtons: cardButtons,\n };\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/roll.html\", chatData);\n chatData.content = html;\n chatData.flags = { mgt2: { surgery: { healing, surgeryDamage } } };\n\n return roll.toMessage(chatData);\n }\n } else if (healType === \"medical\") {\n const result = await CharacterPrompts.openHealingDays();\n if (result) {\n const endMD = this.actor.system.characteristics.endurance.dm;\n const medSkill = this.actor.items.find(i =>\n i.type === \"talent\" &&\n i.system.subType === \"skill\" &&\n (i.name.toLowerCase().includes(\"medecin\") || i.name.toLowerCase().includes(\"medicine\"))\n );\n const skillValue = medSkill ? medSkill.system.level : 0;\n const days = result.days;\n const healingPerDay = Math.max(1, 3 + endMD + skillValue);\n const totalHealing = healingPerDay * days;\n\n const rollModifiers = [\n `3 (base)`,\n `${endMD >= 0 ? \"+\" : \"\"}${endMD} END`,\n `+${skillValue} ${medSkill?.name ?? \"Médecine\"}`,\n `× ${days} ${game.i18n.localize(\"MGT2.RollPrompt.Days\").toLowerCase()}`\n ];\n\n const templateData = {\n rollObjectName: this.actor.name,\n rollTypeName: game.i18n.localize(\"MGT2.Healing.MedicalCare\"),\n rollModifiers,\n formula: `${healingPerDay} ${game.i18n.localize(\"MGT2.Items.PerDay\")}`,\n tooltip: \"\",\n total: totalHealing,\n rollSuccess: true,\n showButtons: true,\n cardButtons: [\n { action: \"healing\", label: game.i18n.localize(\"MGT2.Healing.ApplyHealing\") }\n ]\n };\n\n const content = await renderTemplate(\n \"systems/mgt2/templates/chat/roll.html\",\n templateData\n );\n await ChatMessage.create({\n user: game.user.id,\n speaker: ChatMessage.getSpeaker({ actor: this.actor }),\n content,\n flags: { mgt2: { healing: { amount: totalHealing } } }\n });\n }\n } else if (healType === \"natural\") {\n const result = await CharacterPrompts.openHealingDays();\n if (result) {\n const endMD = this.actor.system.characteristics.endurance.dm;\n let totalAmount = 0;\n const rolls = [];\n \n for (let i = 0; i < result.days; i++) {\n const roll = await new Roll(\"1d6\").evaluate();\n const dayHealing = Math.max(1, roll.total + endMD);\n rolls.push({ roll, dayHealing });\n totalAmount += dayHealing;\n }\n \n // Build roll details\n const rollDisplay = rolls.map((r, idx) => \n `
${game.i18n.localize(\"MGT2.RollPrompt.Days\")} ${idx + 1}: 1d6 = ${r.roll.total} + ${endMD > 0 ? \"+\" : \"\"}${endMD} = ${r.dayHealing}
`\n ).join(\"\");\n \n const chatData = {\n user: game.user.id,\n speaker: ChatMessage.getSpeaker({ actor: this.actor }),\n content: `
\n
\n ${this.actor.name}\n
\n ${game.i18n.localize(\"MGT2.Healing.NaturalHealing\")}\n
\n
\n
${result.days} ${game.i18n.localize(\"MGT2.RollPrompt.Days\")}
\n
\n ${rollDisplay}\n
\n
\n ${game.i18n.localize(\"MGT2.Chat.Roll.Effect\")} ${totalAmount}\n
\n
`,\n flags: { mgt2: { healing: { amount: totalAmount } } }\n };\n await ChatMessage.create(chatData);\n \n // Apply healing immediately\n await this.actor.applyHealing(totalAmount);\n ui.notifications.info(\n game.i18n.format(\"MGT2.Notifications.HealingApplied\",\n { name: this.actor.name, amount: totalAmount })\n );\n }\n }\n }\n}\n","import MGT2ActorSheet from \"./base-actor-sheet.mjs\";\n\nexport default class TravellerVehiculeSheet extends MGT2ActorSheet {\n\n /** @override */\n static DEFAULT_OPTIONS = {\n ...super.DEFAULT_OPTIONS,\n classes: [...super.DEFAULT_OPTIONS.classes, \"vehicule\", \"nopad\"],\n window: {\n ...super.DEFAULT_OPTIONS.window,\n title: \"TYPES.Actor.vehicule\",\n },\n }\n\n /** @override */\n static PARTS = {\n sheet: {\n template: \"systems/mgt2/templates/actors/vehicule-sheet.html\",\n },\n }\n\n /** @override */\n tabGroups = { primary: \"stats\" }\n\n /** @override */\n async _prepareContext() {\n const context = await super._prepareContext();\n const actor = this.document;\n const enrich = (html) => foundry.applications.ux.TextEditor.implementation.enrichHTML(html ?? \"\", { async: true });\n\n context.enrichedDescription = await enrich(actor.system.description);\n context.enrichedNotes = await enrich(actor.system.notes);\n return context;\n }\n}\n","import MGT2ActorSheet from \"./base-actor-sheet.mjs\";\nimport { RollPromptHelper } from \"../../roll-prompt.js\";\nimport { MGT2Helper } from \"../../helper.js\";\n\nconst { renderTemplate } = foundry.applications.handlebars;\n\n/** Convert Traveller dice notation (e.g. \"2D\", \"4D+2\", \"3D6\") to FoundryVTT formula */\nfunction normalizeDice(formula) {\n if (!formula) return \"1d6\";\n return formula\n .replace(/(\\d*)D(\\d*)([+-]\\d+)?/gi, (_, count, sides, mod) => {\n const n = count || \"1\";\n const d = sides || \"6\";\n return mod ? `${n}d${d}${mod}` : `${n}d${d}`;\n });\n}\n\nexport default class TravellerCreatureSheet extends MGT2ActorSheet {\n\n /** @override */\n static DEFAULT_OPTIONS = {\n ...super.DEFAULT_OPTIONS,\n classes: [...super.DEFAULT_OPTIONS.classes, \"creature\", \"nopad\"],\n position: {\n width: 720,\n height: 600,\n },\n window: {\n ...super.DEFAULT_OPTIONS.window,\n title: \"TYPES.Actor.creature\",\n },\n actions: {\n ...super.DEFAULT_OPTIONS.actions,\n rollAttack: TravellerCreatureSheet.#onRollAttack,\n rollSkill: TravellerCreatureSheet.#onRollSkill,\n addSkill: TravellerCreatureSheet.#onAddRow,\n deleteSkill: TravellerCreatureSheet.#onDeleteRow,\n addAttack: TravellerCreatureSheet.#onAddRow,\n deleteAttack: TravellerCreatureSheet.#onDeleteRow,\n addTrait: TravellerCreatureSheet.#onAddRow,\n deleteTrait: TravellerCreatureSheet.#onDeleteRow,\n },\n }\n\n /** @override */\n static PARTS = {\n sheet: {\n template: \"systems/mgt2/templates/actors/creature-sheet.html\",\n },\n }\n\n /** @override */\n tabGroups = { primary: \"combat\" }\n\n /** @override */\n async _prepareContext() {\n const context = await super._prepareContext();\n const actor = this.document;\n const enrich = (html) => foundry.applications.ux.TextEditor.implementation.enrichHTML(html ?? \"\", { async: true });\n\n context.enrichedBiography = await enrich(actor.system.biography);\n context.enrichedNotes = await enrich(actor.system.notes);\n context.sizeLabel = this._getSizeLabel(actor.system.life.max);\n context.sizeTraitLabel = this._getSizeTrait(actor.system.life.max);\n context.config = CONFIG.MGT2;\n\n return context;\n }\n\n _getSizeLabel(pdv) {\n if (pdv <= 2) return \"Souris / Rat\";\n if (pdv <= 5) return \"Chat\";\n if (pdv <= 7) return \"Blaireau / Chien\";\n if (pdv <= 13) return \"Chimpanzé / Chèvre\";\n if (pdv <= 28) return \"Humain\";\n if (pdv <= 35) return \"Vache / Cheval\";\n if (pdv <= 49) return \"Requin\";\n if (pdv <= 70) return \"Rhinocéros\";\n if (pdv <= 90) return \"Éléphant\";\n if (pdv <= 125) return \"Carnosaure\";\n return \"Sauropode / Baleine\";\n }\n\n _getSizeTrait(pdv) {\n if (pdv <= 2) return \"Petit (−4)\";\n if (pdv <= 5) return \"Petit (−3)\";\n if (pdv <= 7) return \"Petit (−2)\";\n if (pdv <= 13) return \"Petit (−1)\";\n if (pdv <= 28) return \"—\";\n if (pdv <= 35) return \"Grand (+1)\";\n if (pdv <= 49) return \"Grand (+2)\";\n if (pdv <= 70) return \"Grand (+3)\";\n if (pdv <= 90) return \"Grand (+4)\";\n if (pdv <= 125) return \"Grand (+5)\";\n return \"Grand (+6)\";\n }\n\n // ───────────────────────────────────────────────────────── Roll Helpers\n\n static async #postCreatureRoll({ actor, roll, rollLabel, dm, difficulty, difficultyLabel, rollMode, extraTooltip, damageFormula }) {\n const diffTarget = MGT2Helper.getDifficultyValue(difficulty ?? \"Average\");\n const hasDifficulty = !!difficulty;\n const success = hasDifficulty ? roll.total >= diffTarget : true;\n const effect = roll.total - diffTarget;\n const effectStr = (effect >= 0 ? \"+\" : \"\") + effect;\n\n const diceRawTotal = roll.dice.reduce((s, d) => s + d.total, 0);\n const breakdownParts = [game.i18n.localize(\"MGT2.Chat.Roll.Dice\") + \" \" + diceRawTotal];\n if (dm !== 0) breakdownParts.push(`DM ${dm >= 0 ? \"+\" : \"\"}${dm}`);\n if (hasDifficulty) breakdownParts.push(game.i18n.localize(\"MGT2.Chat.Roll.Effect\") + \" \" + effectStr);\n if (extraTooltip) breakdownParts.push(extraTooltip);\n const rollBreakdown = breakdownParts.join(\" | \");\n\n const showRollDamage = success && !!damageFormula;\n\n const chatData = {\n creatureName: actor.name,\n creatureImg: actor.img,\n rollLabel,\n formula: roll.formula,\n total: roll.total,\n tooltip: await roll.getTooltip(),\n rollBreakdown,\n difficulty: hasDifficulty ? diffTarget : null,\n difficultyLabel: difficultyLabel ?? MGT2Helper.getDifficultyDisplay(difficulty),\n success: hasDifficulty ? success : null,\n failure: hasDifficulty ? !success : null,\n effect: hasDifficulty ? effect : null,\n effectStr: hasDifficulty ? effectStr : null,\n modifiers: dm !== 0 ? [`DM ${dm >= 0 ? \"+\" : \"\"}${dm}`] : [],\n showRollDamage,\n };\n\n const chatContent = await renderTemplate(\n \"systems/mgt2/templates/chat/creature-roll.html\",\n chatData\n );\n\n const flags = showRollDamage ? {\n mgt2: {\n damage: {\n formula: normalizeDice(damageFormula),\n effect,\n rollObjectName: actor.name,\n rollTypeName: rollLabel,\n }\n }\n } : {};\n\n await ChatMessage.create({\n content: chatContent,\n speaker: ChatMessage.getSpeaker({ actor }),\n rolls: [roll],\n rollMode: rollMode ?? game.settings.get(\"core\", \"rollMode\"),\n flags,\n });\n\n return { success, effect, total: roll.total };\n }\n\n // ───────────────────────────────────────────────────────── Roll Handlers\n\n /** Roll a skill check (2d6 + level vs difficulty) — uses unified dialog */\n static async #onRollSkill(event, target) {\n const index = parseInt(target.dataset.index ?? 0);\n const actor = this.document;\n const skill = actor.system.skills[index];\n if (!skill) return;\n\n const result = await RollPromptHelper.roll({\n isCreature: true,\n showSkillSelector: false,\n skillName: skill.name,\n skillLevel: skill.level,\n difficulty: \"Average\",\n title: game.i18n.localize(\"MGT2.Creature.RollSkill\") + \" — \" + skill.name,\n });\n if (!result) return;\n\n const customDM = parseInt(result.customDM ?? \"0\", 10) || 0;\n const skillLevel = parseInt(skill.level ?? 0, 10) || 0;\n const dm = skillLevel + customDM;\n const diceModifier = result.diceModifier ?? \"\";\n\n // Build formula exactly like character-sheet: parts joined without spaces\n const parts = [];\n if (diceModifier) {\n parts.push(\"3d6\", diceModifier);\n } else {\n parts.push(\"2d6\");\n }\n if (dm !== 0) parts.push(MGT2Helper.getFormulaDM(dm));\n const fullFormula = parts.join(\"\");\n\n const roll = await new Roll(fullFormula).evaluate();\n const rollLabel = `${skill.name.toUpperCase()} (${skillLevel >= 0 ? \"+\" : \"\"}${skillLevel})`;\n\n const tooltipParts = [`Dés: ${roll.dice.reduce((s, d) => s + d.total, 0)}`];\n if (skillLevel !== 0) tooltipParts.push(`${skill.name} ${skillLevel >= 0 ? \"+\" : \"\"}${skillLevel}`);\n if (customDM !== 0) tooltipParts.push(`MD perso ${customDM >= 0 ? \"+\" : \"\"}${customDM}`);\n\n await TravellerCreatureSheet.#postCreatureRoll({\n actor, roll, rollLabel,\n dm,\n difficulty: result.difficulty,\n rollMode: result.rollMode,\n extraTooltip: tooltipParts.join(\" | \"),\n });\n }\n\n /** Roll an attack: dialog with skill selector, then roll 2d6+skill+DM vs difficulty; on success roll damage */\n static async #onRollAttack(event, target) {\n const index = parseInt(target.dataset.index ?? 0);\n const actor = this.document;\n const attack = actor.system.attacks[index];\n if (!attack) return;\n\n const skills = actor.system.skills ?? [];\n\n const result = await RollPromptHelper.roll({\n isCreature: true,\n showSkillSelector: true,\n creatureSkills: skills,\n selectedSkillIndex: attack.skill ?? -1,\n difficulty: \"Average\",\n title: game.i18n.localize(\"MGT2.Creature.RollAttack\") + \" — \" + attack.name,\n });\n if (!result) return;\n\n const skillIndex = parseInt(result.creatureSkillIndex ?? \"-1\", 10);\n const chosenSkill = (skillIndex >= 0 && skillIndex < skills.length) ? skills[skillIndex] : null;\n const skillLevel = parseInt(chosenSkill?.level ?? 0, 10) || 0;\n const customDM = parseInt(result.customDM ?? \"0\", 10) || 0;\n const dm = skillLevel + customDM;\n const diceModifier = result.diceModifier ?? \"\";\n\n // Build formula exactly like character-sheet: parts joined without spaces\n const parts = [];\n if (diceModifier) {\n parts.push(\"3d6\", diceModifier);\n } else {\n parts.push(\"2d6\");\n }\n if (dm !== 0) parts.push(MGT2Helper.getFormulaDM(dm));\n const fullFormula = parts.join(\"\");\n\n const roll = await new Roll(fullFormula).evaluate();\n const rollLabel = chosenSkill\n ? `${attack.name} — ${chosenSkill.name} (${skillLevel >= 0 ? \"+\" : \"\"}${skillLevel})`\n : attack.name;\n\n const tooltipParts = [`Dés: ${roll.dice.reduce((s, d) => s + d.total, 0)}`];\n if (chosenSkill) tooltipParts.push(`${chosenSkill.name} ${skillLevel >= 0 ? \"+\" : \"\"}${skillLevel}`);\n if (customDM !== 0) tooltipParts.push(`MD perso ${customDM >= 0 ? \"+\" : \"\"}${customDM}`);\n\n await TravellerCreatureSheet.#postCreatureRoll({\n actor, roll, rollLabel,\n dm,\n difficulty: result.difficulty,\n rollMode: result.rollMode,\n extraTooltip: tooltipParts.join(\" | \"),\n damageFormula: attack.damage || null,\n });\n }\n\n // ───────────────────────────────────────────────────────── CRUD Handlers\n\n static async #onAddRow(event, target) {\n const prop = target.dataset.prop;\n if (!prop) return;\n const actor = this.document;\n const arr = foundry.utils.deepClone(actor.system[prop] ?? []);\n arr.push(this._getDefaultRow(prop));\n await actor.update({ [`system.${prop}`]: arr });\n }\n\n static async #onDeleteRow(event, target) {\n const prop = target.dataset.prop;\n const index = parseInt(target.dataset.index);\n if (!prop || isNaN(index)) return;\n const actor = this.document;\n const arr = foundry.utils.deepClone(actor.system[prop] ?? []);\n arr.splice(index, 1);\n await actor.update({ [`system.${prop}`]: arr });\n }\n\n _getDefaultRow(prop) {\n switch (prop) {\n case \"skills\": return { name: \"\", level: 0, note: \"\" };\n case \"attacks\": return { name: \"\", damage: \"1D\", skill: -1, description: \"\" };\n case \"traits\": return { name: \"\", value: \"\", description: \"\" };\n default: return {};\n }\n }\n}\n","const { HandlebarsApplicationMixin } = foundry.applications.api;\nimport { MGT2Helper } from \"../../helper.js\";\n\nexport default class TravellerItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {\n\n /** @override */\n static DEFAULT_OPTIONS = {\n classes: [\"mgt2\", \"sheet\", \"item\"],\n position: { width: 630 },\n form: {\n submitOnChange: true,\n closeOnSubmit: false,\n },\n window: { resizable: true },\n actions: {\n careerEventCreate: TravellerItemSheet.#onCareerEventCreate,\n careerEventDelete: TravellerItemSheet.#onCareerEventDelete,\n optionCreate: TravellerItemSheet.#onOptionCreate,\n optionDelete: TravellerItemSheet.#onOptionDelete,\n modifierCreate: TravellerItemSheet.#onModifierCreate,\n modifierDelete: TravellerItemSheet.#onModifierDelete,\n },\n }\n\n /** Dynamic PARTS: template resolved per item type */\n get PARTS() {\n const type = this.document?.type ?? \"item\";\n return {\n sheet: {\n template: `systems/mgt2/templates/items/${type}-sheet.html`,\n },\n };\n }\n\n /** Resolve template dynamically based on item type */\n get template() {\n return `systems/mgt2/templates/items/${this.document.type}-sheet.html`;\n }\n\n tabGroups = { primary: \"tab1\" }\n\n /** @override */\n async _prepareContext() {\n const item = this.document;\n const source = item.toObject();\n\n const settings = {\n usePronouns: game.settings.get(\"mgt2\", \"usePronouns\"),\n };\n\n let containers = null;\n let computers = null;\n let hadContainer = false;\n\n if (item.actor !== null) {\n hadContainer = true;\n containers = [{ name: \"\", _id: \"\" }].concat(item.actor.getContainers());\n computers = [{ name: \"\", _id: \"\" }].concat(item.actor.getComputers());\n }\n\n let weight = null;\n if (item.system.hasOwnProperty(\"weight\")) {\n weight = MGT2Helper.convertWeightForDisplay(item.system.weight);\n }\n\n let skills = [];\n if (this.actor !== null) {\n for (let actorItem of this.actor.items) {\n if (actorItem.type === \"talent\" && actorItem.system.subType === \"skill\")\n skills.push({ _id: actorItem._id, name: actorItem.getRollDisplay() });\n }\n }\n skills.sort(MGT2Helper.compareByName);\n skills = [{ _id: \"NP\", name: game.i18n.localize(\"MGT2.Items.NotProficient\") }].concat(skills);\n\n const enrich = (html) => foundry.applications.ux.TextEditor.implementation.enrichHTML(html ?? \"\", { async: true });\n\n return {\n item: item,\n document: item,\n cssClass: this.isEditable ? \"editable\" : \"locked\",\n system: item.system,\n source: source.system,\n fields: item.schema.fields,\n systemFields: item.system.schema.fields,\n isEditable: this.isEditable,\n isGM: game.user.isGM,\n config: CONFIG.MGT2,\n settings: settings,\n containers: containers,\n computers: computers,\n hadContainer: hadContainer,\n weight: weight,\n unitlabels: { weight: MGT2Helper.getWeightLabel() },\n skills: skills,\n enrichedDescription: await enrich(item.system.description),\n enrichedDescriptionLong: await enrich(item.system.descriptionLong),\n enrichedNotes: await enrich(item.system.notes),\n enrichedLockedDescription: await enrich(item.system.lockedDescription),\n };\n }\n\n /** @override — resolve the per-type template before rendering */\n async _renderHTML(context, options) {\n const templatePath = `systems/mgt2/templates/items/${this.document.type}-sheet.html`;\n const html = await foundry.applications.handlebars.renderTemplate(templatePath, context);\n return { sheet: html };\n }\n\n /** @override — put rendered HTML into the window content */\n _replaceHTML(result, content, options) {\n content.innerHTML = result.sheet;\n // Inject theme class dynamically (can't use game.settings in static DEFAULT_OPTIONS)\n const theme = game.settings.get(\"mgt2\", \"theme\");\n if (theme) this.element.classList.add(theme);\n this._activateTabGroups();\n this._bindItemEvents();\n }\n\n /** Bind CSS class-based events (templates not yet migrated to data-action) */\n _bindItemEvents() {\n const html = this.element;\n if (!this.isEditable) return;\n const bind = (sel, handler) => {\n for (const el of html.querySelectorAll(sel)) {\n el.addEventListener(\"click\", (ev) => handler.call(this, ev, ev.currentTarget));\n }\n };\n bind(\".event-create\", TravellerItemSheet.#onCareerEventCreate);\n bind(\".event-delete\", TravellerItemSheet.#onCareerEventDelete);\n bind(\".options-create\", TravellerItemSheet.#onOptionCreate);\n bind(\".options-delete\", TravellerItemSheet.#onOptionDelete);\n bind(\".modifiers-create\", TravellerItemSheet.#onModifierCreate);\n bind(\".modifiers-delete\", TravellerItemSheet.#onModifierDelete);\n\n // Activate ProseMirror editors for HTMLField fields\n for (const btn of html.querySelectorAll(\".editor-edit\")) {\n btn.addEventListener(\"click\", async (event) => {\n event.preventDefault();\n const editorWrapper = btn.closest(\".editor\");\n if (!editorWrapper) return;\n const editorContent = editorWrapper.querySelector(\".editor-content\");\n if (!editorContent || editorContent.classList.contains(\"ProseMirror\")) return;\n const target = editorContent.dataset.edit;\n const value = foundry.utils.getProperty(this.document, target) ?? \"\";\n btn.remove();\n editorWrapper.classList.add(\"prosemirror\");\n await ProseMirrorEditor.create(editorContent, value, {\n document: this.document,\n fieldName: target,\n plugins: {},\n collaborate: false,\n });\n });\n }\n }\n\n _activateTabGroups() {\n for (const [group, activeTab] of Object.entries(this.tabGroups)) {\n const nav = this.element.querySelector(`nav[data-group=\"${group}\"], .horizontal-tabs`);\n if (!nav) continue;\n\n nav.querySelectorAll('[data-tab]').forEach(link => {\n link.classList.toggle('active', link.dataset.tab === activeTab);\n link.addEventListener('click', event => {\n event.preventDefault();\n this.tabGroups[group] = link.dataset.tab;\n this.render();\n });\n });\n\n this.element.querySelectorAll(`.itemsheet-panel [data-tab], [data-group=\"${group}\"][data-tab]`).forEach(content => {\n content.classList.toggle('active', content.dataset.tab === activeTab);\n });\n }\n }\n\n /** @override — process form data before submit (weight/qty/cost conversions + container logic) */\n _prepareSubmitData(event, form, formData) {\n const data = foundry.utils.expandObject(formData.object);\n\n if (data.hasOwnProperty(\"weight\")) {\n data.system = data.system || {};\n data.system.weight = MGT2Helper.convertWeightFromInput(data.weight);\n delete data.weight;\n }\n\n if (data.system?.hasOwnProperty(\"quantity\")) {\n data.system.quantity = MGT2Helper.getIntegerFromInput(data.system.quantity);\n }\n\n if (data.system?.hasOwnProperty(\"cost\")) {\n data.system.cost = MGT2Helper.getIntegerFromInput(data.system.cost);\n }\n\n // Container/equipped logic\n if (data.system?.hasOwnProperty(\"container\") && this.document.system.hasOwnProperty(\"equipped\")) {\n const equippedChange = this.document.system.equipped !== data.system.equipped;\n const containerChange = this.document.system.container?.id !== data.system.container?.id;\n\n if (equippedChange && data.system.equipped === true) {\n data.system.container = { id: \"\" };\n } else if (containerChange && data.system.container?.id !== \"\" && this.document.system.container?.id === \"\") {\n data.system.equipped = false;\n }\n }\n\n return foundry.utils.flattenObject(data);\n }\n\n // =========================================================\n // Actions\n // =========================================================\n\n static async #onCareerEventCreate(event) {\n event.preventDefault();\n const events = this.document.system.events;\n let newEvents;\n if (!events || events.length === 0) {\n newEvents = [{ age: \"\", description: \"\" }];\n } else {\n newEvents = [...events, { age: \"\", description: \"\" }];\n }\n return this.document.update({ system: { events: newEvents } });\n }\n\n static async #onCareerEventDelete(event, target) {\n event.preventDefault();\n const element = target.closest(\"[data-events-part]\");\n const index = Number(element.dataset.eventsPart);\n const events = foundry.utils.deepClone(this.document.system.events);\n const newEvents = Object.entries(events)\n .filter(([key]) => Number(key) !== index)\n .map(([, val]) => val);\n return this.document.update({ system: { events: newEvents } });\n }\n\n static async #onOptionCreate(event, target) {\n event.preventDefault();\n const property = target.dataset.property;\n const options = this.document.system[property];\n let newOptions;\n if (!options || options.length === 0) {\n newOptions = [{ name: \"\", description: \"\" }];\n } else {\n newOptions = [...options, { name: \"\", description: \"\" }];\n }\n return this.document.update({ [`system.${property}`]: newOptions });\n }\n\n static async #onOptionDelete(event, target) {\n event.preventDefault();\n const element = target.closest(\"[data-options-part]\");\n const property = element.dataset.property;\n const index = Number(element.dataset.optionsPart);\n const options = foundry.utils.deepClone(this.document.system[property]);\n const newOptions = Object.entries(options)\n .filter(([key]) => Number(key) !== index)\n .map(([, val]) => val);\n return this.document.update({ [`system.${property}`]: newOptions });\n }\n\n static async #onModifierCreate(event) {\n event.preventDefault();\n const modifiers = this.document.system.modifiers;\n let newModifiers;\n if (!modifiers || modifiers.length === 0) {\n newModifiers = [{ characteristic: \"Endurance\", value: null }];\n } else {\n newModifiers = [...modifiers, { characteristic: \"Endurance\", value: null }];\n }\n return this.document.update({ system: { modifiers: newModifiers } });\n }\n\n static async #onModifierDelete(event, target) {\n event.preventDefault();\n const element = target.closest(\"[data-modifiers-part]\");\n const index = Number(element.dataset.modifiersPart);\n const modifiers = foundry.utils.deepClone(this.document.system.modifiers);\n const newModifiers = Object.entries(modifiers)\n .filter(([key]) => Number(key) !== index)\n .map(([, val]) => val);\n return this.document.update({ system: { modifiers: newModifiers } });\n }\n}\n","/**\n * Define a set of template paths to pre-load\n * Pre-loaded templates are compiled and cached for fast access when rendering\n * @return {Promise}\n */\nexport const preloadHandlebarsTemplates = async function() {\n\n const templatePaths = [\n \"systems/mgt2/templates/items/armor-sheet.html\",\n \"systems/mgt2/templates/items/career-sheet.html\",\n \"systems/mgt2/templates/items/computer-sheet.html\",\n \"systems/mgt2/templates/items/contact-sheet.html\",\n \"systems/mgt2/templates/items/container-sheet.html\",\n \"systems/mgt2/templates/items/disease-sheet.html\",\n \"systems/mgt2/templates/items/equipment-sheet.html\",\n \"systems/mgt2/templates/items/item-sheet.html\",\n \"systems/mgt2/templates/items/species-sheet.html\",\n \"systems/mgt2/templates/items/talent-sheet.html\",\n \"systems/mgt2/templates/items/weapon-sheet.html\",\n \"systems/mgt2/templates/items/parts/sheet-configuration.html\",\n \"systems/mgt2/templates/items/parts/sheet-physical-item.html\",\n \"systems/mgt2/templates/items/parts/sheet-physical-item-tab.html\",\n \"systems/mgt2/templates/roll-prompt.html\",\n \"systems/mgt2/templates/chat/roll.html\",\n //\"systems/mgt2/templates/chat/roll-characteristic.html\",\n \"systems/mgt2/templates/chat/radiation.html\",\n \"systems/mgt2/templates/actors/actor-config-sheet.html\",\n \"systems/mgt2/templates/actors/actor-config-characteristic-sheet.html\",\n \"systems/mgt2/templates/actors/trait-sheet.html\",\n \"systems/mgt2/templates/actors/creature-sheet.html\",\n \"systems/mgt2/templates/chat/creature-roll.html\",\n \"systems/mgt2/templates/editor-fullview.html\"\n ];\n \n const loader = foundry.applications?.handlebars?.loadTemplates ?? loadTemplates;\n return loader(templatePaths);\n };","import { MGT2Helper } from \"./helper.js\";\n\nexport class ChatHelper {\n\n static setupCardListeners(message, element, messageData) {\n if (!message || !element) {\n return;\n }\n\n // Restore disabled state for already-applied buttons\n const appliedActions = message.flags?.mgt2?.appliedActions ?? [];\n if (appliedActions.length > 0) {\n appliedActions.forEach(action => {\n element.querySelectorAll(`button[data-action=\"${action}\"]`).forEach(btn => {\n btn.disabled = true;\n });\n });\n }\n\n // Apply buttons are GM-only: hide them for players\n const GM_ACTIONS = [\"damage\", \"healing\", \"surgeryDamage\"];\n if (!game.user.isGM) {\n GM_ACTIONS.forEach(action => {\n element.querySelectorAll(`button[data-action=\"${action}\"]`).forEach(btn => {\n btn.style.display = \"none\";\n });\n });\n // Hide the buttons container if no visible buttons remain\n element.querySelectorAll(\".mgt2-buttons\").forEach(container => {\n const hasVisible = [...container.querySelectorAll(\"button\")]\n .some(b => b.style.display !== \"none\");\n if (!hasVisible) container.style.display = \"none\";\n });\n }\n\n element.querySelectorAll('button[data-action=\"rollDamage\"]').forEach(el => {\n el.addEventListener('click', async event => {\n await this._processRollDamageButtonEvent(message, event);\n });\n });\n\n element.querySelectorAll('button[data-action=\"rollRadiation\"]').forEach(el => {\n el.addEventListener('click', async event => {\n await this._rollRadiationDamage(message, event);\n });\n });\n\n element.querySelectorAll('button[data-action=\"damage\"]').forEach(el => {\n el.addEventListener('click', async event => {\n await this._applyChatCardDamage(message, event);\n });\n });\n\n element.querySelectorAll('button[data-action=\"healing\"]').forEach(el => {\n el.addEventListener('click', async event => {\n await this._applyChatCardHealing(message, event);\n });\n });\n\n element.querySelectorAll('button[data-action=\"surgeryDamage\"]').forEach(el => {\n el.addEventListener('click', async event => {\n await this._applyChatCardSurgeryDamage(message, event);\n });\n });\n\n element.querySelectorAll('button[data-index]:not([data-action])').forEach(el => {\n el.addEventListener('click', async event => {\n await this._processRollButtonEvent(message, event);\n });\n });\n }\n\n static async _processRollButtonEvent(message, event) {\n event.preventDefault();\n event.stopPropagation();\n let buttons = message.flags.mgt2.buttons;\n const index = event.target.dataset.index;\n const button = buttons[index];\n let roll = await new Roll(button.formula, {}).roll();\n\n const chatData = {\n user: game.user.id,\n speaker: message.speaker,\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total * 100) / 100,\n rollObjectName: button.message.objectName,\n rollMessage: MGT2Helper.format(button.message.flavor, Math.round(roll.total * 100) / 100),\n };\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/roll.html\", chatData);\n chatData.content = html;\n return roll.toMessage(chatData);\n }\n\n static async _processRollDamageButtonEvent(message, event) {\n event.preventDefault();\n event.stopPropagation();\n const damageFlags = message.flags?.mgt2?.damage;\n if (!damageFlags?.formula) {\n ui.notifications.warn(game.i18n.localize(\"MGT2.Errors.InvalidRollFormula\"));\n return;\n }\n\n const effect = damageFlags.effect ?? 0;\n const effectPart = effect > 0 ? `+${effect}` : effect < 0 ? `${effect}` : \"\";\n const rollFormula = damageFlags.formula + effectPart;\n\n let roll;\n try {\n roll = await new Roll(rollFormula, {}).roll();\n } catch (e) {\n ui.notifications.warn(game.i18n.localize(\"MGT2.Errors.InvalidRollFormula\"));\n return;\n }\n\n const rollTypeName = damageFlags.rollTypeName\n ? damageFlags.rollTypeName + \" \" + game.i18n.localize(\"MGT2.Actor.Damage\")\n : null;\n\n const ap = damageFlags.ap ?? 0;\n const blast = damageFlags.blast ?? 0;\n const stun = damageFlags.stun ?? false;\n const radiation = damageFlags.radiation ?? false;\n\n const chatData = {\n user: game.user.id,\n speaker: message.speaker,\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total * 100) / 100,\n showButtons: true,\n hasDamage: true,\n rollTypeName,\n rollObjectName: damageFlags.rollObjectName,\n apValue: ap > 0 ? ap : null,\n blastRadius: blast > 0 ? blast : null,\n stunWeapon: stun || null,\n radiationWeapon: radiation || null,\n };\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/roll.html\", chatData);\n chatData.content = html;\n\n // Persist ap, blast, stun, radiation in damage message flags so handlers can read them\n if (ap > 0 || blast > 0 || stun || radiation) chatData.flags = { mgt2: { damage: { ap, blast, stun, radiation, rollObjectName: damageFlags.rollObjectName } } };\n\n return roll.toMessage(chatData);\n }\n\n static async #markButtonApplied(message, btn, action) {\n const existing = message.flags?.mgt2?.appliedActions ?? [];\n if (!existing.includes(action)) {\n await message.setFlag(\"mgt2\", \"appliedActions\", [...existing, action]);\n }\n if (btn) btn.disabled = true;\n }\n\n static async _applyChatCardDamage(message, event) {\n if (game.user.targets.size === 0) {\n ui.notifications.warn(game.i18n.localize(\"MGT2.Errors.NoTokenSelected\"));\n return;\n }\n const btn = event.currentTarget;\n const roll = message.rolls[0];\n const amount = Math.round(roll.total * 100) / 100;\n const ap = message.flags?.mgt2?.damage?.ap ?? 0;\n const stun = message.flags?.mgt2?.damage?.stun ?? false;\n await Promise.all([...game.user.targets].map(async t => {\n const result = await t.actor.applyDamage(amount, { ap, stun });\n if (stun) {\n const incapRounds = result?.incapRounds ?? 0;\n if (incapRounds > 0) {\n ui.notifications.warn(game.i18n.format(\"MGT2.Notifications.StunIncapacitated\", { name: t.actor.name, rounds: incapRounds }));\n } else {\n ui.notifications.info(game.i18n.format(\"MGT2.Notifications.StunDamageApplied\", { name: t.actor.name, amount }));\n }\n } else {\n const notifKey = ap > 0 ? \"MGT2.Notifications.DamageAppliedAP\" : \"MGT2.Notifications.DamageApplied\";\n ui.notifications.info(game.i18n.format(notifKey, { name: t.actor.name, amount, ap }));\n }\n }));\n await ChatHelper.#markButtonApplied(message, btn, \"damage\");\n }\n\n static async _applyChatCardHealing(message, event) {\n if (game.user.targets.size === 0) {\n ui.notifications.warn(game.i18n.localize(\"MGT2.Errors.NoTokenSelected\"));\n return;\n }\n const btn = event.currentTarget;\n const amount = message.flags?.mgt2?.healing?.amount\n ?? message.flags?.mgt2?.surgery?.healing\n ?? Math.max(1, message.rolls[0].total);\n await Promise.all([...game.user.targets].map(async t => {\n await t.actor.applyHealing(amount);\n ui.notifications.info(game.i18n.format(\"MGT2.Notifications.HealingApplied\", { name: t.actor.name, amount }));\n }));\n await ChatHelper.#markButtonApplied(message, btn, \"healing\");\n }\n\n static async _applyChatCardSurgeryDamage(message, event) {\n if (game.user.targets.size === 0) {\n ui.notifications.warn(game.i18n.localize(\"MGT2.Errors.NoTokenSelected\"));\n return;\n }\n const btn = event.currentTarget;\n const amount = message.flags?.mgt2?.surgery?.surgeryDamage ?? 3;\n await Promise.all([...game.user.targets].map(async t => {\n await t.actor.applyDamage(amount, { ignoreArmor: true });\n ui.notifications.info(game.i18n.format(\"MGT2.Notifications.DamageApplied\", { name: t.actor.name, amount }));\n }));\n await ChatHelper.#markButtonApplied(message, btn, \"surgeryDamage\");\n }\n\n static async _rollRadiationDamage(message, event) {\n event.preventDefault();\n event.stopPropagation();\n const damageFlags = message.flags?.mgt2?.damage;\n const rollObjectName = damageFlags?.rollObjectName ?? \"\";\n\n // 2D × 20 rads (MGT2 rule: 2d6 × 20)\n const roll = await new Roll(\"2d6 * 20\", {}).roll();\n\n const chatData = {\n user: game.user.id,\n speaker: message.speaker,\n formula: roll._formula,\n tooltip: await roll.getTooltip(),\n total: Math.round(roll.total),\n rollObjectName,\n };\n\n const html = await foundry.applications.handlebars.renderTemplate(\"systems/mgt2/templates/chat/radiation.html\", chatData);\n chatData.content = html;\n return roll.toMessage(chatData);\n }\n}","export const registerSettings = function () {\n\n game.settings.register(\"mgt2\", \"theme\", {\n name: \"MGT2.Settings.theme.name\",\n hint: \"MGT2.Settings.theme.hint\",\n scope: \"client\",\n config: true,\n default: \"black-and-red\",\n type: String,\n choices: {\n \"black-and-red\": \"MGT2.Themes.BlackAndRed\",\n \"mwamba\": \"MGT2.Themes.Mwamba\",\n \"blue\": \"MGT2.Themes.Blue\"\n },\n requiresReload: true\n });\n\n game.settings.register('mgt2', 'usePronouns', {\n name: \"MGT2.Settings.usePronouns.name\",\n hint: \"MGT2.Settings.usePronouns.hint\",\n default: false,\n scope: 'world',\n type: Boolean,\n config: true,\n requiresReload: false\n });\n\n game.settings.register('mgt2', 'useGender', {\n name: \"MGT2.Settings.useGender.name\",\n hint: \"MGT2.Settings.useGender.hint\",\n default: false,\n scope: 'world',\n type: Boolean,\n config: true,\n requiresReload: false\n });\n\n game.settings.register('mgt2', 'showLife', {\n name: \"MGT2.Settings.showLife.name\",\n hint: \"MGT2.Settings.showLife.hint\",\n default: false,\n scope: 'world',\n type: Boolean,\n config: true,\n requiresReload: false\n });\n\n // game.settings.register('mgt2', 'useWeightMetric', {\n // name: \"MGT2.Settings.useWeightMetric.name\",\n // hint: \"MGT2.Settings.useWeightMetric.hint\",\n // default: true,\n // scope: 'world',\n // type: Boolean,\n // config: true,\n // requiresReload: true\n // });\n\n // game.settings.register('mgt2', 'useDistanceMetric', {\n // name: \"MGT2.Settings.useDistanceMetric.name\",\n // hint: \"MGT2.Settings.useDistanceMetric.hint\",\n // default: true,\n // scope: 'world',\n // type: Boolean,\n // config: true,\n // requiresReload: true\n // });\n\n // game.settings.register('mgt2', 'showTrash', {\n // name: \"Show Trash tab to Player\",\n // hint: \"Player can see the Trash tab and recover item\",\n // default: false,\n // scope: 'world',\n // type: Boolean,\n // config: true,\n // requiresReload: false\n // });\n\n /*game.settings.register('mgt2', 'containerDropIn', {\n name: \"Test\",\n hint: \"Mon hint\",\n default: true,\n scope: 'client',\n type: Boolean,\n config: true\n });*/\n};\n","import {\n CharacterData,\n VehiculeData,\n CreatureData,\n ItemData,\n EquipmentData,\n DiseaseData,\n CareerData,\n TalentData,\n ContactData,\n ArmorData,\n ComputerData,\n WeaponData,\n ItemContainerData,\n SpeciesData\n} from \"./models/index.mjs\";\n\nimport { MGT2 } from \"./config.js\";\nimport { TravellerActor, MGT2Combatant } from \"./actors/actor.js\";\nimport { TravellerItem } from \"./item.js\";\nimport { TravellerItemSheet, TravellerCharacterSheet, TravellerVehiculeSheet, TravellerCreatureSheet } from \"./applications/sheets/_module.mjs\";\nimport { preloadHandlebarsTemplates } from \"./templates.js\";\n//import { MGT2Helper } from \"./helper.js\";\nimport {ChatHelper} from \"./chatHelper.js\";\n\n/* -------------------------------------------- */\n/* Foundry VTT Initialization */\n/* -------------------------------------------- */\nimport { registerSettings } from \"./settings.js\";\n\nfunction registerHandlebarsHelpers() {\n Handlebars.registerHelper('showDM', function (dm) {\n if (dm === 0) return \"0\";\n if (dm > 0) return `+${dm}`;\n if (dm < 0) return `${dm}`;\n return \"\";\n });\n}\n\nHooks.once(\"init\", async function () {\n CONFIG.MGT2 = MGT2;\n CONFIG.Combat.initiative = {\n formula: \"2d6 + @initiative\",\n decimals: 2\n };\n\n CONFIG.Actor.trackableAttributes = {\n character: {\n bar: [\"life\",\n \"characteristics.strength\",\n \"characteristics.dexterity\",\n \"characteristics.endurance\",\n \"characteristics.intellect\",\n \"characteristics.education\",\n \"characteristics.social\",\n \"characteristics.morale\",\n \"characteristics.luck\",\n \"characteristics.sanity\",\n \"characteristics.charm\",\n \"characteristics.psionic\",\n \"characteristics.other\"\n ],\n value: [\"life.value\",\n \"health.radiations\",\n \"characteristics.strength.value\",\n \"characteristics.dexterity.value\",\n \"characteristics.endurance.value\",\n \"characteristics.intellect.value\",\n \"characteristics.education.value\",\n \"characteristics.social.value\",\n \"characteristics.morale.value\",\n \"characteristics.luck.value\",\n \"characteristics.sanity.value\",\n \"characteristics.charm.value\",\n \"characteristics.psionic.value\",\n \"characteristics.other.value\"]\n },\n creature: {\n bar: [\"life\"],\n value: [\"life.value\", \"life.max\", \"speed\", \"armor\", \"psi\"]\n }\n };\n\n game.mgt2 = {\n TravellerActor,\n TravellerItem\n };\n\n registerHandlebarsHelpers();\n registerSettings();\n\n CONFIG.Combatant.documentClass = MGT2Combatant;\n CONFIG.Actor.documentClass = TravellerActor;\n CONFIG.Item.documentClass = TravellerItem;\n\n foundry.documents.collections.Actors.unregisterSheet(\"core\", foundry.appv1.sheets.ActorSheet);\n foundry.documents.collections.Actors.registerSheet(\"mgt2\", TravellerCharacterSheet, { types: [\"character\"], makeDefault: true, label: \"Traveller Sheet\" });\n foundry.documents.collections.Actors.registerSheet(\"mgt2\", TravellerVehiculeSheet, { types: [\"vehicule\"], makeDefault: true, label: \"Vehicule Sheet\" });\n foundry.documents.collections.Actors.registerSheet(\"mgt2\", TravellerCreatureSheet, { types: [\"creature\"], makeDefault: true, label: \"Creature Sheet\" });\n\n foundry.documents.collections.Items.unregisterSheet(\"core\", foundry.appv1.sheets.ItemSheet);\n foundry.documents.collections.Items.registerSheet(\"mgt2\", TravellerItemSheet, { makeDefault: true });\n\n Object.assign(CONFIG.Actor.dataModels, {\n \"character\": CharacterData,\n \"vehicule\": VehiculeData,\n \"creature\": CreatureData\n });\n\n Object.assign(CONFIG.Item.dataModels, {\n \"item\": ItemData,\n \"equipment\": EquipmentData,\n \"disease\": DiseaseData,\n \"career\": CareerData,\n \"talent\": TalentData,\n \"contact\": ContactData,\n \"weapon\": WeaponData,\n \"computer\": ComputerData,\n \"armor\": ArmorData,\n \"container\": ItemContainerData,\n \"species\": SpeciesData\n });\n\n\n Hooks.on(\"renderChatMessageHTML\", (message, element, messageData) => {\n ChatHelper.setupCardListeners(message, element, messageData);\n });\n\n // Preload template partials\n await preloadHandlebarsTemplates();\n});\n\nexport { MGT2 };"],"names":["fields","HandlebarsApplicationMixin","DialogV2","renderTemplate","FormDataExtended"],"mappings":"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"} \ No newline at end of file diff --git a/src/module/actors/actor.js b/src/module/actors/actor.js index 52b2193..fb9f9c9 100644 --- a/src/module/actors/actor.js +++ b/src/module/actors/actor.js @@ -52,17 +52,18 @@ export class TravellerActor extends Actor { } } - applyDamage(amount, { ignoreArmor = false } = {}) { + applyDamage(amount, { ignoreArmor = false, ap = 0, stun = false } = {}) { if (this.type === "character") { - return ActorCharacter.applyDamage(this, amount, { ignoreArmor }); + return ActorCharacter.applyDamage(this, amount, { ignoreArmor, ap, stun }); } else if (this.type === "creature") { - if (isNaN(amount) || amount === 0) return; + if (isNaN(amount) || amount === 0) return Promise.resolve({ incapRounds: 0 }); if (amount < 0) amount = Math.abs(amount); - const armorValue = ignoreArmor ? 0 : (this.system.armor ?? 0); + const rawArmor = ignoreArmor ? 0 : (this.system.armor ?? 0); + const armorValue = Math.max(0, rawArmor - ap); const effective = Math.max(0, amount - armorValue); - if (effective === 0) return; + if (effective === 0) return Promise.resolve({ incapRounds: 0 }); const newValue = Math.max(0, (this.system.life.value ?? 0) - effective); - return this.update({ "system.life.value": newValue }); + return this.update({ "system.life.value": newValue }).then(() => ({ incapRounds: 0 })); } } diff --git a/src/module/actors/character-prompts.js b/src/module/actors/character-prompts.js index 52a9ac5..d396608 100644 --- a/src/module/actors/character-prompts.js +++ b/src/module/actors/character-prompts.js @@ -51,13 +51,14 @@ export class CharacterPrompts { } static async openEditorFullView(title, html) { + const safeTitle = title || game.i18n.localize("MGT2.Actor.Species") || "Species"; const htmlContent = await renderTemplate("systems/mgt2/templates/editor-fullview.html", { config: CONFIG.MGT2, - html + html: html ?? "" }); const theme = game.settings.get("mgt2", "theme"); await DialogV2.wait({ - window: { title }, + window: { title: safeTitle }, content: htmlContent, rejectClose: false, buttons: [ diff --git a/src/module/actors/character.js b/src/module/actors/character.js index dfd14c1..62beb1c 100644 --- a/src/module/actors/character.js +++ b/src/module/actors/character.js @@ -254,7 +254,10 @@ export class ActorCharacter { } updateData["system.inventory.weight"] = onHandWeight; - updateData["system.states.encumbrance"] = onHandWeight > $this.system.inventory.encumbrance.normal; + // Use the threshold from updateData if it was just recalculated (e.g. STR/END talent change), + // otherwise fall back to the persisted value. + const encumbranceThreshold = updateData["system.inventory.encumbrance.normal"] ?? $this.system.inventory.encumbrance.normal; + updateData["system.states.encumbrance"] = onHandWeight > encumbranceThreshold; await $this.update(updateData); @@ -275,6 +278,8 @@ export class ActorCharacter { let heavy = normal * 2; foundry.utils.setProperty(changed, "system.inventory.encumbrance.normal", normal); foundry.utils.setProperty(changed, "system.inventory.encumbrance.heavy", heavy); + // Also update the encumbrance state flag against the new threshold + foundry.utils.setProperty(changed, "system.states.encumbrance", $this.system.inventory.weight > normal); } //console.log(foundry.utils.getProperty(changed, "system.characteristics.strength.value")); @@ -331,25 +336,39 @@ export class ActorCharacter { // $this.update({ system: { characteristics: data } }); // } - static applyDamage($this, amount, { ignoreArmor = false } = {}) { - if (isNaN(amount) || amount === 0) return; + static async applyDamage($this, amount, { ignoreArmor = false, ap = 0, stun = false } = {}) { + if (isNaN(amount) || amount === 0) return { incapRounds: 0 }; const rank1 = $this.system.config.damages.rank1; const rank2 = $this.system.config.damages.rank2; const rank3 = $this.system.config.damages.rank3; + if (amount < 0) amount = Math.abs(amount); + + if (!ignoreArmor) { + const rawArmor = $this.system.inventory?.armor ?? 0; + const armorValue = Math.max(0, rawArmor - ap); + amount = Math.max(0, amount - armorValue); + if (amount === 0) return { incapRounds: 0 }; + } + + // ── Stun / Incapacitating: only deduct from endurance (rank3) ───────── + if (stun) { + const endKey = rank3; // "endurance" by default + const prevEnd = $this.system.characteristics[endKey].value; + const newEnd = Math.max(0, prevEnd - amount); + const incapRounds = newEnd === 0 ? Math.max(0, amount - prevEnd) : 0; + await $this.update({ + system: { characteristics: { [endKey]: { value: newEnd, dm: this.getModifier(newEnd) } } } + }); + return { incapRounds }; + } + + // ── Normal damage cascade: rank1 → rank2 → rank3 ──────────────────── const data = {}; data[rank1] = { value: $this.system.characteristics[rank1].value }; data[rank2] = { value: $this.system.characteristics[rank2].value }; data[rank3] = { value: $this.system.characteristics[rank3].value }; - if (amount < 0) amount = Math.abs(amount); - - if (!ignoreArmor) { - const armorValue = $this.system.inventory?.armor ?? 0; - amount = Math.max(0, amount - armorValue); - if (amount === 0) return; - } - for (const [key, rank] of Object.entries(data)) { if (rank.value > 0) { if (rank.value >= amount) { @@ -364,7 +383,8 @@ export class ActorCharacter { } } - $this.update({ system: { characteristics: data } }); + await $this.update({ system: { characteristics: data } }); + return { incapRounds: 0 }; } static applyHealing($this, amount, type) { diff --git a/src/module/applications/sheets/character-sheet.mjs b/src/module/applications/sheets/character-sheet.mjs index 1a0e051..32c5b72 100644 --- a/src/module/applications/sheets/character-sheet.mjs +++ b/src/module/applications/sheets/character-sheet.mjs @@ -3,6 +3,7 @@ import { MGT2 } from "../../config.js"; import { MGT2Helper } from "../../helper.js"; import { RollPromptHelper } from "../../roll-prompt.js"; import { CharacterPrompts } from "../../actors/character-prompts.js"; +import WeaponData from "../../models/items/weapon.mjs"; export default class TravellerCharacterSheet extends MGT2ActorSheet { @@ -200,8 +201,7 @@ export default class TravellerCharacterSheet extends MGT2ActorSheet { i._range = i.system.range.isMelee ? game.i18n.localize("MGT2.Melee") : MGT2Helper.getRangeDisplay(i.system.range); - if (i.system.traits?.length > 0) - i._subInfo = i.system.traits.map(x => x.name).join(", "); + i._subInfo = WeaponData.getTraitsSummary(i.system.traits); weapons.push(i); break; @@ -589,7 +589,14 @@ export default class TravellerCharacterSheet extends MGT2ActorSheet { encumbrance: this.actor.system.states.encumbrance, difficulty: null, damageFormula: null, + damageAP: 0, + blastRadius: 0, + stun: false, + radiation: false, isMelee: false, + isRanged: false, + bulky: false, + veryBulky: false, }; const cardButtons = []; @@ -659,6 +666,18 @@ export default class TravellerCharacterSheet extends MGT2ActorSheet { rollOptions.damageFormula = itemObj.system.damage; if (itemObj.type === "weapon") { rollOptions.isMelee = itemObj.system.range?.isMelee === true; + rollOptions.isRanged = itemObj.type === "weapon" && !itemObj.system.range?.isMelee; + rollOptions.damageAP = itemObj.system.traits?.ap ?? 0; + rollOptions.blastRadius = itemObj.system.traits?.blast ?? 0; + rollOptions.stun = itemObj.system.traits?.stun === true; + rollOptions.radiation = itemObj.system.traits?.radiation === true; + rollOptions.scope = itemObj.system.traits?.scope === true; + rollOptions.zeroG = itemObj.system.traits?.zeroG === true; + rollOptions.autoLevel = itemObj.system.traits?.auto ?? 0; + rollOptions.itemId = itemObj._id; + rollOptions.magazine = itemObj.system.magazine ?? -1; // -1 = not tracked + rollOptions.bulky = itemObj.system.traits?.bulky === true; + rollOptions.veryBulky = itemObj.system.traits?.veryBulky === true; } if (itemObj.type === "disease") { if (itemObj.system.subType === "disease") @@ -680,6 +699,10 @@ export default class TravellerCharacterSheet extends MGT2ActorSheet { const rollModifiers = []; const rollFormulaParts = []; + // Auto trait — fire mode + const autoLevel = rollOptions.autoLevel ?? 0; + const autoMode = autoLevel > 0 ? (userRollData.autoMode ?? "single") : "single"; + if (userRollData.diceModifier) { rollFormulaParts.push("3d6", userRollData.diceModifier); } else { @@ -730,14 +753,127 @@ export default class TravellerCharacterSheet extends MGT2ActorSheet { rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.CustomDM") + " " + (customDMVal > 0 ? `+${customDMVal}` : `${customDMVal}`)); } + if (rollOptions.isRanged) { + const rangedRange = parseInt(userRollData.rangedRange ?? "0", 10); + if (rangedRange === 1) { + rollFormulaParts.push("+1"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.RangeShort") + " +1"); + } else if (rangedRange === -2) { + rollFormulaParts.push("-2"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.RangeLong") + " −2"); + } else if (rangedRange === -4) { + rollFormulaParts.push("-4"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.RangeExtreme") + " −4"); + } + + const rangedAim = parseInt(userRollData.rangedAim ?? "0", 10); + // Auto: burst/full-auto cancels all aiming advantages (rules p.75) + if (rangedAim > 0 && autoMode === "single") { + rollFormulaParts.push(`+${rangedAim}`); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Aim") + ` +${rangedAim}`); + if (userRollData.rangedLaserSight === true || userRollData.rangedLaserSight === "true") { + rollFormulaParts.push("+1"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.LaserSight") + " +1"); + } + } + + const rangedFastTarget = parseInt(userRollData.rangedFastTarget ?? "0", 10); + if (rangedFastTarget < 0) { + rollFormulaParts.push(`${rangedFastTarget}`); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.FastTarget") + ` ${rangedFastTarget}`); + } + + if (userRollData.rangedCover === true || userRollData.rangedCover === "true") { + rollFormulaParts.push("-2"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Cover") + " −2"); + } + + if (userRollData.rangedProne === true || userRollData.rangedProne === "true") { + rollFormulaParts.push("-1"); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Prone") + " −1"); + } + + if (userRollData.rangedDodge === true || userRollData.rangedDodge === "true") { + const dodgeDM = parseInt(userRollData.rangedDodgeDM ?? "0", 10); + if (dodgeDM < 0) { + rollFormulaParts.push(`${dodgeDM}`); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Dodge") + ` ${dodgeDM}`); + } + } + } + + if (rollOptions.isMelee) { + if (userRollData.meleeDodge === true || userRollData.meleeDodge === "true") { + const dodgeDM = parseInt(userRollData.meleeDodgeDM ?? "0", 10); + if (dodgeDM < 0) { + rollFormulaParts.push(`${dodgeDM}`); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Dodge") + ` ${dodgeDM}`); + } + } + if (userRollData.meleeParry === true || userRollData.meleeParry === "true") { + const parryDM = parseInt(userRollData.meleeParryDM ?? "0", 10); + if (parryDM < 0) { + rollFormulaParts.push(`${parryDM}`); + rollModifiers.push(game.i18n.localize("MGT2.RollPrompt.Parry") + ` ${parryDM}`); + } + } + } + if (MGT2Helper.hasValue(userRollData, "difficulty") && userRollData.difficulty !== "") rollOptions.difficulty = userRollData.difficulty; + // ── Bulky / Very Bulky trait: STR penalty ──────────────────────────── + const strDm = this.actor.system.characteristics.strength?.dm ?? 0; + if (rollOptions.veryBulky) { + // Very Bulky: requires STR DM ≥ +2 + if (strDm < 2) { + const penalty = strDm - 2; + rollFormulaParts.push(`${penalty}`); + rollModifiers.push(game.i18n.localize("MGT2.WeaponTraits.VeryBulky") + ` ${penalty}`); + ui.notifications.warn(game.i18n.format("MGT2.Notifications.VeryBulkyPenalty", { penalty })); + } + } else if (rollOptions.bulky) { + // Bulky: requires STR DM ≥ +1 + if (strDm < 1) { + const penalty = strDm - 1; + rollFormulaParts.push(`${penalty}`); + rollModifiers.push(game.i18n.localize("MGT2.WeaponTraits.Bulky") + ` ${penalty}`); + ui.notifications.warn(game.i18n.format("MGT2.Notifications.BulkyPenalty", { penalty })); + } + } + const rollFormula = rollFormulaParts.join(""); if (!Roll.validate(rollFormula)) { ui.notifications.error(game.i18n.localize("MGT2.Errors.InvalidRollFormula")); return; } + // ── Ammo decrement (ranged weapons with magazine tracking) ─────────── + if (rollOptions.isRanged && rollOptions.itemId && rollOptions.magazine >= 0) { + let ammoUsed = 1; + if (autoMode === "burst" && autoLevel > 0) ammoUsed = autoLevel; + else if (autoMode === "fullAuto" && autoLevel > 0) ammoUsed = autoLevel * 3; + + const currentMag = rollOptions.magazine; + if (currentMag <= 0) { + ui.notifications.warn( + game.i18n.format("MGT2.Notifications.NoAmmo", { weapon: rollOptions.rollObjectName }) + ); + } else { + const newMag = Math.max(0, currentMag - ammoUsed); + const weaponItem = this.actor.getEmbeddedDocument("Item", rollOptions.itemId); + if (weaponItem) await weaponItem.update({ "system.magazine": newMag }); + if (newMag === 0) { + ui.notifications.warn( + game.i18n.format("MGT2.Notifications.AmmoEmpty", { weapon: rollOptions.rollObjectName }) + ); + } else { + ui.notifications.info( + game.i18n.format("MGT2.Notifications.AmmoUsed", { used: ammoUsed, remaining: newMag, weapon: rollOptions.rollObjectName }) + ); + } + } + } + let roll = await new Roll(rollFormula, this.actor.getRollData()).roll({ rollMode: userRollData.rollMode }); if (isInitiative && this.token?.combatant) { @@ -759,7 +895,7 @@ export default class TravellerCharacterSheet extends MGT2ActorSheet { rollFailure = !rollSuccess; } - // Build effective damage formula: base + effect + STR DM (melee) + // Build effective damage formula: base + effect + STR DM (melee) + Auto burst let effectiveDamageFormula = rollOptions.damageFormula || null; if (effectiveDamageFormula) { if (rollEffect !== undefined && rollEffect !== 0) { @@ -769,6 +905,18 @@ export default class TravellerCharacterSheet extends MGT2ActorSheet { const strDm = this.actor.system.characteristics.strength?.dm ?? 0; if (strDm !== 0) effectiveDamageFormula += (strDm >= 0 ? "+" : "") + strDm; } + // Burst: add Auto level to damage + if (autoMode === "burst" && autoLevel > 0) { + effectiveDamageFormula += `+${autoLevel}`; + } + } + + // Auto fire mode chat info + let autoInfo = null; + if (autoMode === "burst" && autoLevel > 0) { + autoInfo = game.i18n.format("MGT2.RollPrompt.AutoBurstInfo", { level: autoLevel, ammo: autoLevel }); + } else if (autoMode === "fullAuto" && autoLevel > 0) { + autoInfo = game.i18n.format("MGT2.RollPrompt.AutoFullInfo", { level: autoLevel, ammo: autoLevel * 3 }); } // ── Build roll breakdown tooltip ───────────────────────────────────── @@ -795,6 +943,7 @@ export default class TravellerCharacterSheet extends MGT2ActorSheet { // Show damage button only if there's a formula AND (no difficulty check OR roll succeeded) showRollDamage: !!effectiveDamageFormula && (!difficultyValue || rollSuccess), cardButtons: cardButtons, + autoInfo, }; if (MGT2Helper.hasValue(rollOptions, "difficulty")) { @@ -811,7 +960,7 @@ export default class TravellerCharacterSheet extends MGT2ActorSheet { let flags = null; if (effectiveDamageFormula) { - flags = { mgt2: { damage: { formula: effectiveDamageFormula, rollObjectName: rollOptions.rollObjectName, rollTypeName: rollOptions.rollTypeName } } }; + flags = { mgt2: { damage: { formula: effectiveDamageFormula, ap: rollOptions.damageAP ?? 0, blast: rollOptions.blastRadius ?? 0, stun: rollOptions.stun ?? false, radiation: rollOptions.radiation ?? false, rollObjectName: rollOptions.rollObjectName, rollTypeName: rollOptions.rollTypeName } } }; } if (cardButtons.length > 0) { if (!flags) flags = { mgt2: {} }; @@ -895,17 +1044,18 @@ export default class TravellerCharacterSheet extends MGT2ActorSheet { static async #onOpenEditor(event) { event.preventDefault(); - await CharacterPrompts.openEditorFullView( - this.actor.system.personal.species, - this.actor.system.personal.speciesText.descriptionLong - ); + const title = this.actor.system.personal.species + || game.i18n.localize("MGT2.Actor.Species") + || "Species"; + const html = this.actor.system.personal.speciesText?.descriptionLong ?? ""; + await CharacterPrompts.openEditorFullView(title, html); } static async #onHeal(event, target) { event.preventDefault(); const healType = target.dataset.healType; - if (canvas.tokens.controlled.length === 0) { + if (game.user.targets.size === 0) { ui.notifications.warn(game.i18n.localize("MGT2.Errors.NoTokenSelected")); return; } diff --git a/src/module/applications/sheets/creature-sheet.mjs b/src/module/applications/sheets/creature-sheet.mjs index 3dbf10b..21da923 100644 --- a/src/module/applications/sheets/creature-sheet.mjs +++ b/src/module/applications/sheets/creature-sheet.mjs @@ -97,7 +97,7 @@ export default class TravellerCreatureSheet extends MGT2ActorSheet { // ───────────────────────────────────────────────────────── Roll Helpers - static async #postCreatureRoll({ actor, roll, rollLabel, dm, difficulty, difficultyLabel, rollMode, extraTooltip }) { + static async #postCreatureRoll({ actor, roll, rollLabel, dm, difficulty, difficultyLabel, rollMode, extraTooltip, damageFormula }) { const diffTarget = MGT2Helper.getDifficultyValue(difficulty ?? "Average"); const hasDifficulty = !!difficulty; const success = hasDifficulty ? roll.total >= diffTarget : true; @@ -111,6 +111,8 @@ export default class TravellerCreatureSheet extends MGT2ActorSheet { if (extraTooltip) breakdownParts.push(extraTooltip); const rollBreakdown = breakdownParts.join(" | "); + const showRollDamage = success && !!damageFormula; + const chatData = { creatureName: actor.name, creatureImg: actor.img, @@ -126,6 +128,7 @@ export default class TravellerCreatureSheet extends MGT2ActorSheet { effect: hasDifficulty ? effect : null, effectStr: hasDifficulty ? effectStr : null, modifiers: dm !== 0 ? [`DM ${dm >= 0 ? "+" : ""}${dm}`] : [], + showRollDamage, }; const chatContent = await renderTemplate( @@ -133,11 +136,23 @@ export default class TravellerCreatureSheet extends MGT2ActorSheet { chatData ); + const flags = showRollDamage ? { + mgt2: { + damage: { + formula: normalizeDice(damageFormula), + effect, + rollObjectName: actor.name, + rollTypeName: rollLabel, + } + } + } : {}; + await ChatMessage.create({ content: chatContent, speaker: ChatMessage.getSpeaker({ actor }), rolls: [roll], rollMode: rollMode ?? game.settings.get("core", "rollMode"), + flags, }); return { success, effect, total: roll.total }; @@ -238,24 +253,14 @@ export default class TravellerCreatureSheet extends MGT2ActorSheet { if (chosenSkill) tooltipParts.push(`${chosenSkill.name} ${skillLevel >= 0 ? "+" : ""}${skillLevel}`); if (customDM !== 0) tooltipParts.push(`MD perso ${customDM >= 0 ? "+" : ""}${customDM}`); - const { success } = await TravellerCreatureSheet.#postCreatureRoll({ + await TravellerCreatureSheet.#postCreatureRoll({ actor, roll, rollLabel, dm, difficulty: result.difficulty, rollMode: result.rollMode, extraTooltip: tooltipParts.join(" | "), + damageFormula: attack.damage || null, }); - - // Roll damage only on success - if (success && attack.damage) { - const dmgFormula = normalizeDice(attack.damage); - const dmgRoll = await new Roll(dmgFormula).evaluate(); - await dmgRoll.toMessage({ - speaker: ChatMessage.getSpeaker({ actor }), - flavor: `${actor.name} — ${game.i18n.localize("MGT2.Chat.Weapon.Damage")}: ${attack.name} (${attack.damage})`, - rollMode: result.rollMode ?? game.settings.get("core", "rollMode"), - }); - } } // ───────────────────────────────────────────────────────── CRUD Handlers diff --git a/src/module/chatHelper.js b/src/module/chatHelper.js index 42205f9..5250a65 100644 --- a/src/module/chatHelper.js +++ b/src/module/chatHelper.js @@ -6,12 +6,45 @@ export class ChatHelper { if (!message || !element) { return; } + + // Restore disabled state for already-applied buttons + const appliedActions = message.flags?.mgt2?.appliedActions ?? []; + if (appliedActions.length > 0) { + appliedActions.forEach(action => { + element.querySelectorAll(`button[data-action="${action}"]`).forEach(btn => { + btn.disabled = true; + }); + }); + } + + // Apply buttons are GM-only: hide them for players + const GM_ACTIONS = ["damage", "healing", "surgeryDamage"]; + if (!game.user.isGM) { + GM_ACTIONS.forEach(action => { + element.querySelectorAll(`button[data-action="${action}"]`).forEach(btn => { + btn.style.display = "none"; + }); + }); + // Hide the buttons container if no visible buttons remain + element.querySelectorAll(".mgt2-buttons").forEach(container => { + const hasVisible = [...container.querySelectorAll("button")] + .some(b => b.style.display !== "none"); + if (!hasVisible) container.style.display = "none"; + }); + } + element.querySelectorAll('button[data-action="rollDamage"]').forEach(el => { el.addEventListener('click', async event => { await this._processRollDamageButtonEvent(message, event); }); }); + element.querySelectorAll('button[data-action="rollRadiation"]').forEach(el => { + el.addEventListener('click', async event => { + await this._rollRadiationDamage(message, event); + }); + }); + element.querySelectorAll('button[data-action="damage"]').forEach(el => { el.addEventListener('click', async event => { await this._applyChatCardDamage(message, event); @@ -63,74 +96,143 @@ export class ChatHelper { static async _processRollDamageButtonEvent(message, event) { event.preventDefault(); event.stopPropagation(); - let rollFormula = message.flags.mgt2.damage.formula; - - let roll = await new Roll(rollFormula, {}).roll(); - - let speaker; - let selectTokens = canvas.tokens.controlled; - if (selectTokens.length > 0) { - speaker = selectTokens[0].actor; - } else { - speaker = game.user.character; + const damageFlags = message.flags?.mgt2?.damage; + if (!damageFlags?.formula) { + ui.notifications.warn(game.i18n.localize("MGT2.Errors.InvalidRollFormula")); + return; } - let rollTypeName = message.flags.mgt2.damage.rollTypeName ? message.flags.mgt2.damage.rollTypeName + " " + game.i18n.localize("MGT2.Actor.Damage") : null; + const effect = damageFlags.effect ?? 0; + const effectPart = effect > 0 ? `+${effect}` : effect < 0 ? `${effect}` : ""; + const rollFormula = damageFlags.formula + effectPart; + + let roll; + try { + roll = await new Roll(rollFormula, {}).roll(); + } catch (e) { + ui.notifications.warn(game.i18n.localize("MGT2.Errors.InvalidRollFormula")); + return; + } + + const rollTypeName = damageFlags.rollTypeName + ? damageFlags.rollTypeName + " " + game.i18n.localize("MGT2.Actor.Damage") + : null; + + const ap = damageFlags.ap ?? 0; + const blast = damageFlags.blast ?? 0; + const stun = damageFlags.stun ?? false; + const radiation = damageFlags.radiation ?? false; const chatData = { user: game.user.id, - speaker: ChatMessage.getSpeaker({ actor: speaker }), + speaker: message.speaker, formula: roll._formula, tooltip: await roll.getTooltip(), total: Math.round(roll.total * 100) / 100, showButtons: true, hasDamage: true, - rollTypeName: rollTypeName, - rollObjectName: message.flags.mgt2.damage.rollObjectName + rollTypeName, + rollObjectName: damageFlags.rollObjectName, + apValue: ap > 0 ? ap : null, + blastRadius: blast > 0 ? blast : null, + stunWeapon: stun || null, + radiationWeapon: radiation || null, }; const html = await foundry.applications.handlebars.renderTemplate("systems/mgt2/templates/chat/roll.html", chatData); chatData.content = html; + // Persist ap, blast, stun, radiation in damage message flags so handlers can read them + if (ap > 0 || blast > 0 || stun || radiation) chatData.flags = { mgt2: { damage: { ap, blast, stun, radiation, rollObjectName: damageFlags.rollObjectName } } }; + return roll.toMessage(chatData); } - static _applyChatCardDamage(message, event) { - if (canvas.tokens.controlled.length === 0) { - ui.notifications.warn(game.i18n.localize("MGT2.Errors.NoTokenSelected")); - return; + static async #markButtonApplied(message, btn, action) { + const existing = message.flags?.mgt2?.appliedActions ?? []; + if (!existing.includes(action)) { + await message.setFlag("mgt2", "appliedActions", [...existing, action]); } - const roll = message.rolls[0]; - return Promise.all(canvas.tokens.controlled.map(t => { - const a = t.actor; - return a.applyDamage(roll.total); - })); + if (btn) btn.disabled = true; } - static _applyChatCardHealing(message, event) { - if (canvas.tokens.controlled.length === 0) { + static async _applyChatCardDamage(message, event) { + if (game.user.targets.size === 0) { ui.notifications.warn(game.i18n.localize("MGT2.Errors.NoTokenSelected")); return; } - // For First Aid/Surgery healing, use amount from flags; otherwise use roll total + const btn = event.currentTarget; + const roll = message.rolls[0]; + const amount = Math.round(roll.total * 100) / 100; + const ap = message.flags?.mgt2?.damage?.ap ?? 0; + const stun = message.flags?.mgt2?.damage?.stun ?? false; + await Promise.all([...game.user.targets].map(async t => { + const result = await t.actor.applyDamage(amount, { ap, stun }); + if (stun) { + const incapRounds = result?.incapRounds ?? 0; + if (incapRounds > 0) { + ui.notifications.warn(game.i18n.format("MGT2.Notifications.StunIncapacitated", { name: t.actor.name, rounds: incapRounds })); + } else { + ui.notifications.info(game.i18n.format("MGT2.Notifications.StunDamageApplied", { name: t.actor.name, amount })); + } + } else { + const notifKey = ap > 0 ? "MGT2.Notifications.DamageAppliedAP" : "MGT2.Notifications.DamageApplied"; + ui.notifications.info(game.i18n.format(notifKey, { name: t.actor.name, amount, ap })); + } + })); + await ChatHelper.#markButtonApplied(message, btn, "damage"); + } + + static async _applyChatCardHealing(message, event) { + if (game.user.targets.size === 0) { + ui.notifications.warn(game.i18n.localize("MGT2.Errors.NoTokenSelected")); + return; + } + const btn = event.currentTarget; const amount = message.flags?.mgt2?.healing?.amount ?? message.flags?.mgt2?.surgery?.healing ?? Math.max(1, message.rolls[0].total); - return Promise.all(canvas.tokens.controlled.map(t => { - const a = t.actor; - return a.applyHealing(amount); + await Promise.all([...game.user.targets].map(async t => { + await t.actor.applyHealing(amount); + ui.notifications.info(game.i18n.format("MGT2.Notifications.HealingApplied", { name: t.actor.name, amount })); })); + await ChatHelper.#markButtonApplied(message, btn, "healing"); } - static _applyChatCardSurgeryDamage(message, event) { - if (canvas.tokens.controlled.length === 0) { + static async _applyChatCardSurgeryDamage(message, event) { + if (game.user.targets.size === 0) { ui.notifications.warn(game.i18n.localize("MGT2.Errors.NoTokenSelected")); return; } + const btn = event.currentTarget; const amount = message.flags?.mgt2?.surgery?.surgeryDamage ?? 3; - return Promise.all(canvas.tokens.controlled.map(t => { - const a = t.actor; - return a.applyDamage(amount, { ignoreArmor: true }); + await Promise.all([...game.user.targets].map(async t => { + await t.actor.applyDamage(amount, { ignoreArmor: true }); + ui.notifications.info(game.i18n.format("MGT2.Notifications.DamageApplied", { name: t.actor.name, amount })); })); + await ChatHelper.#markButtonApplied(message, btn, "surgeryDamage"); + } + + static async _rollRadiationDamage(message, event) { + event.preventDefault(); + event.stopPropagation(); + const damageFlags = message.flags?.mgt2?.damage; + const rollObjectName = damageFlags?.rollObjectName ?? ""; + + // 2D × 20 rads (MGT2 rule: 2d6 × 20) + const roll = await new Roll("2d6 * 20", {}).roll(); + + const chatData = { + user: game.user.id, + speaker: message.speaker, + formula: roll._formula, + tooltip: await roll.getTooltip(), + total: Math.round(roll.total), + rollObjectName, + }; + + const html = await foundry.applications.handlebars.renderTemplate("systems/mgt2/templates/chat/radiation.html", chatData); + chatData.content = html; + return roll.toMessage(chatData); } } \ No newline at end of file diff --git a/src/module/models/items/weapon.mjs b/src/module/models/items/weapon.mjs index e1b0273..cce26f8 100644 --- a/src/module/models/items/weapon.mjs +++ b/src/module/models/items/weapon.mjs @@ -13,12 +13,18 @@ export default class WeaponData extends PhysicalItemData { schema.damage = new fields.StringField({ required: false, blank: true, trim: true }); schema.magazine = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }); schema.magazineCost = new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }); - schema.traits = new fields.ArrayField( - new fields.SchemaField({ - name: new fields.StringField({ required: true, blank: true, trim: true }), - description: new fields.StringField({ required: false, blank: true, trim: true }) - }) - ); + schema.traits = new fields.SchemaField({ + ap: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }), + auto: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }), + blast: new fields.NumberField({ required: false, initial: 0, min: 0, integer: true }), + bulky: new fields.BooleanField({ required: false, initial: false }), + veryBulky: new fields.BooleanField({ required: false, initial: false }), + stun: new fields.BooleanField({ required: false, initial: false }), + smart: new fields.BooleanField({ required: false, initial: false }), + radiation: new fields.BooleanField({ required: false, initial: false }), + scope: new fields.BooleanField({ required: false, initial: false }), + zeroG: new fields.BooleanField({ required: false, initial: false }) + }); schema.options = new fields.ArrayField( new fields.SchemaField({ name: new fields.StringField({ required: true, blank: true, trim: true }), @@ -27,4 +33,21 @@ export default class WeaponData extends PhysicalItemData { ); return schema; } + + /** Returns a compact display string of active traits (e.g. "AP 2, Auto 3, Blast 5, Bulky") */ + static getTraitsSummary(traits) { + if (!traits) return ""; + const parts = []; + if (traits.ap > 0) parts.push(`AP ${traits.ap}`); + if (traits.auto > 0) parts.push(`Auto ${traits.auto}`); + if (traits.blast > 0) parts.push(`Blast ${traits.blast}`); + if (traits.bulky) parts.push(game.i18n.localize("MGT2.WeaponTraits.Bulky")); + if (traits.veryBulky) parts.push(game.i18n.localize("MGT2.WeaponTraits.VeryBulky")); + if (traits.stun) parts.push(game.i18n.localize("MGT2.WeaponTraits.Stun")); + if (traits.smart) parts.push(game.i18n.localize("MGT2.WeaponTraits.Smart")); + if (traits.radiation) parts.push(game.i18n.localize("MGT2.WeaponTraits.Radiation")); + if (traits.scope) parts.push(game.i18n.localize("MGT2.WeaponTraits.Scope")); + if (traits.zeroG) parts.push(game.i18n.localize("MGT2.WeaponTraits.ZeroG")); + return parts.join(", "); + } } diff --git a/src/module/roll-prompt.js b/src/module/roll-prompt.js index f62054c..a3ec134 100644 --- a/src/module/roll-prompt.js +++ b/src/module/roll-prompt.js @@ -35,7 +35,14 @@ export class RollPromptHelper { skillLevel: options.skillLevel ?? 0, // Healing fields showHeal: options.showHeal ?? false, - healType: options.healType ?? null + healType: options.healType ?? null, + // Ranged/Melee weapon flags + isRanged: options.isRanged ?? false, + isMelee: options.isMelee ?? false, + isAttack: (options.isRanged ?? false) || (options.isMelee ?? false), + autoLevel: options.autoLevel ?? 0, + hasScope: options.scope ?? false, + hasZeroG: options.zeroG ?? false, }); return await DialogV2.wait({ diff --git a/src/module/templates.js b/src/module/templates.js index 8cd137d..a8dc7a5 100644 --- a/src/module/templates.js +++ b/src/module/templates.js @@ -23,6 +23,7 @@ export const preloadHandlebarsTemplates = async function() { "systems/mgt2/templates/roll-prompt.html", "systems/mgt2/templates/chat/roll.html", //"systems/mgt2/templates/chat/roll-characteristic.html", + "systems/mgt2/templates/chat/radiation.html", "systems/mgt2/templates/actors/actor-config-sheet.html", "systems/mgt2/templates/actors/actor-config-characteristic-sheet.html", "systems/mgt2/templates/actors/trait-sheet.html", diff --git a/src/sass/components/_chat-sidebar.sass b/src/sass/components/_chat-sidebar.sass index fc20451..12f5747 100644 --- a/src/sass/components/_chat-sidebar.sass +++ b/src/sass/components/_chat-sidebar.sass @@ -329,6 +329,114 @@ li.chat-message .mgt2-effect-value color: #EE4050 + // ── AP info badge ── + .mgt2-ap-info + display: flex + align-items: center + justify-content: center + gap: 5px + font-size: 0.75rem + font-weight: 600 + color: #6b4e1a + background: rgba(180,130,40,0.12) + border: 1px solid rgba(180,130,40,0.3) + border-radius: 4px + padding: 3px 8px + margin: 4px 8px 0 8px + i + color: #b48228 + + // ── Auto fire mode info badge ── + .mgt2-auto-info + display: flex + align-items: center + justify-content: center + gap: 5px + font-size: 0.75rem + font-weight: 600 + color: #1a3f6b + background: rgba(40,90,180,0.10) + border: 1px solid rgba(40,90,180,0.25) + border-radius: 4px + padding: 3px 8px + margin: 4px 8px 0 8px + i + color: #2855b4 + + // ── Blast / explosion area info badge ── + .mgt2-blast-info + display: flex + align-items: center + justify-content: center + gap: 5px + font-size: 0.75rem + font-weight: 600 + color: #7a2a00 + background: rgba(210,80,20,0.10) + border: 1px solid rgba(210,80,20,0.30) + border-radius: 4px + padding: 3px 8px + margin: 4px 8px 0 8px + i + color: #d24a10 + + // ── Stun / incapacitating weapon info badge ── + .mgt2-stun-info + display: flex + align-items: center + justify-content: center + gap: 5px + font-size: 0.75rem + font-weight: 600 + color: #4a1a6b + background: rgba(120,40,180,0.10) + border: 1px solid rgba(120,40,180,0.28) + border-radius: 4px + padding: 3px 8px + margin: 4px 8px 0 8px + i + color: #8a28c8 + + // ── Radiation weapon info badge ── + .mgt2-radiation-info + display: flex + align-items: center + justify-content: center + gap: 5px + font-size: 0.75rem + font-weight: 600 + color: #1a4a1a + background: rgba(40,160,40,0.10) + border: 1px solid rgba(40,160,40,0.30) + border-radius: 4px + padding: 3px 8px + margin: 4px 8px 0 8px + i + color: #28a028 + + // ── Radiation roll result card ── + .mgt2-radiation-card + .mgt2-radiation-label + color: #28a028 + font-weight: 700 + i + margin-right: 4px + .mgt2-radiation-rules + font-size: 0.72rem + color: #555 + background: rgba(40,160,40,0.07) + border: 1px solid rgba(40,160,40,0.20) + border-radius: 4px + padding: 4px 8px + margin: 4px 8px 0 8px + display: flex + gap: 5px + align-items: flex-start + i + color: #e0a020 + margin-top: 2px + flex-shrink: 0 + // ── Action buttons ── .mgt2-buttons display: flex @@ -363,4 +471,12 @@ li.chat-message background: #EE4050 border-color: #EE4050 color: #fff - box-shadow: 0 0 8px rgba(238,64,80,0.25) \ No newline at end of file + box-shadow: 0 0 8px rgba(238,64,80,0.25) + + &:disabled + background: #e8e0e0 + border-color: #c8b8b8 + color: #a08080 + cursor: not-allowed + box-shadow: none + opacity: 0.6 \ No newline at end of file diff --git a/src/sass/components/_dialog.sass b/src/sass/components/_dialog.sass index 874fc71..1b9822e 100644 --- a/src/sass/components/_dialog.sass +++ b/src/sass/components/_dialog.sass @@ -108,6 +108,39 @@ width: 14px !important height: 14px !important + // Read-only state badges + .roll-prompt-states + display: flex !important + gap: 6px !important + flex-wrap: wrap !important + padding: 2px 0 !important + + .roll-prompt-state-badge + display: inline-flex !important + align-items: center !important + gap: 4px !important + padding: 2px 8px !important + border-radius: 3px !important + font-family: 'Barlow Condensed', sans-serif !important + font-size: 0.75rem !important + font-weight: 600 !important + text-transform: uppercase !important + letter-spacing: 0.8px !important + background: #ede8e8 !important + border: 1px solid #ccc !important + color: #999 !important + + i + font-size: 0.7rem !important + + &.is-active + background: #fdf0f0 !important + border-color: #EE4050 !important + color: #EE4050 !important + + strong + font-weight: 800 !important + // Footer buttons .dialog-buttons, .form-footer, footer background: #f5eeee !important @@ -148,3 +181,95 @@ &:hover background: #ff5060 !important box-shadow: 0 4px 18px rgba(238,64,80,0.45) !important + +// Ranged modifiers fieldset +.mgt2-ranged-modifiers + margin-top: 4px !important + + .mgt2-ranged-checkboxes, .mgt2-ranged-dodge + display: flex !important + flex-wrap: wrap !important + gap: 6px !important + align-items: center !important + border-bottom: none !important + + .mgt2-checkbox-tag + display: inline-flex !important + align-items: center !important + gap: 4px !important + padding: 2px 7px !important + border: 1px solid #ddc8c8 !important + border-radius: 3px !important + background: #fdf8f8 !important + font-family: 'Barlow Condensed', sans-serif !important + font-size: 0.73rem !important + font-weight: 600 !important + text-transform: uppercase !important + letter-spacing: 0.8px !important + color: #3a2020 !important + cursor: pointer !important + transition: border-color 0.15s, background 0.15s !important + + em + font-style: normal !important + color: #999 !important + font-weight: 400 !important + + input[type="checkbox"] + accent-color: #EE4050 !important + width: 13px !important + height: 13px !important + margin: 0 !important + + &:has(input:checked) + border-color: #EE4050 !important + background: #fdf0f0 !important + color: #EE4050 !important + + em + color: #EE4050 !important + + // Auto fire mode selector + .mgt2-auto-mode + border-bottom: 1px solid #ddc8c8 !important + padding-bottom: 4px !important + margin-bottom: 2px !important + + .mgt2-auto-hint + font-size: 0.72rem !important + color: #9a6520 !important + margin: 0 0 4px 0 !important + font-style: italic !important + text-align: center !important + + .mgt2-scope-badge + display: inline-flex + align-items: center + gap: 5px + font-size: 0.72rem + font-weight: 600 + color: #1a4060 + background: rgba(30,100,180,0.10) + border: 1px solid rgba(30,100,180,0.28) + border-radius: 4px + padding: 2px 8px + margin-bottom: 4px + cursor: help + i + color: #1a6090 + + .mgt2-zerog-badge + display: inline-flex + align-items: center + gap: 5px + font-size: 0.72rem + font-weight: 600 + color: #2a3a50 + background: rgba(60,80,120,0.10) + border: 1px solid rgba(60,80,120,0.28) + border-radius: 4px + padding: 2px 8px + margin-bottom: 4px + cursor: help + i + color: #506090 diff --git a/src/sass/components/_item.sass b/src/sass/components/_item.sass index d23e43f..16b43ec 100644 --- a/src/sass/components/_item.sass +++ b/src/sass/components/_item.sass @@ -416,3 +416,44 @@ .editor, .editor-container min-height: 200px !important + +// ── Weapon traits structured grid ──────────────────────────────────────────── +.mgt2-weapon-traits + border: 1px solid var(--color-border-light-tertiary) + border-radius: 4px + padding: 6px 8px + margin-top: 4px + + legend + font-size: 0.85em + font-weight: bold + padding: 0 4px + + .mgt2-weapon-traits-grid + display: flex + flex-wrap: wrap + gap: 6px 12px + align-items: center + + .mgt2-trait-num + display: flex + align-items: center + gap: 4px + label + font-size: 0.85em + white-space: nowrap + input[type="number"] + width: 44px + text-align: center + flex: 0 0 44px + + .mgt2-trait-bool + display: flex + align-items: center + gap: 4px + label + font-size: 0.85em + white-space: nowrap + cursor: pointer + input[type="checkbox"] + cursor: pointer diff --git a/styles/mgt2.min.css b/styles/mgt2.min.css index d0e1a82..f97cc00 100644 --- a/styles/mgt2.min.css +++ b/styles/mgt2.min.css @@ -1 +1 @@ -@import"https://fonts.googleapis.com/css2?family=Barlow+Condensed:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap";@import"https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&display=swap";@import"https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap";.black-and-red{--mgt2-color-form: #0A0405;--mgt2-bgcolor-form: #fff;--mgt2-color-primary: #EE4050;--mgt2-color-primary-active: #AF2F3C;--mgt2-bgcolor-primary: #0A0405;--mgt2-color-primary-light: #4b4a44;--mgt2-color-warning: #EE4050;--mgt2-color-dm: #fff;--mgt2-bgcolor-dm: #0A0405;--mgt2-color-software: #fff;--mgt2-bgcolor-software: #0A0405;--mgt2-input-color: #0A0405;--mgt2-input-bgcolor: #fff;--mgt2-editor-border: #C6C6C6;--mgt2-row-hover: #F2F2F2;--mgt2-subrow-color: #727272;--mgt2-row-inactive-icon: #b5b3a4;--mgt2-encumbrance-normal: #D94826;--mgt2-encumbrance-heavy: #D82727}.mwamba{--mgt2-color-form: #0A0405;--mgt2-bgcolor-form: #fff;--mgt2-color-primary: #2A9932;--mgt2-color-primary-active: #40ED4E;--mgt2-bgcolor-primary: #0A0405;--mgt2-color-primary-light: #4b4a44;--mgt2-color-warning: #EE4050;--mgt2-color-dm: #fff;--mgt2-bgcolor-dm: #0A0405;--mgt2-color-software: #fff;--mgt2-bgcolor-software: #0A0405;--mgt2-input-color: #0A0405;--mgt2-input-bgcolor: #fff;--mgt2-editor-border: #C6C6C6;--mgt2-row-hover: #F2F2F2;--mgt2-subrow-color: #727272;--mgt2-row-inactive-icon: #b5b3a4}.blue{--mgt2-color-form: #0A0405;--mgt2-bgcolor-form: #fff;--mgt2-color-primary: #91AAC8;--mgt2-color-primary-active: #BCDCFF;--mgt2-bgcolor-primary: #0A0405;--mgt2-color-primary-light: #4b4a44;--mgt2-color-warning: #EE4050;--mgt2-color-dm: #fff;--mgt2-bgcolor-dm: #0A0405;--mgt2-color-software: #fff;--mgt2-bgcolor-software: #0A0405;--mgt2-input-color: #0A0405;--mgt2-input-bgcolor: #fff;--mgt2-editor-border: #C6C6C6;--mgt2-row-hover: #F2F2F2;--mgt2-subrow-color: #727272;--mgt2-row-inactive-icon: #b5b3a4}.upcase{text-transform:uppercase}.w1-10{width:10%}.w2-10{width:20%}.w3-10{width:30%}.w4-10{width:40%}.w5-10{width:50%}.h100{height:100%}.w100{width:100%}.mgt2 a:hover{text-shadow:none}.mgt2 .w-100{width:100%}.mgt2 .mb-1{margin-bottom:8px}.mgt2 .mt-1,.mgt2 .mt-05{margin-top:8px}.mgt2 .mt-2{margin-top:14px}.mgt2.sheet header.window-header{color:var(--mgt2-color-primary);background-color:var(--mgt2-bgcolor-primary)}.mgt2.sheet h4.window-title{font-weight:bold;text-transform:uppercase}.mgt2.sheet .window-content{background:var(--mgt2-bgcolor-form);color:var(--mgt2-color-form);padding:0}.nopad .window-content{padding:0}.mgt2 .flex-fix{flex-grow:0 !important;flex-shrink:0 !important}.mgt2 .flex-basis-10{flex-basis:10%}.mgt2 .flex-basis-20{flex-basis:20%}.mgt2 .flex-basis-30{flex-basis:30%}.mgt2 .flex-basis-40{flex-basis:40%}.mgt2 .flex-basis-50{flex-basis:50%}.mgt2 .flex-basis-60{flex-basis:60%}.mgt2 .flex-basis-70{flex-basis:70%}.mgt2.sheet textarea{color:var(--mgt2-input-color);background-color:var(--mgt2-input-bgcolor);font-family:"Roboto",sans-serif;font-size:13px;font-stretch:100%}.mgt2 input:focus,.mgt2 textarea:focus,.mgt2 select:focus{outline:none;box-shadow:none}.mgt2 .checkbox-small{flex:none !important;width:auto !important;height:auto !important;margin:0 !important}.mgt2 .header{color:var(--mgt2-color-primary);background:var(--mgt2-bgcolor-primary);font-size:14px;font-family:"Roboto Condensed",sans-serif;font-weight:bold;padding-left:5px;margin-bottom:4px;line-height:30px;text-transform:uppercase}.mgt2 .field-groups{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:space-between}.mgt2 .field-group label{text-transform:uppercase;font-weight:700;font-size:14px;font-family:"Roboto Condensed",sans-serif;font-optical-sizing:auto}.mgt2 input.field{background-color:var(--mgt2-input-bgcolor);font-size:13px}.mgt2 input.field-name{background-color:var(--mgt2-input-bgcolor);color:var(--mgt2-color-primary);font-size:2rem;border:none;font-weight:700;font-family:"Roboto Condensed",sans-serif;margin-bottom:.5rem;padding:0}.mgt2 input.field-item-name{background-color:var(--mgt2-input-bgcolor);color:var(--mgt2-color-primary);height:auto;font-size:2rem;font-weight:700;font-family:"Roboto Condensed",sans-serif}.mgt2 .fields{display:flex}.mgt2 .editor{min-height:3rem;border:1px solid var(--mgt2-editor-border);height:100%}.mgt2 .sheet-body{margin-left:140px;padding-bottom:1.5rem}.mgt2 label.mgt2-checkbox{display:flex;flex-direction:row;align-items:center}.mgt2 label.mgt2-checkbox input{margin:0 .3rem 0 0}.mgt2 .dialog-button{color:var(--mgt2-color-primary);background-color:var(--mgt2-bgcolor-primary) !important}.mgt2-roll-dialog{background:#fff !important;border:1px solid #cbb !important;box-shadow:0 8px 32px rgba(0,0,0,.35) !important;border-radius:6px !important;overflow:hidden !important}.mgt2-roll-dialog .window-header{background:#0a0405 !important;border-bottom:3px solid #ee4050 !important;padding:10px 14px !important;position:relative !important}.mgt2-roll-dialog .window-header .window-title{color:#fff !important;font-family:"Barlow Condensed",sans-serif !important;font-weight:700 !important;font-size:1rem !important;text-transform:uppercase !important;letter-spacing:2px !important}.mgt2-roll-dialog .window-content{background:#fff !important;color:#0a0405 !important;padding:0 !important}.mgt2-roll-dialog .window-content .dialog-content,.mgt2-roll-dialog .window-content .standard-form{background:#fff !important;padding:8px 14px 6px !important}.mgt2-roll-dialog .window-content .form-group{display:flex !important;align-items:center !important;gap:8px !important;margin-bottom:3px !important;padding:2px 0 !important;border-bottom:1px solid #e8e0e0 !important}.mgt2-roll-dialog .window-content .form-group:last-child{border-bottom:none !important}.mgt2-roll-dialog .window-content .form-group label{color:#0a0405 !important;font-family:"Barlow Condensed",sans-serif !important;font-weight:700 !important;font-size:.72rem !important;text-transform:uppercase !important;letter-spacing:1.2px !important;flex:0 0 110px !important;line-height:1.2 !important}.mgt2-roll-dialog .window-content .form-group select,.mgt2-roll-dialog .window-content .form-group input[type=number],.mgt2-roll-dialog .window-content .form-group input[type=text]{flex:1 !important;background:#fff !important;border:1px solid #cbb !important;color:#0a0405 !important;border-radius:3px !important;padding:3px 8px !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.9rem !important;transition:border-color 150ms ease !important}.mgt2-roll-dialog .window-content .form-group select:focus,.mgt2-roll-dialog .window-content .form-group input[type=number]:focus,.mgt2-roll-dialog .window-content .form-group input[type=text]:focus{border-color:#ee4050 !important;outline:none !important;background:rgba(238,64,80,.04) !important}.mgt2-roll-dialog .window-content .form-group select option,.mgt2-roll-dialog .window-content .form-group input[type=number] option,.mgt2-roll-dialog .window-content .form-group input[type=text] option{background:#fff !important;color:#0a0405 !important}.mgt2-roll-dialog .window-content fieldset,.mgt2-roll-dialog .window-content .form-fields{background:#fdf8f8 !important;border:1px solid #e0c8c8 !important;border-radius:5px !important;padding:5px 10px !important;margin-bottom:4px !important}.mgt2-roll-dialog .window-content fieldset legend,.mgt2-roll-dialog .window-content .form-fields legend{color:#ee4050 !important;font-family:"Barlow Condensed",sans-serif !important;font-weight:700 !important;font-size:.72rem !important;text-transform:uppercase !important;letter-spacing:2px !important;padding:0 8px !important;background:#fff !important}.mgt2-roll-dialog .window-content fieldset .form-group,.mgt2-roll-dialog .window-content .form-fields .form-group{border-bottom:none !important;margin-bottom:4px !important;padding:2px 0 !important}.mgt2-roll-dialog .window-content fieldset label,.mgt2-roll-dialog .window-content .form-fields label{color:#3a2020 !important;flex:1 !important}.mgt2-roll-dialog .window-content fieldset input[type=checkbox],.mgt2-roll-dialog .window-content .form-fields input[type=checkbox]{accent-color:#ee4050 !important;width:14px !important;height:14px !important}.mgt2-roll-dialog .dialog-buttons,.mgt2-roll-dialog .form-footer,.mgt2-roll-dialog footer{background:#f5eeee !important;border-top:2px solid #ee4050 !important;padding:7px 14px !important;display:flex !important;gap:8px !important;justify-content:center !important}.mgt2-roll-dialog .dialog-buttons button,.mgt2-roll-dialog .form-footer button,.mgt2-roll-dialog footer button{flex:1 !important;max-width:140px !important;background:#fff !important;border:1px solid #cbb !important;color:#3a2020 !important;border-radius:4px !important;padding:5px 12px !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.82rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1.5px !important;cursor:pointer !important;transition:all 150ms ease !important}.mgt2-roll-dialog .dialog-buttons button:hover,.mgt2-roll-dialog .form-footer button:hover,.mgt2-roll-dialog footer button:hover{background:#fdf0f0 !important;border-color:#ee4050 !important;color:#ee4050 !important}.mgt2-roll-dialog .dialog-buttons button.default,.mgt2-roll-dialog .dialog-buttons button[data-action=submit],.mgt2-roll-dialog .dialog-buttons button[autofocus],.mgt2-roll-dialog .form-footer button.default,.mgt2-roll-dialog .form-footer button[data-action=submit],.mgt2-roll-dialog .form-footer button[autofocus],.mgt2-roll-dialog footer button.default,.mgt2-roll-dialog footer button[data-action=submit],.mgt2-roll-dialog footer button[autofocus]{background:#ee4050 !important;border-color:#ee4050 !important;color:#fff !important;box-shadow:0 2px 12px rgba(238,64,80,.3) !important}.mgt2-roll-dialog .dialog-buttons button.default:hover,.mgt2-roll-dialog .dialog-buttons button[data-action=submit]:hover,.mgt2-roll-dialog .dialog-buttons button[autofocus]:hover,.mgt2-roll-dialog .form-footer button.default:hover,.mgt2-roll-dialog .form-footer button[data-action=submit]:hover,.mgt2-roll-dialog .form-footer button[autofocus]:hover,.mgt2-roll-dialog footer button.default:hover,.mgt2-roll-dialog footer button[data-action=submit]:hover,.mgt2-roll-dialog footer button[autofocus]:hover{background:#ff5060 !important;box-shadow:0 4px 18px rgba(238,64,80,.45) !important}.characteristics-panel .tab{padding:4px}.species{font-size:13px;margin:4px 1rem 0 1rem;text-align:justify}.species a{margin-right:1rem}.mgt2 .characteristics{flex-basis:138px;flex-grow:0;flex-shrink:0;position:relative}.mgt2 .characteristics-header{color:var(--mgt2-color-primary);background:var(--mgt2-bgcolor-primary);font-family:"Rubik",monospace;font-style:normal;font-size:1rem;line-height:2rem;text-transform:uppercase}.mgt2 .characteristic-row{display:flex;flex-direction:row;align-items:center;justify-content:center;position:relative}.mgt2 .characteristic-minmax{display:flex;flex-direction:row;align-items:center;justify-content:center;flex-wrap:nowrap}.mgt2 .characteristic-dm span.label{font-size:.8rem;font-weight:600}.mgt2 .characteristic-label{font-family:"Barlow Condensed",sans-serif;font-size:1.2rem;font-weight:600;font-style:italic;text-align:center;color:var(--mgt2-color-form);position:relative}.mgt2 .characteristic-label>a.roll{color:#000;position:absolute;left:0}.mgt2 .characteristic-label a.cfg-characteristic{display:none;font-size:12px;position:absolute;right:0;top:0}.mgt2 .characteristic-label:hover a.cfg-characteristic{display:block}.mgt2 .characteristic-input{color:var(--mgt2-bgcolor-primary);text-align:center;font-size:1.5rem;font-weight:500;width:2.4rem;height:2rem;box-sizing:border-box;border:none;outline:none;background:linear-gradient(45deg, rgba(0, 0, 0, 0) 5.66px, #000 0 7.66px, rgba(0, 0, 0, 0) 0 calc(100% - 5.66px - 2px), #000 0 calc(100% - 5.66px), rgba(0, 0, 0, 0) 0),linear-gradient(-45deg, rgba(0, 0, 0, 0) 5.66px, #000 0 7.66px, rgba(0, 0, 0, 0) 0 calc(100% - 5.66px - 2px), #000 0 calc(100% - 5.66px), rgba(0, 0, 0, 0) 0),linear-gradient(90deg, #000 4px, rgba(0, 0, 0, 0) 0) -2px 50%/100% calc(100% - 16px) repeat-x,linear-gradient(#000 4px, rgba(0, 0, 0, 0) 0) 50% -2px/calc(100% - 16px) 100% repeat-y}.mgt2 .characteristic-dm{color:var(--mgt2-color-dm);background-color:rgba(0,0,0,0);text-align:center;font-size:1rem;width:1.5rem;height:1.4rem;padding:0;outline:none;border:none;margin:0;position:absolute;right:0;background-color:var(--mgt2-bgcolor-dm);border-radius:9px;margin-right:2px}.mgt2 .characteristic-dm:focus{outline:none;box-shadow:none}.mgt2 .characteristic-dm-minmax:focus{outline:none;box-shadow:none}.mgt2 .minmaxwrapper{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;justify-content:center;align-items:center;margin:0 .5rem;box-sizing:border-box;background:linear-gradient(45deg, rgba(0, 0, 0, 0) 7.07px, #000 0 9.07px, rgba(0, 0, 0, 0) 0 calc(100% - 7.07px - 2px), #000 0 calc(100% - 7.07px), rgba(0, 0, 0, 0) 0),linear-gradient(-45deg, rgba(0, 0, 0, 0) 7.07px, #000 0 9.07px, rgba(0, 0, 0, 0) 0 calc(100% - 7.07px - 2px), #000 0 calc(100% - 7.07px), rgba(0, 0, 0, 0) 0),linear-gradient(90deg, #000 4px, rgba(0, 0, 0, 0) 0) -2px 50%/100% calc(100% - 20px) repeat-x,linear-gradient(#000 4px, rgba(0, 0, 0, 0) 0) 50% -2px/calc(100% - 20px) 100% repeat-y}.mgt2 .minmaxwrapper input{display:inline-block;color:#000;background-color:rgba(0,0,0,0);text-align:center;font-size:1.5rem;width:3rem;height:2rem;border:none;outline:none}.mgt2 .minmaxwrapper input:focus{outline:none;box-shadow:none}.mgt2 .minmaxwrapper input:first-child{margin-left:5px}.mgt2 .minmaxwrapper input:last-child{margin-right:5px}.mgt2 .minmaxwrapper span{font-size:1.5rem;font-weight:500}.computer-overload,.computer-overload i{color:var(--mgt2-color-warning) !important}ul.softwares{list-style:none;margin:0;padding:0}ul.softwares li{display:inline-block;color:var(--mgt2-color-software);background-color:var(--mgt2-bgcolor-software);padding:3px 7px;border-radius:8px}ul.softwares li a{display:none}ul.softwares li a:first-child{margin:0 .5rem}ul.softwares li:hover a{display:inline-block}.character-header{display:flex;margin-top:8px;margin-right:8px;flex-direction:row;flex-wrap:nowrap;flex-grow:0;flex-shrink:0;justify-content:flex-start;align-items:flex-start}.character-header-img{flex-basis:138px;flex-grow:0;flex-shrink:0;text-align:center}.character-summary{flex:0 0 100%;margin:0;padding:0;list-style:none;border-top:5px double var(--mgt2-bgcolor-primary)}.character-summary li{float:left;margin:0;padding:0;color:var(--mgt2-color-form)}.character-summary input{display:block;border:none;font-weight:bold;font-family:"Roboto Condensed",sans-serif;background-color:#fff;color:var(--mgt2-color-form);font-size:.8rem;border:1px solid #fff}.character-summary input:hover{border:1px solid #111}.character-header-body{display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start}.character-header-body legend{font-size:.7rem;text-transform:uppercase;text-wrap:nowrap;color:var(--mgt2-color-form)}.character-header-body legend i{margin-right:.25rem}.character-body{display:flex;flex-direction:row;align-content:flex-start;flex-wrap:nowrap;min-height:330px}.character-body .tab{width:100%}.lifes{height:100%;display:flex;flex-direction:row;justify-content:center;align-items:center}.lifes div{font-size:2rem}.character-states{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;float:right}.character-states li{display:flex;margin:0;padding:0;color:var(--mgt2-color-form);justify-content:space-between;align-items:center;width:100%;font-size:.7rem;line-height:1.1rem}.encumbrance-normal{color:var(--mgt2-encumbrance-normal) !important}.encumbrance-heavy{color:var(--mgt2-encumbrance-heavy) !important;font-weight:bold}.character-body{height:100%;overflow:hidden;display:flex;flex-direction:row;width:100%;justify-content:flex-start;align-items:flex-start;border-top:3px solid #000}.actor-footer{bottom:0;color:var(--mgt2-color-primary);background-color:var(--mgt2-bgcolor-primary);width:100%;margin:0 -8px;height:1.5rem;justify-content:space-between;align-items:center;padding:0 1rem;flex-grow:0;flex-shrink:0;display:flex;flex-direction:row}.mgt2.character .tab[data-tab=notes] .editor,.mgt2.character .tab[data-tab=notes] .editor-content,.mgt2.character .tab[data-tab=notes] prose-mirror,.mgt2.character .tab[data-tab=biography] .editor,.mgt2.character .tab[data-tab=biography] .editor-content,.mgt2.character .tab[data-tab=biography] prose-mirror,.mgt2.character .tab[data-tab=finance] .editor,.mgt2.character .tab[data-tab=finance] .editor-content,.mgt2.character .tab[data-tab=finance] prose-mirror{min-height:300px !important;height:auto !important}.itemsheet{display:flex !important;flex-direction:column !important;height:100% !important;background:#fff !important;overflow:hidden !important}.item-type-bar{background:#0a0405 !important;border-bottom:3px solid #ee4050 !important;padding:4px 12px !important;display:flex !important;align-items:center !important;gap:8px !important;min-height:0 !important;flex-shrink:0 !important}.item-type-bar .item-type-label{color:#ee4050 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.65rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:2px !important}.item-sheet-header{background:#0a0405 !important;padding:10px 14px !important;display:flex !important;align-items:center !important;gap:12px !important;flex-shrink:0 !important}.item-sheet-header .item-header-img{width:64px !important;height:64px !important;object-fit:cover !important;border:2px solid #ee4050 !important;border-radius:4px !important;cursor:pointer !important;flex-shrink:0 !important}.item-sheet-header .item-header-name{flex:1 !important;background:rgba(0,0,0,0) !important;border:none !important;border-bottom:1px solid rgba(238,64,80,.4) !important;color:#fff !important;font-family:"Barlow Condensed",sans-serif !important;font-size:1.6rem !important;font-weight:800 !important;text-transform:uppercase !important;letter-spacing:1px !important;padding:2px 0 !important;line-height:1.1 !important;width:100% !important}.item-sheet-header .item-header-name:focus{outline:none !important;border-bottom-color:#ee4050 !important}.item-sheet-header .item-header-name::placeholder{color:hsla(0,0%,100%,.35) !important}.item-stats-bar{background:#f5eeee !important;border-bottom:1px solid #ddc8c8 !important;padding:6px 14px !important;display:flex !important;flex-wrap:wrap !important;gap:6px !important;flex-shrink:0 !important}.item-stat-pill{display:flex !important;flex-direction:column !important;align-items:center !important;background:#fff !important;border:1px solid #ddc8c8 !important;border-radius:4px !important;padding:3px 10px !important;min-width:56px !important}.item-stat-pill .stat-label{color:#644 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.6rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1.5px !important;line-height:1.2 !important}.item-stat-pill .stat-value{color:#0a0405 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:1rem !important;font-weight:800 !important;line-height:1.1 !important}.item-stat-pill input,.item-stat-pill select{color:#0a0405 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:1rem !important;font-weight:800 !important;background:rgba(0,0,0,0) !important;border:none !important;text-align:center !important;width:100% !important;padding:0 !important;line-height:1.1 !important}.item-stat-pill input:focus,.item-stat-pill select:focus{outline:none !important;border-bottom:1px solid #ee4050 !important}.item-stat-pill-checkbox{display:flex !important;flex-direction:row !important;align-items:center !important;gap:5px !important;background:#fff !important;border:1px solid #ddc8c8 !important;border-radius:4px !important;padding:4px 10px !important}.item-stat-pill-checkbox input[type=checkbox]{margin:0 !important;width:14px !important;height:14px !important;accent-color:#ee4050 !important}.item-stat-pill-checkbox label{color:#644 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.65rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1px !important;cursor:pointer !important}.itemsheet .horizontal-tabs.tabs{background:#f5eeee !important;border-bottom:2px solid #ddc8c8 !important;display:flex !important;flex-wrap:wrap !important;gap:0 !important;padding:0 10px !important;flex-shrink:0 !important}.itemsheet .horizontal-tabs.tabs .item.tab-select{color:#644 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.72rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1.5px !important;padding:6px 14px !important;border:none !important;border-bottom:2px solid rgba(0,0,0,0) !important;margin-bottom:-2px !important;background:rgba(0,0,0,0) !important;cursor:pointer !important;transition:color .15s,border-color .15s !important}.itemsheet .horizontal-tabs.tabs .item.tab-select:hover{color:#ee4050 !important}.itemsheet .horizontal-tabs.tabs .item.tab-select.active{color:#ee4050 !important;border-bottom-color:#ee4050 !important;background:rgba(0,0,0,0) !important}.itemsheet .tab-content-area{flex:1 !important;overflow-y:auto !important;padding:10px 14px !important;background:#fff !important}.itemsheet .tab[data-group]{display:none !important}.itemsheet .tab[data-group].active{display:block !important}.itemsheet .field-group{margin-bottom:8px !important}.itemsheet .field-group label{display:block !important;color:#644 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.68rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1px !important;margin-bottom:2px !important}.itemsheet .field-groups{display:flex !important;flex-wrap:wrap !important;gap:10px !important;align-items:flex-start !important}.itemsheet .field-groups .field-group{flex:1 !important;min-width:80px !important}.itemsheet input[type=text],.itemsheet input[type=number],.itemsheet select,.itemsheet textarea{background:#fdf8f8 !important;border:1px solid #ddc8c8 !important;border-radius:3px !important;color:#0a0405 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.85rem !important;padding:4px 8px !important;width:100% !important}.itemsheet input[type=text]:focus,.itemsheet input[type=number]:focus,.itemsheet select:focus,.itemsheet textarea:focus{outline:none !important;border-color:#ee4050 !important;box-shadow:0 0 0 2px rgba(238,64,80,.12) !important}.itemsheet textarea{resize:vertical !important;min-height:80px !important}.itemsheet .mgt2-checkbox{display:flex !important;align-items:center !important;gap:6px !important;color:#644 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.72rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1px !important}.itemsheet .mgt2-checkbox input[type=checkbox]{width:14px !important;height:14px !important;margin:0 !important;accent-color:#ee4050 !important}.itemsheet .table-container{border:1px solid #ddc8c8 !important;border-radius:4px !important;overflow:hidden !important;margin-top:8px !important}.itemsheet .table-row{display:flex !important;align-items:stretch !important;border-bottom:1px solid #e8dada !important}.itemsheet .table-row:last-child{border-bottom:none !important}.itemsheet .table-row.heading{background:#0a0405 !important;color:#ee4050 !important}.itemsheet .table-row.heading .row-item{color:#ee4050 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.68rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1px !important;padding:5px 8px !important}.itemsheet .table-row:not(.heading){background:#fff !important}.itemsheet .table-row:not(.heading):nth-child(even){background:#fdf8f8 !important}.itemsheet .table-row:not(.heading) .row-item{padding:4px 6px !important}.itemsheet .table-row:not(.heading) .row-item input,.itemsheet .table-row:not(.heading) .row-item textarea,.itemsheet .table-row:not(.heading) .row-item select{font-size:.8rem !important;padding:2px 6px !important}.itemsheet .row-item{flex:1 !important;border-right:1px solid #e8dada !important}.itemsheet .row-item:last-child{border-right:none !important}.itemsheet .row-item.row-item-left{justify-content:flex-start !important}.itemsheet .row-item.row-item-right{flex:0 0 auto !important;min-width:36px !important;display:flex !important;align-items:center !important;justify-content:center !important}.itemsheet .row-item.row-item-30{flex:0 0 30% !important}.itemsheet .item-controls{display:flex !important;align-items:center !important;justify-content:center !important;gap:6px !important}.itemsheet .item-controls a{color:#888 !important;cursor:pointer !important}.itemsheet .item-controls a:hover{color:#ee4050 !important}.itemsheet-header{display:none !important}.itemsheet-maincol{display:none !important}.itemsheet-panel{display:contents !important}.itemsheet .item-details-grid{display:grid !important;grid-template-columns:1fr 1fr !important;gap:4px 16px !important;align-items:start !important}.itemsheet .item-details-grid .table-container{grid-column:1/-1 !important;margin-top:10px !important}.itemsheet .field-row{display:flex !important;align-items:center !important;gap:8px !important;min-height:28px !important}.itemsheet .field-row label{flex:0 0 100px !important;min-width:0 !important;margin-bottom:0 !important;white-space:nowrap !important;overflow:hidden !important;text-overflow:ellipsis !important}.itemsheet .field-row input[type=text],.itemsheet .field-row input[type=number],.itemsheet .field-row select{flex:1 !important;width:auto !important;height:24px !important;padding:2px 6px !important}.itemsheet .field-row input.short{flex:0 0 56px !important;width:56px !important}.itemsheet .field-row .range-inputs{display:flex !important;gap:4px !important;flex:1 !important}.itemsheet .field-row .range-inputs input{flex:0 0 52px !important;width:52px !important}.itemsheet .field-row .range-inputs select{flex:1 !important}.itemsheet .field-row.full{grid-column:1/-1 !important}.itemsheet .field-row--check label{flex:unset !important;display:flex !important;align-items:center !important;gap:6px !important;cursor:pointer !important}.itemsheet .tab[data-tab=tab1] .editor,.itemsheet .tab[data-tab=tab1] .editor-container{min-height:200px !important}li.chat-message{background:#fff !important;border:1px solid #cbb !important;box-shadow:0 2px 8px rgba(0,0,0,.18) !important;color:#0a0405;padding:0 !important}li.chat-message .message-header{background:#0a0405;border-bottom:3px solid #ee4050;padding:4px 10px}li.chat-message .message-header .message-sender{color:#ee4050;font-family:"Barlow Condensed",sans-serif;font-weight:700;font-size:.75rem;text-transform:uppercase;letter-spacing:1.5px;margin:0}li.chat-message .message-header .message-timestamp{color:#888;font-size:.68rem}li.chat-message .message-header .message-delete i{color:#888}li.chat-message .message-header:hover .message-delete i{color:#ee4050}li.chat-message .message-content>.dice-roll{background:#fdf8f8;padding:6px 12px}li.chat-message .message-content>.dice-roll .dice-formula{background:#f5eeee;border:1px solid #ddc8c8;border-radius:3px;color:#644;font-size:.78rem;padding:2px 10px;text-align:center;font-family:"Barlow Condensed",sans-serif;display:inline-block;margin:0 auto 4px auto}li.chat-message .message-content>.dice-roll .dice-result{display:flex;flex-direction:column;align-items:center;gap:3px}li.chat-message .message-content>.dice-roll h4.dice-total{font-family:"Barlow Condensed",sans-serif;font-size:2.2rem !important;font-weight:900;color:#0a0405 !important;margin:2px 0;line-height:1;text-align:center;background:rgba(0,0,0,0) !important;width:100% !important;display:block !important}li.chat-message .message-content>.dice-roll .dice-tooltip .part-header{background:#f5eeee;padding:2px 8px;display:flex;justify-content:space-between}li.chat-message .message-content>.dice-roll .dice-tooltip .part-header .part-formula,li.chat-message .message-content>.dice-roll .dice-tooltip .part-header .part-total{color:#ee4050;font-weight:700;font-size:.78rem}li.chat-message .message-content>.dice-roll .dice-tooltip .dice-rolls{display:flex;flex-wrap:wrap;justify-content:center;gap:4px;padding:6px 8px;list-style:none;margin:0}li.chat-message .message-content>.dice-roll .dice-tooltip .roll.die{display:flex;align-items:center;justify-content:center;width:26px;height:26px;background:#f5eeee;border:1.5px solid #ddc8c8;border-radius:4px;color:#3a2020;font-weight:700;font-size:.9rem}.mgt2-chat-roll{font-family:"Barlow Condensed",sans-serif}.mgt2-chat-roll .mgt2-roll-header{background:#0a0405 !important;border-left:4px solid #ee4050 !important;padding:5px 10px 4px 10px !important}.mgt2-chat-roll .mgt2-roll-header .mgt2-roll-char-name{display:block;color:#fff;font-size:1.2rem;font-weight:800;text-transform:uppercase;letter-spacing:1px;line-height:1}.mgt2-chat-roll .mgt2-roll-header .mgt2-roll-meta{display:flex;align-items:center;gap:6px;margin-top:2px}.mgt2-chat-roll .mgt2-roll-header .mgt2-roll-type{color:#ee4050;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:2px}.mgt2-chat-roll .mgt2-roll-header .mgt2-roll-sep{color:#888}.mgt2-chat-roll .mgt2-roll-header .mgt2-roll-difficulty{color:#bbb;font-size:.68rem;text-transform:uppercase;letter-spacing:1px}.mgt2-chat-roll .mgt2-roll-modifier{background:#f5eeee;border-bottom:1px solid #e8dada;padding:3px 14px;color:#644;font-size:.8rem}.mgt2-chat-roll .mgt2-roll-modifiers{display:flex;gap:6px;flex-wrap:wrap;background:#f5eeee;border-bottom:1px solid #e8dada;padding:3px 14px}.mgt2-chat-roll .mgt2-roll-modifiers .mgt2-roll-mod-tag{color:#644;font-size:.8rem}.mgt2-chat-roll .dice-roll{background:#fdf8f8;padding:4px 10px;cursor:pointer}.mgt2-chat-roll .dice-roll .dice-flavor{color:#888;font-size:.73rem;text-align:center;margin-bottom:3px}.mgt2-chat-roll .dice-roll .dice-result{display:flex;flex-direction:column;align-items:center;gap:3px}.mgt2-chat-roll .dice-roll .dice-formula{background:#f5eeee;border:1px solid #ddc8c8;border-radius:3px;color:#644;font-size:.78rem;padding:2px 14px;font-family:"DM Sans",sans-serif;text-align:center}.mgt2-chat-roll .dice-roll .dice-tooltip{width:100%}.mgt2-chat-roll .dice-roll .dice-tooltip .wrapper{background:rgba(0,0,0,0)}.mgt2-chat-roll .dice-roll .dice-tooltip .tooltip-part{background:#fdf8f8;border:1px solid #e8dada;border-radius:4px;margin-bottom:6px;overflow:hidden}.mgt2-chat-roll .dice-roll .dice-tooltip .part-header{background:#f5eeee;padding:3px 8px}.mgt2-chat-roll .dice-roll .dice-tooltip .part-header .part-formula,.mgt2-chat-roll .dice-roll .dice-tooltip .part-header .part-total{color:#ee4050;font-weight:700;font-size:.8rem}.mgt2-chat-roll .dice-roll .dice-tooltip .dice-rolls{display:flex;flex-wrap:wrap;justify-content:center;gap:5px;padding:8px 10px;list-style:none;margin:0}.mgt2-chat-roll .dice-roll .dice-tooltip .roll.die{display:flex;align-items:center;justify-content:center;width:30px;height:30px;background:#f5eeee;border:1.5px solid #ddc8c8;border-radius:5px;color:#3a2020;font-weight:700;font-size:1rem;font-family:"Barlow Condensed",sans-serif}.mgt2-chat-roll .dice-roll .dice-tooltip .roll.die.max{border-color:#ee4050;color:#ee4050;background:#fde8ea;box-shadow:0 0 8px rgba(238,64,80,.2)}.mgt2-chat-roll .dice-roll .dice-tooltip .roll.die.min{border-color:#cbb;color:#999}.mgt2-chat-roll .dice-roll h4.dice-total{font-size:1.6rem !important;font-weight:900;color:#0a0405 !important;margin:3px 0 2px 0;line-height:1;font-family:"Barlow Condensed",sans-serif;text-align:center;text-shadow:none;background:#f5eeee !important;border:1px solid #ddc8c8 !important;border-radius:4px !important;padding:2px 14px !important;width:auto !important;display:inline-block !important;min-width:60px}.mgt2-chat-roll .dice-roll h4.dice-total.success{color:#1a8840 !important;background:rgba(82,232,122,.1) !important;border-color:rgba(26,136,64,.35) !important}.mgt2-chat-roll .dice-roll h4.dice-total.failure{color:#ee4050 !important;background:rgba(238,64,80,.07) !important;border-color:rgba(238,64,80,.3) !important}.mgt2-chat-roll .mgt2-outcome{text-align:center;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:2px;padding:3px 10px}.mgt2-chat-roll .mgt2-outcome i{margin-right:5px}.mgt2-chat-roll .mgt2-outcome.is-success{background:rgba(26,136,64,.08);color:#1a8840;border-top:1px solid rgba(26,136,64,.2)}.mgt2-chat-roll .mgt2-outcome.is-failure{background:rgba(238,64,80,.07);color:#ee4050;border-top:1px solid rgba(238,64,80,.2)}.mgt2-chat-roll .mgt2-effect{text-align:center;font-size:.72rem;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;padding:2px 10px 4px 10px;border-bottom:2px solid rgba(0,0,0,0)}.mgt2-chat-roll .mgt2-effect .mgt2-effect-value{font-size:1rem;font-weight:900;margin-left:4px}.mgt2-chat-roll .mgt2-effect .mgt2-healing-amount{font-size:.75rem;font-weight:600;margin-left:6px;opacity:.85}.mgt2-chat-roll .mgt2-effect.is-success{color:#1a8840;border-bottom-color:rgba(26,136,64,.25)}.mgt2-chat-roll .mgt2-effect.is-success .mgt2-effect-value{color:#1a8840}.mgt2-chat-roll .mgt2-effect.is-failure{color:#ee4050;border-bottom-color:rgba(238,64,80,.25)}.mgt2-chat-roll .mgt2-effect.is-failure .mgt2-effect-value{color:#ee4050}.mgt2-chat-roll .mgt2-buttons{display:flex;justify-content:center;flex-wrap:wrap;gap:4px;padding:5px 10px;background:#f5eeee;border-top:1px solid #ddc8c8}.mgt2-chat-roll .mgt2-buttons button{background:#fff;border:1px solid #cbb;color:#3a2020;border-radius:3px;padding:4px 14px;font-family:"Barlow Condensed",sans-serif;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:1px;cursor:pointer;transition:background .15s ease,box-shadow .15s ease;box-shadow:none}.mgt2-chat-roll .mgt2-buttons button i{font-size:1rem;padding:0;margin:0}.mgt2-chat-roll .mgt2-buttons button:hover{background:#ee4050;border-color:#ee4050;color:#fff;box-shadow:0 0 8px rgba(238,64,80,.25)}.mgt2 nav.horizontal-tabs{color:var(--mgt2-color-primary);background:var(--mgt2-bgcolor-primary);font-style:normal;font-weight:700;font-size:14px;line-height:30px;text-transform:uppercase;justify-content:space-around;align-items:center;font-family:"Roboto Condensed",sans-serif}.mgt2 nav.horizontal-tabs a.item{position:relative;flex:1 1 auto}.mgt2 nav.horizontal-tabs a.item i{margin-right:.5rem}.mgt2 nav.horizontal-tabs>a.item::after{content:"";position:absolute;inset:.25rem .25rem .25rem .25rem;border:1px solid var(--mgt2-color-primary-active);pointer-events:none}.mgt2 nav.horizontal-tabs>a.item.active::after{border-bottom:none;border-top:2px solid var(--mgt2-color-primary-active);border-left:2px solid var(--mgt2-color-primary-active);border-right:2px solid var(--mgt2-color-primary-active);inset:.25rem .25rem 0 .25rem}.mgt2 nav.horizontal-tabs .active{color:var(--mgt2-color-primary);text-decoration:none;text-shadow:none;border-bottom:none}.tab[data-tab].fullsize{height:calc(100% - 3rem)}.subTab{flex-flow:column;height:100%;display:flex;justify-content:flex-start;align-items:stretch}.tab-scroll{overflow-y:auto;height:100%}.subTabs{height:100%;flex-direction:column}.subTabs.active{display:flex !important}.mgt2.character,.mgt2.creature,.mgt2.vehicule{overflow:visible !important}.mgt2.character>.window-content,.mgt2.creature>.window-content,.mgt2.vehicule>.window-content{overflow:visible !important}.mgt2.character .editable,.mgt2.character .locked,.mgt2.creature .editable,.mgt2.creature .locked,.mgt2.vehicule .editable,.mgt2.vehicule .locked{overflow:visible !important}.mgt2.character .character-body{position:relative !important;overflow:visible !important}.mgt2.creature .creature-body{position:relative !important;overflow:visible !important}.mgt2.vehicule .vehicule-content{position:relative !important;overflow:visible !important}.mgt2 nav.sheet-sidebar.tabs{position:absolute !important;left:100% !important;top:0 !important;width:62px !important;flex:none !important;display:flex !important;flex-direction:column;background:linear-gradient(180deg, #1e0507 0%, #110304 40%, #0a0202 100%);border-top:1px solid rgba(238,64,80,.35);border-right:1px solid rgba(238,64,80,.25);border-bottom:1px solid rgba(238,64,80,.2);border-left:3px solid var(--mgt2-color-primary);border-radius:0 10px 10px 0;box-shadow:6px 0 24px rgba(0,0,0,.75),0 0 0 0 rgba(0,0,0,0),inset 1px 0 16px rgba(238,64,80,.05);z-index:10;overflow:hidden !important;padding:2px 0}.mgt2 nav.sheet-sidebar.tabs>.item{position:relative;display:flex !important;flex-direction:column !important;justify-content:center !important;align-items:center !important;gap:4px !important;min-height:54px;padding:8px 4px;color:rgba(238,64,80,.45);border-bottom:1px solid rgba(238,64,80,.07);cursor:pointer;transition:background 180ms ease,color 180ms ease,box-shadow 180ms ease;user-select:none;text-decoration:none !important}.mgt2 nav.sheet-sidebar.tabs>.item::before{content:"";position:absolute;left:-3px;top:18%;bottom:18%;width:3px;background:rgba(0,0,0,0);border-radius:0 3px 3px 0;transition:background 180ms ease,top 180ms ease,bottom 180ms ease,box-shadow 180ms ease}.mgt2 nav.sheet-sidebar.tabs>.item:hover{color:var(--mgt2-color-primary);background:rgba(238,64,80,.07)}.mgt2 nav.sheet-sidebar.tabs>.item:hover::before{background:rgba(238,64,80,.5)}.mgt2 nav.sheet-sidebar.tabs>.item:hover .tab-label{color:rgba(238,64,80,.7)}.mgt2 nav.sheet-sidebar.tabs>.item.active{color:var(--mgt2-color-primary);background:linear-gradient(90deg, rgba(238, 64, 80, 0.16) 0%, rgba(238, 64, 80, 0.03) 100%);box-shadow:inset 0 1px 0 rgba(238,64,80,.12),inset 0 -1px 0 rgba(238,64,80,.08)}.mgt2 nav.sheet-sidebar.tabs>.item.active::before{background:var(--mgt2-color-primary);top:10%;bottom:10%;box-shadow:0 0 10px rgba(238,64,80,.7),0 0 20px rgba(238,64,80,.3)}.mgt2 nav.sheet-sidebar.tabs>.item.active i{filter:drop-shadow(0 0 5px rgba(238, 64, 80, 0.55))}.mgt2 nav.sheet-sidebar.tabs>.item.active .tab-label{color:rgba(238,64,80,.85)}.mgt2 nav.sheet-sidebar.tabs>.item i{font-size:1.15rem;pointer-events:none;line-height:1}.mgt2 nav.sheet-sidebar.tabs>.item .tab-label{font-family:"Barlow Condensed",sans-serif;font-size:.52rem;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:rgba(238,64,80,.3);line-height:1;pointer-events:none;transition:color 180ms ease}.container-controls{display:inline-block;margin-left:1rem}.container-controls a:not(:last-child){margin-right:.5rem}.table-container{display:flex;flex-flow:column nowrap;width:100%;margin:0 auto}.table-row{display:flex;flex-flow:row nowrap;width:100%;position:relative;align-items:flex-start}.table-row.heading{background-color:var(--mgt2-bgcolor-primary);align-items:center}.table-row.heading .row-item{text-transform:uppercase;font-size:12px}.table-row.heading .row-item:first-child{font-weight:bold;font-size:13px;letter-spacing:3px}.table-row.heading .row-item:first-child i{margin-right:.5rem}.table-row.heading.color-1 .row-item{background-color:var(--mgt2-bgcolor-primary);color:var(--mgt2-color-primary)}.table-row.heading.color-2 .row-item{background-color:var(--mgt2-bgcolor-form);color:var(--mgt2-bgcolor-primary)}.table-row.heading div.row-item{padding-left:5px}.table-row.heading div.row-item:last-child{padding-right:5px}.table-row:hover:not(.heading){background-color:var(--mgt2-row-hover)}.table-row-mb-4{margin-bottom:4px}.row-item{display:flex;flex-grow:1;font-size:14px;line-height:25px;align-items:center;transition:all .15s ease-in-out;overflow:hidden !important;text-overflow:ellipsis;text-wrap:nowrap}.row-item.item-controls{justify-content:right;padding-right:4px}.row-item.item-controls a:not(:last-child){margin-right:.4rem}.row-item i{color:var(--mgt2-color-form)}.row-item a[data-roll]{margin-right:.5rem}.heading.color-1 .row-item i{color:var(--mgt2-color-primary) !important}.heading.color-2 .row-item i{color:var(--mgt2-bgcolor-primary) !important}.table-subrow{border-left:2px var(--mgt2-subrow-color) dashed;color:var(--mgt2-subrow-color)}.table-subrow .row-item{font-size:.8em;line-height:20px}.table-subrow .row-item:first-child{padding-left:1rem}.table-subrow .row-item>i{margin-right:4px}.row-item-center{justify-content:center;text-align:center}.row-item-left{justify-content:left}.row-item-right{justify-content:right}.row-item-space-between{justify-content:space-between}.row-item-2{flex-basis:4rem}.row-item-5{flex-basis:5%}.row-item-10{flex-basis:10%}.row-item-12{flex-basis:4rem}.row-item-15{flex-basis:5rem}.row-item-20{flex-basis:20%}.row-item-25{flex-basis:25%}.row-item-30{flex-basis:30%}.row-item-35{flex-basis:35%}.row-item-40{flex-basis:40%}.row-item-45{flex-basis:45%}.row-item-50{flex-basis:50%}.row-item-65{flex-basis:50%}.row-item-85{flex-basis:50%}.row-item-storage{flex-wrap:wrap;flex-grow:0;flex-basis:20%;font-size:.7rem;line-height:.8rem}.item-control.item-equip i{color:var(--mgt2-row-inactive-icon)}.item-control.item-equip.active i{color:var(--mgt2-color-form)}.row-description{flex-basis:100%;font-size:14px;padding:4px 0;justify-content:left;transition:all .15s ease-in-out}.row-sub-container{display:flex;flex-flow:column nowrap;flex:1}.row-sub-container .row-item{padding:8px 0;border-bottom:1px solid var(--mgt2-bgcolor-primary)}.table-row:last-child,.row-sub-container .row-item:last-child{border-bottom:0}.table-container.editable .table-row{margin-top:4px}.table-container.editable .table-row:last-child{margin-bottom:4px}.item-options{position:absolute;top:.7rem;font-size:.7em;left:1.6rem;text-transform:uppercase;font-family:"DM Sans",sans-serif;font-optical-sizing:auto;font-weight:600;font-style:normal;color:var(--mgt2-subrow-color)}.creature-sheet .creature-header{display:flex;flex-direction:row;align-items:flex-start;gap:.75rem;padding:.5rem .75rem .5rem;background:var(--mgt2-bgcolor-form);border-bottom:2px solid var(--mgt2-color-primary)}.creature-sheet .creature-header-img{flex:0 0 80px}.creature-sheet .creature-header-img img.profile{width:80px;height:80px;object-fit:cover;border:2px solid var(--mgt2-color-primary);border-radius:4px;cursor:pointer}.creature-sheet .creature-header-body{flex:1;display:flex;flex-direction:column;gap:.4rem}.creature-sheet .creature-name{font-family:"Barlow Condensed",sans-serif;font-size:1.6rem;font-weight:700;font-style:italic;color:var(--mgt2-color-form);background:rgba(0,0,0,0);border:none;border-bottom:1px solid var(--mgt2-color-primary);width:100%;padding:0}.creature-sheet .creature-name:focus{outline:none;border-bottom-color:var(--mgt2-color-secondary)}.creature-sheet .creature-stats-row{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}.creature-sheet .creature-stat{display:flex;flex-direction:column;align-items:center;background:var(--mgt2-bgcolor-primary);border:1px solid var(--mgt2-color-primary);border-radius:4px;padding:2px 6px;min-width:4rem}.creature-sheet .creature-stat label{font-family:"Barlow Condensed",sans-serif;font-size:.7rem;font-weight:700;text-transform:uppercase;color:var(--mgt2-color-primary);line-height:1.2}.creature-sheet .creature-stat .creature-stat-value{display:flex;align-items:center;gap:2px}.creature-sheet .creature-stat .creature-stat-value input{width:2.5rem;text-align:center;background:rgba(0,0,0,0);border:none;color:var(--mgt2-bgcolor-form);font-size:1rem;font-weight:700;padding:0}.creature-sheet .creature-stat .creature-stat-value input:focus{outline:none;border-bottom:1px solid var(--mgt2-color-primary)}.creature-sheet .creature-stat .creature-stat-value .stat-max{width:2.5rem}.creature-sheet .creature-stat .creature-stat-value .stat-unit{font-size:.7rem;color:var(--mgt2-bgcolor-form);opacity:.7}.creature-sheet .creature-stat .creature-stat-value .stat-readonly{font-size:1rem;font-weight:700;color:var(--mgt2-bgcolor-form);min-width:2.5rem;text-align:center}.creature-sheet .creature-behavior-row{display:flex;flex-direction:row;align-items:center;gap:.5rem;flex-wrap:nowrap}.creature-sheet .creature-behavior-row label{flex:0 0 auto;font-size:.75rem;text-transform:uppercase;color:var(--mgt2-color-primary);font-weight:700;white-space:nowrap}.creature-sheet .creature-behavior-row .behavior-select{flex:1 1 auto;min-width:0;background:var(--mgt2-bgcolor-form);color:var(--mgt2-color-form);border:1px solid var(--mgt2-color-primary);border-radius:3px;font-size:.85rem;padding:1px 4px}.creature-sheet .creature-behavior-row .behavior-sep{flex:0 0 auto;color:var(--mgt2-color-form);opacity:.5}.creature-sheet .creature-size-badge{flex:0 0 auto;white-space:nowrap;font-size:.75rem;font-style:italic;color:var(--mgt2-bgcolor-form);background:var(--mgt2-bgcolor-primary);border:1px solid var(--mgt2-color-primary);border-radius:3px;padding:1px 6px}.creature-sheet .creature-body{flex:1;overflow-y:auto;padding:.5rem .75rem;min-height:228px}.creature-sheet .creature-body .tab{display:none}.creature-sheet .creature-body .tab.active{display:block}.creature-sheet .creature-info-tab{display:flex;flex-direction:column;gap:.5rem}.creature-sheet .creature-description{width:100%;background:var(--mgt2-bgcolor-form);color:var(--mgt2-color-form);border:1px solid var(--mgt2-color-primary);border-radius:3px;padding:4px;resize:vertical;font-size:.9rem}.creature-sheet .creature-damage .damage-formula{font-family:"Barlow Condensed",sans-serif;font-weight:700;color:var(--mgt2-color-primary);font-size:1rem}.creature-sheet .trait-name{font-weight:600;color:var(--mgt2-color-form)}.creature-sheet .trait-value{font-style:italic;color:var(--mgt2-color-secondary)}.mgt2-creature-roll .mgt2-roll-header{display:flex;flex-direction:row;align-items:center;gap:.6rem}.mgt2-creature-roll .creature-chat-img{width:36px;height:36px;object-fit:cover;border:1px solid var(--mgt2-color-primary);border-radius:3px;flex:0 0 36px}.mgt2-creature-roll .mgt2-roll-header-text{flex:1}.mgt2.creature .table-container+.header{margin-top:8px}.mgt2.creature .tab[data-tab=info] .editor,.mgt2.creature .tab[data-tab=info] .editor-content,.mgt2.creature .tab[data-tab=info] prose-mirror{min-height:300px !important;height:auto !important}.vehicule-sheet .vehicule-header{display:flex;flex-direction:row;align-items:flex-start;gap:.75rem;padding:.5rem .75rem;background:var(--mgt2-bgcolor-form);border-bottom:2px solid var(--mgt2-color-primary);flex-shrink:0}.vehicule-sheet .vehicule-header-img{flex:0 0 90px}.vehicule-sheet .vehicule-header-img img.profile{width:90px;height:90px;object-fit:cover;border:2px solid var(--mgt2-color-primary);border-radius:4px;cursor:pointer}.vehicule-sheet .vehicule-header-body{flex:1;display:flex;flex-direction:column;gap:.4rem;min-width:0}.vehicule-sheet .vehicule-name{font-family:"Barlow Condensed",sans-serif;font-size:1.6rem;font-weight:700;font-style:italic;color:var(--mgt2-color-form);background:rgba(0,0,0,0);border:none;border-bottom:1px solid var(--mgt2-color-primary);width:100%;padding:0}.vehicule-sheet .vehicule-name:focus{outline:none;border-bottom-color:var(--mgt2-color-secondary)}.vehicule-sheet .vehicule-header-stats{display:flex;flex-direction:row;align-items:flex-start;gap:.75rem;flex-wrap:wrap}.vehicule-sheet .vehicule-stat-box{display:flex;flex-direction:column;align-items:center;background:var(--mgt2-bgcolor-primary);border:1px solid var(--mgt2-color-primary);border-radius:4px;padding:3px 8px;min-width:4rem}.vehicule-sheet .vehicule-stat-box label{font-family:"Barlow Condensed",sans-serif;font-size:.65rem;font-weight:700;text-transform:uppercase;color:var(--mgt2-color-primary);line-height:1.2;white-space:nowrap}.vehicule-sheet .vehicule-stat-value{display:flex;align-items:center;gap:2px}.vehicule-sheet .vehicule-stat-value span{color:var(--mgt2-color-primary);font-weight:700}.vehicule-sheet .vehicule-stat-value input[type=number]{width:2.8rem;text-align:center;background:rgba(0,0,0,0);border:none;color:var(--mgt2-color-form);font-family:"Rubik",monospace;font-size:1rem;font-weight:600;padding:0}.vehicule-sheet .vehicule-stat-value input[type=number]:focus{outline:none;border-bottom:1px solid var(--mgt2-color-secondary)}.vehicule-sheet .vehicule-hull{min-width:6rem}.vehicule-sheet .vehicule-hull .vehicule-stat-value input[type=number]{width:2.5rem}.vehicule-sheet .vehicule-armor-group{display:flex;flex-direction:column;gap:2px}.vehicule-sheet .vehicule-armor-label{font-family:"Barlow Condensed",sans-serif;font-size:.65rem;font-weight:700;text-transform:uppercase;color:var(--mgt2-color-primary);text-align:center}.vehicule-sheet .vehicule-armor-row{display:flex;flex-direction:row;gap:4px}.vehicule-sheet .vehicule-armor-box{min-width:3.5rem}.vehicule-sheet .vehicule-content{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:320px}.vehicule-sheet .vehicule-tab{flex:1;overflow-y:auto;padding:.75rem;display:none}.vehicule-sheet .vehicule-tab.active{display:block}.vehicule-sheet .vehicule-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px}.vehicule-sheet .vehicule-field{display:flex;flex-direction:row;align-items:center;gap:8px;padding:3px 0;border-bottom:1px solid rgba(0,0,0,.08)}.vehicule-sheet .vehicule-field:last-child{border-bottom:none}.vehicule-sheet .vehicule-field label{font-family:"Barlow Condensed",sans-serif;font-size:.72rem;font-weight:700;text-transform:uppercase;color:var(--mgt2-color-primary);flex:0 0 120px;white-space:nowrap}.vehicule-sheet .vehicule-field input[type=number],.vehicule-sheet .vehicule-field select{flex:1;background:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:3px;color:var(--mgt2-color-form);font-family:"Barlow Condensed",sans-serif;font-size:.9rem;padding:2px 4px}.vehicule-sheet .vehicule-field input[type=number]:focus,.vehicule-sheet .vehicule-field select:focus{outline:none;border-color:var(--mgt2-color-primary);background:hsla(0,0%,100%,.1)}.vehicule-sheet .vehicule-field input[type=number]{text-align:center;width:4rem}.vehicule-sheet .vehicule-field select{cursor:pointer}.mgt2.vehicule .vehicule-tab[data-tab=description] .editor,.mgt2.vehicule .vehicule-tab[data-tab=description] .editor-content,.mgt2.vehicule .vehicule-tab[data-tab=description] prose-mirror{min-height:300px !important;height:auto !important} +@import"https://fonts.googleapis.com/css2?family=Barlow+Condensed:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap";@import"https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&display=swap";@import"https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap";.black-and-red{--mgt2-color-form: #0A0405;--mgt2-bgcolor-form: #fff;--mgt2-color-primary: #EE4050;--mgt2-color-primary-active: #AF2F3C;--mgt2-bgcolor-primary: #0A0405;--mgt2-color-primary-light: #4b4a44;--mgt2-color-warning: #EE4050;--mgt2-color-dm: #fff;--mgt2-bgcolor-dm: #0A0405;--mgt2-color-software: #fff;--mgt2-bgcolor-software: #0A0405;--mgt2-input-color: #0A0405;--mgt2-input-bgcolor: #fff;--mgt2-editor-border: #C6C6C6;--mgt2-row-hover: #F2F2F2;--mgt2-subrow-color: #727272;--mgt2-row-inactive-icon: #b5b3a4;--mgt2-encumbrance-normal: #D94826;--mgt2-encumbrance-heavy: #D82727}.mwamba{--mgt2-color-form: #0A0405;--mgt2-bgcolor-form: #fff;--mgt2-color-primary: #2A9932;--mgt2-color-primary-active: #40ED4E;--mgt2-bgcolor-primary: #0A0405;--mgt2-color-primary-light: #4b4a44;--mgt2-color-warning: #EE4050;--mgt2-color-dm: #fff;--mgt2-bgcolor-dm: #0A0405;--mgt2-color-software: #fff;--mgt2-bgcolor-software: #0A0405;--mgt2-input-color: #0A0405;--mgt2-input-bgcolor: #fff;--mgt2-editor-border: #C6C6C6;--mgt2-row-hover: #F2F2F2;--mgt2-subrow-color: #727272;--mgt2-row-inactive-icon: #b5b3a4}.blue{--mgt2-color-form: #0A0405;--mgt2-bgcolor-form: #fff;--mgt2-color-primary: #91AAC8;--mgt2-color-primary-active: #BCDCFF;--mgt2-bgcolor-primary: #0A0405;--mgt2-color-primary-light: #4b4a44;--mgt2-color-warning: #EE4050;--mgt2-color-dm: #fff;--mgt2-bgcolor-dm: #0A0405;--mgt2-color-software: #fff;--mgt2-bgcolor-software: #0A0405;--mgt2-input-color: #0A0405;--mgt2-input-bgcolor: #fff;--mgt2-editor-border: #C6C6C6;--mgt2-row-hover: #F2F2F2;--mgt2-subrow-color: #727272;--mgt2-row-inactive-icon: #b5b3a4}.upcase{text-transform:uppercase}.w1-10{width:10%}.w2-10{width:20%}.w3-10{width:30%}.w4-10{width:40%}.w5-10{width:50%}.h100{height:100%}.w100{width:100%}.mgt2 a:hover{text-shadow:none}.mgt2 .w-100{width:100%}.mgt2 .mb-1{margin-bottom:8px}.mgt2 .mt-1,.mgt2 .mt-05{margin-top:8px}.mgt2 .mt-2{margin-top:14px}.mgt2.sheet header.window-header{color:var(--mgt2-color-primary);background-color:var(--mgt2-bgcolor-primary)}.mgt2.sheet h4.window-title{font-weight:bold;text-transform:uppercase}.mgt2.sheet .window-content{background:var(--mgt2-bgcolor-form);color:var(--mgt2-color-form);padding:0}.nopad .window-content{padding:0}.mgt2 .flex-fix{flex-grow:0 !important;flex-shrink:0 !important}.mgt2 .flex-basis-10{flex-basis:10%}.mgt2 .flex-basis-20{flex-basis:20%}.mgt2 .flex-basis-30{flex-basis:30%}.mgt2 .flex-basis-40{flex-basis:40%}.mgt2 .flex-basis-50{flex-basis:50%}.mgt2 .flex-basis-60{flex-basis:60%}.mgt2 .flex-basis-70{flex-basis:70%}.mgt2.sheet textarea{color:var(--mgt2-input-color);background-color:var(--mgt2-input-bgcolor);font-family:"Roboto",sans-serif;font-size:13px;font-stretch:100%}.mgt2 input:focus,.mgt2 textarea:focus,.mgt2 select:focus{outline:none;box-shadow:none}.mgt2 .checkbox-small{flex:none !important;width:auto !important;height:auto !important;margin:0 !important}.mgt2 .header{color:var(--mgt2-color-primary);background:var(--mgt2-bgcolor-primary);font-size:14px;font-family:"Roboto Condensed",sans-serif;font-weight:bold;padding-left:5px;margin-bottom:4px;line-height:30px;text-transform:uppercase}.mgt2 .field-groups{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:space-between}.mgt2 .field-group label{text-transform:uppercase;font-weight:700;font-size:14px;font-family:"Roboto Condensed",sans-serif;font-optical-sizing:auto}.mgt2 input.field{background-color:var(--mgt2-input-bgcolor);font-size:13px}.mgt2 input.field-name{background-color:var(--mgt2-input-bgcolor);color:var(--mgt2-color-primary);font-size:2rem;border:none;font-weight:700;font-family:"Roboto Condensed",sans-serif;margin-bottom:.5rem;padding:0}.mgt2 input.field-item-name{background-color:var(--mgt2-input-bgcolor);color:var(--mgt2-color-primary);height:auto;font-size:2rem;font-weight:700;font-family:"Roboto Condensed",sans-serif}.mgt2 .fields{display:flex}.mgt2 .editor{min-height:3rem;border:1px solid var(--mgt2-editor-border);height:100%}.mgt2 .sheet-body{margin-left:140px;padding-bottom:1.5rem}.mgt2 label.mgt2-checkbox{display:flex;flex-direction:row;align-items:center}.mgt2 label.mgt2-checkbox input{margin:0 .3rem 0 0}.mgt2 .dialog-button{color:var(--mgt2-color-primary);background-color:var(--mgt2-bgcolor-primary) !important}.mgt2-roll-dialog{background:#fff !important;border:1px solid #cbb !important;box-shadow:0 8px 32px rgba(0,0,0,.35) !important;border-radius:6px !important;overflow:hidden !important}.mgt2-roll-dialog .window-header{background:#0a0405 !important;border-bottom:3px solid #ee4050 !important;padding:10px 14px !important;position:relative !important}.mgt2-roll-dialog .window-header .window-title{color:#fff !important;font-family:"Barlow Condensed",sans-serif !important;font-weight:700 !important;font-size:1rem !important;text-transform:uppercase !important;letter-spacing:2px !important}.mgt2-roll-dialog .window-content{background:#fff !important;color:#0a0405 !important;padding:0 !important}.mgt2-roll-dialog .window-content .dialog-content,.mgt2-roll-dialog .window-content .standard-form{background:#fff !important;padding:8px 14px 6px !important}.mgt2-roll-dialog .window-content .form-group{display:flex !important;align-items:center !important;gap:8px !important;margin-bottom:3px !important;padding:2px 0 !important;border-bottom:1px solid #e8e0e0 !important}.mgt2-roll-dialog .window-content .form-group:last-child{border-bottom:none !important}.mgt2-roll-dialog .window-content .form-group label{color:#0a0405 !important;font-family:"Barlow Condensed",sans-serif !important;font-weight:700 !important;font-size:.72rem !important;text-transform:uppercase !important;letter-spacing:1.2px !important;flex:0 0 110px !important;line-height:1.2 !important}.mgt2-roll-dialog .window-content .form-group select,.mgt2-roll-dialog .window-content .form-group input[type=number],.mgt2-roll-dialog .window-content .form-group input[type=text]{flex:1 !important;background:#fff !important;border:1px solid #cbb !important;color:#0a0405 !important;border-radius:3px !important;padding:3px 8px !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.9rem !important;transition:border-color 150ms ease !important}.mgt2-roll-dialog .window-content .form-group select:focus,.mgt2-roll-dialog .window-content .form-group input[type=number]:focus,.mgt2-roll-dialog .window-content .form-group input[type=text]:focus{border-color:#ee4050 !important;outline:none !important;background:rgba(238,64,80,.04) !important}.mgt2-roll-dialog .window-content .form-group select option,.mgt2-roll-dialog .window-content .form-group input[type=number] option,.mgt2-roll-dialog .window-content .form-group input[type=text] option{background:#fff !important;color:#0a0405 !important}.mgt2-roll-dialog .window-content fieldset,.mgt2-roll-dialog .window-content .form-fields{background:#fdf8f8 !important;border:1px solid #e0c8c8 !important;border-radius:5px !important;padding:5px 10px !important;margin-bottom:4px !important}.mgt2-roll-dialog .window-content fieldset legend,.mgt2-roll-dialog .window-content .form-fields legend{color:#ee4050 !important;font-family:"Barlow Condensed",sans-serif !important;font-weight:700 !important;font-size:.72rem !important;text-transform:uppercase !important;letter-spacing:2px !important;padding:0 8px !important;background:#fff !important}.mgt2-roll-dialog .window-content fieldset .form-group,.mgt2-roll-dialog .window-content .form-fields .form-group{border-bottom:none !important;margin-bottom:4px !important;padding:2px 0 !important}.mgt2-roll-dialog .window-content fieldset label,.mgt2-roll-dialog .window-content .form-fields label{color:#3a2020 !important;flex:1 !important}.mgt2-roll-dialog .window-content fieldset input[type=checkbox],.mgt2-roll-dialog .window-content .form-fields input[type=checkbox]{accent-color:#ee4050 !important;width:14px !important;height:14px !important}.mgt2-roll-dialog .window-content fieldset .roll-prompt-states,.mgt2-roll-dialog .window-content .form-fields .roll-prompt-states{display:flex !important;gap:6px !important;flex-wrap:wrap !important;padding:2px 0 !important}.mgt2-roll-dialog .window-content fieldset .roll-prompt-state-badge,.mgt2-roll-dialog .window-content .form-fields .roll-prompt-state-badge{display:inline-flex !important;align-items:center !important;gap:4px !important;padding:2px 8px !important;border-radius:3px !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.75rem !important;font-weight:600 !important;text-transform:uppercase !important;letter-spacing:.8px !important;background:#ede8e8 !important;border:1px solid #ccc !important;color:#999 !important}.mgt2-roll-dialog .window-content fieldset .roll-prompt-state-badge i,.mgt2-roll-dialog .window-content .form-fields .roll-prompt-state-badge i{font-size:.7rem !important}.mgt2-roll-dialog .window-content fieldset .roll-prompt-state-badge.is-active,.mgt2-roll-dialog .window-content .form-fields .roll-prompt-state-badge.is-active{background:#fdf0f0 !important;border-color:#ee4050 !important;color:#ee4050 !important}.mgt2-roll-dialog .window-content fieldset .roll-prompt-state-badge.is-active strong,.mgt2-roll-dialog .window-content .form-fields .roll-prompt-state-badge.is-active strong{font-weight:800 !important}.mgt2-roll-dialog .dialog-buttons,.mgt2-roll-dialog .form-footer,.mgt2-roll-dialog footer{background:#f5eeee !important;border-top:2px solid #ee4050 !important;padding:7px 14px !important;display:flex !important;gap:8px !important;justify-content:center !important}.mgt2-roll-dialog .dialog-buttons button,.mgt2-roll-dialog .form-footer button,.mgt2-roll-dialog footer button{flex:1 !important;max-width:140px !important;background:#fff !important;border:1px solid #cbb !important;color:#3a2020 !important;border-radius:4px !important;padding:5px 12px !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.82rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1.5px !important;cursor:pointer !important;transition:all 150ms ease !important}.mgt2-roll-dialog .dialog-buttons button:hover,.mgt2-roll-dialog .form-footer button:hover,.mgt2-roll-dialog footer button:hover{background:#fdf0f0 !important;border-color:#ee4050 !important;color:#ee4050 !important}.mgt2-roll-dialog .dialog-buttons button.default,.mgt2-roll-dialog .dialog-buttons button[data-action=submit],.mgt2-roll-dialog .dialog-buttons button[autofocus],.mgt2-roll-dialog .form-footer button.default,.mgt2-roll-dialog .form-footer button[data-action=submit],.mgt2-roll-dialog .form-footer button[autofocus],.mgt2-roll-dialog footer button.default,.mgt2-roll-dialog footer button[data-action=submit],.mgt2-roll-dialog footer button[autofocus]{background:#ee4050 !important;border-color:#ee4050 !important;color:#fff !important;box-shadow:0 2px 12px rgba(238,64,80,.3) !important}.mgt2-roll-dialog .dialog-buttons button.default:hover,.mgt2-roll-dialog .dialog-buttons button[data-action=submit]:hover,.mgt2-roll-dialog .dialog-buttons button[autofocus]:hover,.mgt2-roll-dialog .form-footer button.default:hover,.mgt2-roll-dialog .form-footer button[data-action=submit]:hover,.mgt2-roll-dialog .form-footer button[autofocus]:hover,.mgt2-roll-dialog footer button.default:hover,.mgt2-roll-dialog footer button[data-action=submit]:hover,.mgt2-roll-dialog footer button[autofocus]:hover{background:#ff5060 !important;box-shadow:0 4px 18px rgba(238,64,80,.45) !important}.mgt2-ranged-modifiers{margin-top:4px !important}.mgt2-ranged-modifiers .mgt2-ranged-checkboxes,.mgt2-ranged-modifiers .mgt2-ranged-dodge{display:flex !important;flex-wrap:wrap !important;gap:6px !important;align-items:center !important;border-bottom:none !important}.mgt2-ranged-modifiers .mgt2-checkbox-tag{display:inline-flex !important;align-items:center !important;gap:4px !important;padding:2px 7px !important;border:1px solid #ddc8c8 !important;border-radius:3px !important;background:#fdf8f8 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.73rem !important;font-weight:600 !important;text-transform:uppercase !important;letter-spacing:.8px !important;color:#3a2020 !important;cursor:pointer !important;transition:border-color .15s,background .15s !important}.mgt2-ranged-modifiers .mgt2-checkbox-tag em{font-style:normal !important;color:#999 !important;font-weight:400 !important}.mgt2-ranged-modifiers .mgt2-checkbox-tag input[type=checkbox]{accent-color:#ee4050 !important;width:13px !important;height:13px !important;margin:0 !important}.mgt2-ranged-modifiers .mgt2-checkbox-tag:has(input:checked){border-color:#ee4050 !important;background:#fdf0f0 !important;color:#ee4050 !important}.mgt2-ranged-modifiers .mgt2-checkbox-tag:has(input:checked) em{color:#ee4050 !important}.mgt2-ranged-modifiers .mgt2-auto-mode{border-bottom:1px solid #ddc8c8 !important;padding-bottom:4px !important;margin-bottom:2px !important}.mgt2-ranged-modifiers .mgt2-auto-hint{font-size:.72rem !important;color:#9a6520 !important;margin:0 0 4px 0 !important;font-style:italic !important;text-align:center !important}.mgt2-ranged-modifiers .mgt2-scope-badge{display:inline-flex;align-items:center;gap:5px;font-size:.72rem;font-weight:600;color:#1a4060;background:rgba(30,100,180,.1);border:1px solid rgba(30,100,180,.28);border-radius:4px;padding:2px 8px;margin-bottom:4px;cursor:help}.mgt2-ranged-modifiers .mgt2-scope-badge i{color:#1a6090}.mgt2-ranged-modifiers .mgt2-zerog-badge{display:inline-flex;align-items:center;gap:5px;font-size:.72rem;font-weight:600;color:#2a3a50;background:rgba(60,80,120,.1);border:1px solid rgba(60,80,120,.28);border-radius:4px;padding:2px 8px;margin-bottom:4px;cursor:help}.mgt2-ranged-modifiers .mgt2-zerog-badge i{color:#506090}.characteristics-panel .tab{padding:4px}.species{font-size:13px;margin:4px 1rem 0 1rem;text-align:justify}.species a{margin-right:1rem}.mgt2 .characteristics{flex-basis:138px;flex-grow:0;flex-shrink:0;position:relative}.mgt2 .characteristics-header{color:var(--mgt2-color-primary);background:var(--mgt2-bgcolor-primary);font-family:"Rubik",monospace;font-style:normal;font-size:1rem;line-height:2rem;text-transform:uppercase}.mgt2 .characteristic-row{display:flex;flex-direction:row;align-items:center;justify-content:center;position:relative}.mgt2 .characteristic-minmax{display:flex;flex-direction:row;align-items:center;justify-content:center;flex-wrap:nowrap}.mgt2 .characteristic-dm span.label{font-size:.8rem;font-weight:600}.mgt2 .characteristic-label{font-family:"Barlow Condensed",sans-serif;font-size:1.2rem;font-weight:600;font-style:italic;text-align:center;color:var(--mgt2-color-form);position:relative}.mgt2 .characteristic-label>a.roll{color:#000;position:absolute;left:0}.mgt2 .characteristic-label a.cfg-characteristic{display:none;font-size:12px;position:absolute;right:0;top:0}.mgt2 .characteristic-label:hover a.cfg-characteristic{display:block}.mgt2 .characteristic-input{color:var(--mgt2-bgcolor-primary);text-align:center;font-size:1.5rem;font-weight:500;width:2.4rem;height:2rem;box-sizing:border-box;border:none;outline:none;background:linear-gradient(45deg, rgba(0, 0, 0, 0) 5.66px, #000 0 7.66px, rgba(0, 0, 0, 0) 0 calc(100% - 5.66px - 2px), #000 0 calc(100% - 5.66px), rgba(0, 0, 0, 0) 0),linear-gradient(-45deg, rgba(0, 0, 0, 0) 5.66px, #000 0 7.66px, rgba(0, 0, 0, 0) 0 calc(100% - 5.66px - 2px), #000 0 calc(100% - 5.66px), rgba(0, 0, 0, 0) 0),linear-gradient(90deg, #000 4px, rgba(0, 0, 0, 0) 0) -2px 50%/100% calc(100% - 16px) repeat-x,linear-gradient(#000 4px, rgba(0, 0, 0, 0) 0) 50% -2px/calc(100% - 16px) 100% repeat-y}.mgt2 .characteristic-dm{color:var(--mgt2-color-dm);background-color:rgba(0,0,0,0);text-align:center;font-size:1rem;width:1.5rem;height:1.4rem;padding:0;outline:none;border:none;margin:0;position:absolute;right:0;background-color:var(--mgt2-bgcolor-dm);border-radius:9px;margin-right:2px}.mgt2 .characteristic-dm:focus{outline:none;box-shadow:none}.mgt2 .characteristic-dm-minmax:focus{outline:none;box-shadow:none}.mgt2 .minmaxwrapper{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;justify-content:center;align-items:center;margin:0 .5rem;box-sizing:border-box;background:linear-gradient(45deg, rgba(0, 0, 0, 0) 7.07px, #000 0 9.07px, rgba(0, 0, 0, 0) 0 calc(100% - 7.07px - 2px), #000 0 calc(100% - 7.07px), rgba(0, 0, 0, 0) 0),linear-gradient(-45deg, rgba(0, 0, 0, 0) 7.07px, #000 0 9.07px, rgba(0, 0, 0, 0) 0 calc(100% - 7.07px - 2px), #000 0 calc(100% - 7.07px), rgba(0, 0, 0, 0) 0),linear-gradient(90deg, #000 4px, rgba(0, 0, 0, 0) 0) -2px 50%/100% calc(100% - 20px) repeat-x,linear-gradient(#000 4px, rgba(0, 0, 0, 0) 0) 50% -2px/calc(100% - 20px) 100% repeat-y}.mgt2 .minmaxwrapper input{display:inline-block;color:#000;background-color:rgba(0,0,0,0);text-align:center;font-size:1.5rem;width:3rem;height:2rem;border:none;outline:none}.mgt2 .minmaxwrapper input:focus{outline:none;box-shadow:none}.mgt2 .minmaxwrapper input:first-child{margin-left:5px}.mgt2 .minmaxwrapper input:last-child{margin-right:5px}.mgt2 .minmaxwrapper span{font-size:1.5rem;font-weight:500}.computer-overload,.computer-overload i{color:var(--mgt2-color-warning) !important}ul.softwares{list-style:none;margin:0;padding:0}ul.softwares li{display:inline-block;color:var(--mgt2-color-software);background-color:var(--mgt2-bgcolor-software);padding:3px 7px;border-radius:8px}ul.softwares li a{display:none}ul.softwares li a:first-child{margin:0 .5rem}ul.softwares li:hover a{display:inline-block}.character-header{display:flex;margin-top:8px;margin-right:8px;flex-direction:row;flex-wrap:nowrap;flex-grow:0;flex-shrink:0;justify-content:flex-start;align-items:flex-start}.character-header-img{flex-basis:138px;flex-grow:0;flex-shrink:0;text-align:center}.character-summary{flex:0 0 100%;margin:0;padding:0;list-style:none;border-top:5px double var(--mgt2-bgcolor-primary)}.character-summary li{float:left;margin:0;padding:0;color:var(--mgt2-color-form)}.character-summary input{display:block;border:none;font-weight:bold;font-family:"Roboto Condensed",sans-serif;background-color:#fff;color:var(--mgt2-color-form);font-size:.8rem;border:1px solid #fff}.character-summary input:hover{border:1px solid #111}.character-header-body{display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start}.character-header-body legend{font-size:.7rem;text-transform:uppercase;text-wrap:nowrap;color:var(--mgt2-color-form)}.character-header-body legend i{margin-right:.25rem}.character-body{display:flex;flex-direction:row;align-content:flex-start;flex-wrap:nowrap;min-height:330px}.character-body .tab{width:100%}.lifes{height:100%;display:flex;flex-direction:row;justify-content:center;align-items:center}.lifes div{font-size:2rem}.character-states{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;float:right}.character-states li{display:flex;margin:0;padding:0;color:var(--mgt2-color-form);justify-content:space-between;align-items:center;width:100%;font-size:.7rem;line-height:1.1rem}.encumbrance-normal{color:var(--mgt2-encumbrance-normal) !important}.encumbrance-heavy{color:var(--mgt2-encumbrance-heavy) !important;font-weight:bold}.character-body{height:100%;overflow:hidden;display:flex;flex-direction:row;width:100%;justify-content:flex-start;align-items:flex-start;border-top:3px solid #000}.actor-footer{bottom:0;color:var(--mgt2-color-primary);background-color:var(--mgt2-bgcolor-primary);width:100%;margin:0 -8px;height:1.5rem;justify-content:space-between;align-items:center;padding:0 1rem;flex-grow:0;flex-shrink:0;display:flex;flex-direction:row}.mgt2.character .tab[data-tab=notes] .editor,.mgt2.character .tab[data-tab=notes] .editor-content,.mgt2.character .tab[data-tab=notes] prose-mirror,.mgt2.character .tab[data-tab=biography] .editor,.mgt2.character .tab[data-tab=biography] .editor-content,.mgt2.character .tab[data-tab=biography] prose-mirror,.mgt2.character .tab[data-tab=finance] .editor,.mgt2.character .tab[data-tab=finance] .editor-content,.mgt2.character .tab[data-tab=finance] prose-mirror{min-height:300px !important;height:auto !important}.itemsheet{display:flex !important;flex-direction:column !important;height:100% !important;background:#fff !important;overflow:hidden !important}.item-type-bar{background:#0a0405 !important;border-bottom:3px solid #ee4050 !important;padding:4px 12px !important;display:flex !important;align-items:center !important;gap:8px !important;min-height:0 !important;flex-shrink:0 !important}.item-type-bar .item-type-label{color:#ee4050 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.65rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:2px !important}.item-sheet-header{background:#0a0405 !important;padding:10px 14px !important;display:flex !important;align-items:center !important;gap:12px !important;flex-shrink:0 !important}.item-sheet-header .item-header-img{width:64px !important;height:64px !important;object-fit:cover !important;border:2px solid #ee4050 !important;border-radius:4px !important;cursor:pointer !important;flex-shrink:0 !important}.item-sheet-header .item-header-name{flex:1 !important;background:rgba(0,0,0,0) !important;border:none !important;border-bottom:1px solid rgba(238,64,80,.4) !important;color:#fff !important;font-family:"Barlow Condensed",sans-serif !important;font-size:1.6rem !important;font-weight:800 !important;text-transform:uppercase !important;letter-spacing:1px !important;padding:2px 0 !important;line-height:1.1 !important;width:100% !important}.item-sheet-header .item-header-name:focus{outline:none !important;border-bottom-color:#ee4050 !important}.item-sheet-header .item-header-name::placeholder{color:hsla(0,0%,100%,.35) !important}.item-stats-bar{background:#f5eeee !important;border-bottom:1px solid #ddc8c8 !important;padding:6px 14px !important;display:flex !important;flex-wrap:wrap !important;gap:6px !important;flex-shrink:0 !important}.item-stat-pill{display:flex !important;flex-direction:column !important;align-items:center !important;background:#fff !important;border:1px solid #ddc8c8 !important;border-radius:4px !important;padding:3px 10px !important;min-width:56px !important}.item-stat-pill .stat-label{color:#644 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.6rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1.5px !important;line-height:1.2 !important}.item-stat-pill .stat-value{color:#0a0405 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:1rem !important;font-weight:800 !important;line-height:1.1 !important}.item-stat-pill input,.item-stat-pill select{color:#0a0405 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:1rem !important;font-weight:800 !important;background:rgba(0,0,0,0) !important;border:none !important;text-align:center !important;width:100% !important;padding:0 !important;line-height:1.1 !important}.item-stat-pill input:focus,.item-stat-pill select:focus{outline:none !important;border-bottom:1px solid #ee4050 !important}.item-stat-pill-checkbox{display:flex !important;flex-direction:row !important;align-items:center !important;gap:5px !important;background:#fff !important;border:1px solid #ddc8c8 !important;border-radius:4px !important;padding:4px 10px !important}.item-stat-pill-checkbox input[type=checkbox]{margin:0 !important;width:14px !important;height:14px !important;accent-color:#ee4050 !important}.item-stat-pill-checkbox label{color:#644 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.65rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1px !important;cursor:pointer !important}.itemsheet .horizontal-tabs.tabs{background:#f5eeee !important;border-bottom:2px solid #ddc8c8 !important;display:flex !important;flex-wrap:wrap !important;gap:0 !important;padding:0 10px !important;flex-shrink:0 !important}.itemsheet .horizontal-tabs.tabs .item.tab-select{color:#644 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.72rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1.5px !important;padding:6px 14px !important;border:none !important;border-bottom:2px solid rgba(0,0,0,0) !important;margin-bottom:-2px !important;background:rgba(0,0,0,0) !important;cursor:pointer !important;transition:color .15s,border-color .15s !important}.itemsheet .horizontal-tabs.tabs .item.tab-select:hover{color:#ee4050 !important}.itemsheet .horizontal-tabs.tabs .item.tab-select.active{color:#ee4050 !important;border-bottom-color:#ee4050 !important;background:rgba(0,0,0,0) !important}.itemsheet .tab-content-area{flex:1 !important;overflow-y:auto !important;padding:10px 14px !important;background:#fff !important}.itemsheet .tab[data-group]{display:none !important}.itemsheet .tab[data-group].active{display:block !important}.itemsheet .field-group{margin-bottom:8px !important}.itemsheet .field-group label{display:block !important;color:#644 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.68rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1px !important;margin-bottom:2px !important}.itemsheet .field-groups{display:flex !important;flex-wrap:wrap !important;gap:10px !important;align-items:flex-start !important}.itemsheet .field-groups .field-group{flex:1 !important;min-width:80px !important}.itemsheet input[type=text],.itemsheet input[type=number],.itemsheet select,.itemsheet textarea{background:#fdf8f8 !important;border:1px solid #ddc8c8 !important;border-radius:3px !important;color:#0a0405 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.85rem !important;padding:4px 8px !important;width:100% !important}.itemsheet input[type=text]:focus,.itemsheet input[type=number]:focus,.itemsheet select:focus,.itemsheet textarea:focus{outline:none !important;border-color:#ee4050 !important;box-shadow:0 0 0 2px rgba(238,64,80,.12) !important}.itemsheet textarea{resize:vertical !important;min-height:80px !important}.itemsheet .mgt2-checkbox{display:flex !important;align-items:center !important;gap:6px !important;color:#644 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.72rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1px !important}.itemsheet .mgt2-checkbox input[type=checkbox]{width:14px !important;height:14px !important;margin:0 !important;accent-color:#ee4050 !important}.itemsheet .table-container{border:1px solid #ddc8c8 !important;border-radius:4px !important;overflow:hidden !important;margin-top:8px !important}.itemsheet .table-row{display:flex !important;align-items:stretch !important;border-bottom:1px solid #e8dada !important}.itemsheet .table-row:last-child{border-bottom:none !important}.itemsheet .table-row.heading{background:#0a0405 !important;color:#ee4050 !important}.itemsheet .table-row.heading .row-item{color:#ee4050 !important;font-family:"Barlow Condensed",sans-serif !important;font-size:.68rem !important;font-weight:700 !important;text-transform:uppercase !important;letter-spacing:1px !important;padding:5px 8px !important}.itemsheet .table-row:not(.heading){background:#fff !important}.itemsheet .table-row:not(.heading):nth-child(even){background:#fdf8f8 !important}.itemsheet .table-row:not(.heading) .row-item{padding:4px 6px !important}.itemsheet .table-row:not(.heading) .row-item input,.itemsheet .table-row:not(.heading) .row-item textarea,.itemsheet .table-row:not(.heading) .row-item select{font-size:.8rem !important;padding:2px 6px !important}.itemsheet .row-item{flex:1 !important;border-right:1px solid #e8dada !important}.itemsheet .row-item:last-child{border-right:none !important}.itemsheet .row-item.row-item-left{justify-content:flex-start !important}.itemsheet .row-item.row-item-right{flex:0 0 auto !important;min-width:36px !important;display:flex !important;align-items:center !important;justify-content:center !important}.itemsheet .row-item.row-item-30{flex:0 0 30% !important}.itemsheet .item-controls{display:flex !important;align-items:center !important;justify-content:center !important;gap:6px !important}.itemsheet .item-controls a{color:#888 !important;cursor:pointer !important}.itemsheet .item-controls a:hover{color:#ee4050 !important}.itemsheet-header{display:none !important}.itemsheet-maincol{display:none !important}.itemsheet-panel{display:contents !important}.itemsheet .item-details-grid{display:grid !important;grid-template-columns:1fr 1fr !important;gap:4px 16px !important;align-items:start !important}.itemsheet .item-details-grid .table-container{grid-column:1/-1 !important;margin-top:10px !important}.itemsheet .field-row{display:flex !important;align-items:center !important;gap:8px !important;min-height:28px !important}.itemsheet .field-row label{flex:0 0 100px !important;min-width:0 !important;margin-bottom:0 !important;white-space:nowrap !important;overflow:hidden !important;text-overflow:ellipsis !important}.itemsheet .field-row input[type=text],.itemsheet .field-row input[type=number],.itemsheet .field-row select{flex:1 !important;width:auto !important;height:24px !important;padding:2px 6px !important}.itemsheet .field-row input.short{flex:0 0 56px !important;width:56px !important}.itemsheet .field-row .range-inputs{display:flex !important;gap:4px !important;flex:1 !important}.itemsheet .field-row .range-inputs input{flex:0 0 52px !important;width:52px !important}.itemsheet .field-row .range-inputs select{flex:1 !important}.itemsheet .field-row.full{grid-column:1/-1 !important}.itemsheet .field-row--check label{flex:unset !important;display:flex !important;align-items:center !important;gap:6px !important;cursor:pointer !important}.itemsheet .tab[data-tab=tab1] .editor,.itemsheet .tab[data-tab=tab1] .editor-container{min-height:200px !important}.mgt2-weapon-traits{border:1px solid var(--color-border-light-tertiary);border-radius:4px;padding:6px 8px;margin-top:4px}.mgt2-weapon-traits legend{font-size:.85em;font-weight:bold;padding:0 4px}.mgt2-weapon-traits .mgt2-weapon-traits-grid{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center}.mgt2-weapon-traits .mgt2-trait-num{display:flex;align-items:center;gap:4px}.mgt2-weapon-traits .mgt2-trait-num label{font-size:.85em;white-space:nowrap}.mgt2-weapon-traits .mgt2-trait-num input[type=number]{width:44px;text-align:center;flex:0 0 44px}.mgt2-weapon-traits .mgt2-trait-bool{display:flex;align-items:center;gap:4px}.mgt2-weapon-traits .mgt2-trait-bool label{font-size:.85em;white-space:nowrap;cursor:pointer}.mgt2-weapon-traits .mgt2-trait-bool input[type=checkbox]{cursor:pointer}li.chat-message{background:#fff !important;border:1px solid #cbb !important;box-shadow:0 2px 8px rgba(0,0,0,.18) !important;color:#0a0405;padding:0 !important}li.chat-message .message-header{background:#0a0405;border-bottom:3px solid #ee4050;padding:4px 10px}li.chat-message .message-header .message-sender{color:#ee4050;font-family:"Barlow Condensed",sans-serif;font-weight:700;font-size:.75rem;text-transform:uppercase;letter-spacing:1.5px;margin:0}li.chat-message .message-header .message-timestamp{color:#888;font-size:.68rem}li.chat-message .message-header .message-delete i{color:#888}li.chat-message .message-header:hover .message-delete i{color:#ee4050}li.chat-message .message-content>.dice-roll{background:#fdf8f8;padding:6px 12px}li.chat-message .message-content>.dice-roll .dice-formula{background:#f5eeee;border:1px solid #ddc8c8;border-radius:3px;color:#644;font-size:.78rem;padding:2px 10px;text-align:center;font-family:"Barlow Condensed",sans-serif;display:inline-block;margin:0 auto 4px auto}li.chat-message .message-content>.dice-roll .dice-result{display:flex;flex-direction:column;align-items:center;gap:3px}li.chat-message .message-content>.dice-roll h4.dice-total{font-family:"Barlow Condensed",sans-serif;font-size:2.2rem !important;font-weight:900;color:#0a0405 !important;margin:2px 0;line-height:1;text-align:center;background:rgba(0,0,0,0) !important;width:100% !important;display:block !important}li.chat-message .message-content>.dice-roll .dice-tooltip .part-header{background:#f5eeee;padding:2px 8px;display:flex;justify-content:space-between}li.chat-message .message-content>.dice-roll .dice-tooltip .part-header .part-formula,li.chat-message .message-content>.dice-roll .dice-tooltip .part-header .part-total{color:#ee4050;font-weight:700;font-size:.78rem}li.chat-message .message-content>.dice-roll .dice-tooltip .dice-rolls{display:flex;flex-wrap:wrap;justify-content:center;gap:4px;padding:6px 8px;list-style:none;margin:0}li.chat-message .message-content>.dice-roll .dice-tooltip .roll.die{display:flex;align-items:center;justify-content:center;width:26px;height:26px;background:#f5eeee;border:1.5px solid #ddc8c8;border-radius:4px;color:#3a2020;font-weight:700;font-size:.9rem}.mgt2-chat-roll{font-family:"Barlow Condensed",sans-serif}.mgt2-chat-roll .mgt2-roll-header{background:#0a0405 !important;border-left:4px solid #ee4050 !important;padding:5px 10px 4px 10px !important}.mgt2-chat-roll .mgt2-roll-header .mgt2-roll-char-name{display:block;color:#fff;font-size:1.2rem;font-weight:800;text-transform:uppercase;letter-spacing:1px;line-height:1}.mgt2-chat-roll .mgt2-roll-header .mgt2-roll-meta{display:flex;align-items:center;gap:6px;margin-top:2px}.mgt2-chat-roll .mgt2-roll-header .mgt2-roll-type{color:#ee4050;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:2px}.mgt2-chat-roll .mgt2-roll-header .mgt2-roll-sep{color:#888}.mgt2-chat-roll .mgt2-roll-header .mgt2-roll-difficulty{color:#bbb;font-size:.68rem;text-transform:uppercase;letter-spacing:1px}.mgt2-chat-roll .mgt2-roll-modifier{background:#f5eeee;border-bottom:1px solid #e8dada;padding:3px 14px;color:#644;font-size:.8rem}.mgt2-chat-roll .mgt2-roll-modifiers{display:flex;gap:6px;flex-wrap:wrap;background:#f5eeee;border-bottom:1px solid #e8dada;padding:3px 14px}.mgt2-chat-roll .mgt2-roll-modifiers .mgt2-roll-mod-tag{color:#644;font-size:.8rem}.mgt2-chat-roll .dice-roll{background:#fdf8f8;padding:4px 10px;cursor:pointer}.mgt2-chat-roll .dice-roll .dice-flavor{color:#888;font-size:.73rem;text-align:center;margin-bottom:3px}.mgt2-chat-roll .dice-roll .dice-result{display:flex;flex-direction:column;align-items:center;gap:3px}.mgt2-chat-roll .dice-roll .dice-formula{background:#f5eeee;border:1px solid #ddc8c8;border-radius:3px;color:#644;font-size:.78rem;padding:2px 14px;font-family:"DM Sans",sans-serif;text-align:center}.mgt2-chat-roll .dice-roll .dice-tooltip{width:100%}.mgt2-chat-roll .dice-roll .dice-tooltip .wrapper{background:rgba(0,0,0,0)}.mgt2-chat-roll .dice-roll .dice-tooltip .tooltip-part{background:#fdf8f8;border:1px solid #e8dada;border-radius:4px;margin-bottom:6px;overflow:hidden}.mgt2-chat-roll .dice-roll .dice-tooltip .part-header{background:#f5eeee;padding:3px 8px}.mgt2-chat-roll .dice-roll .dice-tooltip .part-header .part-formula,.mgt2-chat-roll .dice-roll .dice-tooltip .part-header .part-total{color:#ee4050;font-weight:700;font-size:.8rem}.mgt2-chat-roll .dice-roll .dice-tooltip .dice-rolls{display:flex;flex-wrap:wrap;justify-content:center;gap:5px;padding:8px 10px;list-style:none;margin:0}.mgt2-chat-roll .dice-roll .dice-tooltip .roll.die{display:flex;align-items:center;justify-content:center;width:30px;height:30px;background:#f5eeee;border:1.5px solid #ddc8c8;border-radius:5px;color:#3a2020;font-weight:700;font-size:1rem;font-family:"Barlow Condensed",sans-serif}.mgt2-chat-roll .dice-roll .dice-tooltip .roll.die.max{border-color:#ee4050;color:#ee4050;background:#fde8ea;box-shadow:0 0 8px rgba(238,64,80,.2)}.mgt2-chat-roll .dice-roll .dice-tooltip .roll.die.min{border-color:#cbb;color:#999}.mgt2-chat-roll .dice-roll h4.dice-total{font-size:1.6rem !important;font-weight:900;color:#0a0405 !important;margin:3px 0 2px 0;line-height:1;font-family:"Barlow Condensed",sans-serif;text-align:center;text-shadow:none;background:#f5eeee !important;border:1px solid #ddc8c8 !important;border-radius:4px !important;padding:2px 14px !important;width:auto !important;display:inline-block !important;min-width:60px}.mgt2-chat-roll .dice-roll h4.dice-total.success{color:#1a8840 !important;background:rgba(82,232,122,.1) !important;border-color:rgba(26,136,64,.35) !important}.mgt2-chat-roll .dice-roll h4.dice-total.failure{color:#ee4050 !important;background:rgba(238,64,80,.07) !important;border-color:rgba(238,64,80,.3) !important}.mgt2-chat-roll .mgt2-outcome{text-align:center;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:2px;padding:3px 10px}.mgt2-chat-roll .mgt2-outcome i{margin-right:5px}.mgt2-chat-roll .mgt2-outcome.is-success{background:rgba(26,136,64,.08);color:#1a8840;border-top:1px solid rgba(26,136,64,.2)}.mgt2-chat-roll .mgt2-outcome.is-failure{background:rgba(238,64,80,.07);color:#ee4050;border-top:1px solid rgba(238,64,80,.2)}.mgt2-chat-roll .mgt2-effect{text-align:center;font-size:.72rem;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;padding:2px 10px 4px 10px;border-bottom:2px solid rgba(0,0,0,0)}.mgt2-chat-roll .mgt2-effect .mgt2-effect-value{font-size:1rem;font-weight:900;margin-left:4px}.mgt2-chat-roll .mgt2-effect .mgt2-healing-amount{font-size:.75rem;font-weight:600;margin-left:6px;opacity:.85}.mgt2-chat-roll .mgt2-effect.is-success{color:#1a8840;border-bottom-color:rgba(26,136,64,.25)}.mgt2-chat-roll .mgt2-effect.is-success .mgt2-effect-value{color:#1a8840}.mgt2-chat-roll .mgt2-effect.is-failure{color:#ee4050;border-bottom-color:rgba(238,64,80,.25)}.mgt2-chat-roll .mgt2-effect.is-failure .mgt2-effect-value{color:#ee4050}.mgt2-chat-roll .mgt2-ap-info{display:flex;align-items:center;justify-content:center;gap:5px;font-size:.75rem;font-weight:600;color:#6b4e1a;background:rgba(180,130,40,.12);border:1px solid rgba(180,130,40,.3);border-radius:4px;padding:3px 8px;margin:4px 8px 0 8px}.mgt2-chat-roll .mgt2-ap-info i{color:#b48228}.mgt2-chat-roll .mgt2-auto-info{display:flex;align-items:center;justify-content:center;gap:5px;font-size:.75rem;font-weight:600;color:#1a3f6b;background:rgba(40,90,180,.1);border:1px solid rgba(40,90,180,.25);border-radius:4px;padding:3px 8px;margin:4px 8px 0 8px}.mgt2-chat-roll .mgt2-auto-info i{color:#2855b4}.mgt2-chat-roll .mgt2-blast-info{display:flex;align-items:center;justify-content:center;gap:5px;font-size:.75rem;font-weight:600;color:#7a2a00;background:rgba(210,80,20,.1);border:1px solid rgba(210,80,20,.3);border-radius:4px;padding:3px 8px;margin:4px 8px 0 8px}.mgt2-chat-roll .mgt2-blast-info i{color:#d24a10}.mgt2-chat-roll .mgt2-stun-info{display:flex;align-items:center;justify-content:center;gap:5px;font-size:.75rem;font-weight:600;color:#4a1a6b;background:rgba(120,40,180,.1);border:1px solid rgba(120,40,180,.28);border-radius:4px;padding:3px 8px;margin:4px 8px 0 8px}.mgt2-chat-roll .mgt2-stun-info i{color:#8a28c8}.mgt2-chat-roll .mgt2-radiation-info{display:flex;align-items:center;justify-content:center;gap:5px;font-size:.75rem;font-weight:600;color:#1a4a1a;background:rgba(40,160,40,.1);border:1px solid rgba(40,160,40,.3);border-radius:4px;padding:3px 8px;margin:4px 8px 0 8px}.mgt2-chat-roll .mgt2-radiation-info i{color:#28a028}.mgt2-chat-roll .mgt2-radiation-card .mgt2-radiation-label{color:#28a028;font-weight:700}.mgt2-chat-roll .mgt2-radiation-card .mgt2-radiation-label i{margin-right:4px}.mgt2-chat-roll .mgt2-radiation-card .mgt2-radiation-rules{font-size:.72rem;color:#555;background:rgba(40,160,40,.07);border:1px solid rgba(40,160,40,.2);border-radius:4px;padding:4px 8px;margin:4px 8px 0 8px;display:flex;gap:5px;align-items:flex-start}.mgt2-chat-roll .mgt2-radiation-card .mgt2-radiation-rules i{color:#e0a020;margin-top:2px;flex-shrink:0}.mgt2-chat-roll .mgt2-buttons{display:flex;justify-content:center;flex-wrap:wrap;gap:4px;padding:5px 10px;background:#f5eeee;border-top:1px solid #ddc8c8}.mgt2-chat-roll .mgt2-buttons button{background:#fff;border:1px solid #cbb;color:#3a2020;border-radius:3px;padding:4px 14px;font-family:"Barlow Condensed",sans-serif;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:1px;cursor:pointer;transition:background .15s ease,box-shadow .15s ease;box-shadow:none}.mgt2-chat-roll .mgt2-buttons button i{font-size:1rem;padding:0;margin:0}.mgt2-chat-roll .mgt2-buttons button:hover{background:#ee4050;border-color:#ee4050;color:#fff;box-shadow:0 0 8px rgba(238,64,80,.25)}.mgt2-chat-roll .mgt2-buttons button:disabled{background:#e8e0e0;border-color:#c8b8b8;color:#a08080;cursor:not-allowed;box-shadow:none;opacity:.6}.mgt2 nav.horizontal-tabs{color:var(--mgt2-color-primary);background:var(--mgt2-bgcolor-primary);font-style:normal;font-weight:700;font-size:14px;line-height:30px;text-transform:uppercase;justify-content:space-around;align-items:center;font-family:"Roboto Condensed",sans-serif}.mgt2 nav.horizontal-tabs a.item{position:relative;flex:1 1 auto}.mgt2 nav.horizontal-tabs a.item i{margin-right:.5rem}.mgt2 nav.horizontal-tabs>a.item::after{content:"";position:absolute;inset:.25rem .25rem .25rem .25rem;border:1px solid var(--mgt2-color-primary-active);pointer-events:none}.mgt2 nav.horizontal-tabs>a.item.active::after{border-bottom:none;border-top:2px solid var(--mgt2-color-primary-active);border-left:2px solid var(--mgt2-color-primary-active);border-right:2px solid var(--mgt2-color-primary-active);inset:.25rem .25rem 0 .25rem}.mgt2 nav.horizontal-tabs .active{color:var(--mgt2-color-primary);text-decoration:none;text-shadow:none;border-bottom:none}.tab[data-tab].fullsize{height:calc(100% - 3rem)}.subTab{flex-flow:column;height:100%;display:flex;justify-content:flex-start;align-items:stretch}.tab-scroll{overflow-y:auto;height:100%}.subTabs{height:100%;flex-direction:column}.subTabs.active{display:flex !important}.mgt2.character,.mgt2.creature,.mgt2.vehicule{overflow:visible !important}.mgt2.character>.window-content,.mgt2.creature>.window-content,.mgt2.vehicule>.window-content{overflow:visible !important}.mgt2.character .editable,.mgt2.character .locked,.mgt2.creature .editable,.mgt2.creature .locked,.mgt2.vehicule .editable,.mgt2.vehicule .locked{overflow:visible !important}.mgt2.character .character-body{position:relative !important;overflow:visible !important}.mgt2.creature .creature-body{position:relative !important;overflow:visible !important}.mgt2.vehicule .vehicule-content{position:relative !important;overflow:visible !important}.mgt2 nav.sheet-sidebar.tabs{position:absolute !important;left:100% !important;top:0 !important;width:62px !important;flex:none !important;display:flex !important;flex-direction:column;background:linear-gradient(180deg, #1e0507 0%, #110304 40%, #0a0202 100%);border-top:1px solid rgba(238,64,80,.35);border-right:1px solid rgba(238,64,80,.25);border-bottom:1px solid rgba(238,64,80,.2);border-left:3px solid var(--mgt2-color-primary);border-radius:0 10px 10px 0;box-shadow:6px 0 24px rgba(0,0,0,.75),0 0 0 0 rgba(0,0,0,0),inset 1px 0 16px rgba(238,64,80,.05);z-index:10;overflow:hidden !important;padding:2px 0}.mgt2 nav.sheet-sidebar.tabs>.item{position:relative;display:flex !important;flex-direction:column !important;justify-content:center !important;align-items:center !important;gap:4px !important;min-height:54px;padding:8px 4px;color:rgba(238,64,80,.45);border-bottom:1px solid rgba(238,64,80,.07);cursor:pointer;transition:background 180ms ease,color 180ms ease,box-shadow 180ms ease;user-select:none;text-decoration:none !important}.mgt2 nav.sheet-sidebar.tabs>.item::before{content:"";position:absolute;left:-3px;top:18%;bottom:18%;width:3px;background:rgba(0,0,0,0);border-radius:0 3px 3px 0;transition:background 180ms ease,top 180ms ease,bottom 180ms ease,box-shadow 180ms ease}.mgt2 nav.sheet-sidebar.tabs>.item:hover{color:var(--mgt2-color-primary);background:rgba(238,64,80,.07)}.mgt2 nav.sheet-sidebar.tabs>.item:hover::before{background:rgba(238,64,80,.5)}.mgt2 nav.sheet-sidebar.tabs>.item:hover .tab-label{color:rgba(238,64,80,.7)}.mgt2 nav.sheet-sidebar.tabs>.item.active{color:var(--mgt2-color-primary);background:linear-gradient(90deg, rgba(238, 64, 80, 0.16) 0%, rgba(238, 64, 80, 0.03) 100%);box-shadow:inset 0 1px 0 rgba(238,64,80,.12),inset 0 -1px 0 rgba(238,64,80,.08)}.mgt2 nav.sheet-sidebar.tabs>.item.active::before{background:var(--mgt2-color-primary);top:10%;bottom:10%;box-shadow:0 0 10px rgba(238,64,80,.7),0 0 20px rgba(238,64,80,.3)}.mgt2 nav.sheet-sidebar.tabs>.item.active i{filter:drop-shadow(0 0 5px rgba(238, 64, 80, 0.55))}.mgt2 nav.sheet-sidebar.tabs>.item.active .tab-label{color:rgba(238,64,80,.85)}.mgt2 nav.sheet-sidebar.tabs>.item i{font-size:1.15rem;pointer-events:none;line-height:1}.mgt2 nav.sheet-sidebar.tabs>.item .tab-label{font-family:"Barlow Condensed",sans-serif;font-size:.52rem;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:rgba(238,64,80,.3);line-height:1;pointer-events:none;transition:color 180ms ease}.container-controls{display:inline-block;margin-left:1rem}.container-controls a:not(:last-child){margin-right:.5rem}.table-container{display:flex;flex-flow:column nowrap;width:100%;margin:0 auto}.table-row{display:flex;flex-flow:row nowrap;width:100%;position:relative;align-items:flex-start}.table-row.heading{background-color:var(--mgt2-bgcolor-primary);align-items:center}.table-row.heading .row-item{text-transform:uppercase;font-size:12px}.table-row.heading .row-item:first-child{font-weight:bold;font-size:13px;letter-spacing:3px}.table-row.heading .row-item:first-child i{margin-right:.5rem}.table-row.heading.color-1 .row-item{background-color:var(--mgt2-bgcolor-primary);color:var(--mgt2-color-primary)}.table-row.heading.color-2 .row-item{background-color:var(--mgt2-bgcolor-form);color:var(--mgt2-bgcolor-primary)}.table-row.heading div.row-item{padding-left:5px}.table-row.heading div.row-item:last-child{padding-right:5px}.table-row:hover:not(.heading){background-color:var(--mgt2-row-hover)}.table-row-mb-4{margin-bottom:4px}.row-item{display:flex;flex-grow:1;font-size:14px;line-height:25px;align-items:center;transition:all .15s ease-in-out;overflow:hidden !important;text-overflow:ellipsis;text-wrap:nowrap}.row-item.item-controls{justify-content:right;padding-right:4px}.row-item.item-controls a:not(:last-child){margin-right:.4rem}.row-item i{color:var(--mgt2-color-form)}.row-item a[data-roll]{margin-right:.5rem}.heading.color-1 .row-item i{color:var(--mgt2-color-primary) !important}.heading.color-2 .row-item i{color:var(--mgt2-bgcolor-primary) !important}.table-subrow{border-left:2px var(--mgt2-subrow-color) dashed;color:var(--mgt2-subrow-color)}.table-subrow .row-item{font-size:.8em;line-height:20px}.table-subrow .row-item:first-child{padding-left:1rem}.table-subrow .row-item>i{margin-right:4px}.row-item-center{justify-content:center;text-align:center}.row-item-left{justify-content:left}.row-item-right{justify-content:right}.row-item-space-between{justify-content:space-between}.row-item-2{flex-basis:4rem}.row-item-5{flex-basis:5%}.row-item-10{flex-basis:10%}.row-item-12{flex-basis:4rem}.row-item-15{flex-basis:5rem}.row-item-20{flex-basis:20%}.row-item-25{flex-basis:25%}.row-item-30{flex-basis:30%}.row-item-35{flex-basis:35%}.row-item-40{flex-basis:40%}.row-item-45{flex-basis:45%}.row-item-50{flex-basis:50%}.row-item-65{flex-basis:50%}.row-item-85{flex-basis:50%}.row-item-storage{flex-wrap:wrap;flex-grow:0;flex-basis:20%;font-size:.7rem;line-height:.8rem}.item-control.item-equip i{color:var(--mgt2-row-inactive-icon)}.item-control.item-equip.active i{color:var(--mgt2-color-form)}.row-description{flex-basis:100%;font-size:14px;padding:4px 0;justify-content:left;transition:all .15s ease-in-out}.row-sub-container{display:flex;flex-flow:column nowrap;flex:1}.row-sub-container .row-item{padding:8px 0;border-bottom:1px solid var(--mgt2-bgcolor-primary)}.table-row:last-child,.row-sub-container .row-item:last-child{border-bottom:0}.table-container.editable .table-row{margin-top:4px}.table-container.editable .table-row:last-child{margin-bottom:4px}.item-options{position:absolute;top:.7rem;font-size:.7em;left:1.6rem;text-transform:uppercase;font-family:"DM Sans",sans-serif;font-optical-sizing:auto;font-weight:600;font-style:normal;color:var(--mgt2-subrow-color)}.creature-sheet .creature-header{display:flex;flex-direction:row;align-items:flex-start;gap:.75rem;padding:.5rem .75rem .5rem;background:var(--mgt2-bgcolor-form);border-bottom:2px solid var(--mgt2-color-primary)}.creature-sheet .creature-header-img{flex:0 0 80px}.creature-sheet .creature-header-img img.profile{width:80px;height:80px;object-fit:cover;border:2px solid var(--mgt2-color-primary);border-radius:4px;cursor:pointer}.creature-sheet .creature-header-body{flex:1;display:flex;flex-direction:column;gap:.4rem}.creature-sheet .creature-name{font-family:"Barlow Condensed",sans-serif;font-size:1.6rem;font-weight:700;font-style:italic;color:var(--mgt2-color-form);background:rgba(0,0,0,0);border:none;border-bottom:1px solid var(--mgt2-color-primary);width:100%;padding:0}.creature-sheet .creature-name:focus{outline:none;border-bottom-color:var(--mgt2-color-secondary)}.creature-sheet .creature-stats-row{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}.creature-sheet .creature-stat{display:flex;flex-direction:column;align-items:center;background:var(--mgt2-bgcolor-primary);border:1px solid var(--mgt2-color-primary);border-radius:4px;padding:2px 6px;min-width:4rem}.creature-sheet .creature-stat label{font-family:"Barlow Condensed",sans-serif;font-size:.7rem;font-weight:700;text-transform:uppercase;color:var(--mgt2-color-primary);line-height:1.2}.creature-sheet .creature-stat .creature-stat-value{display:flex;align-items:center;gap:2px}.creature-sheet .creature-stat .creature-stat-value input{width:2.5rem;text-align:center;background:rgba(0,0,0,0);border:none;color:var(--mgt2-bgcolor-form);font-size:1rem;font-weight:700;padding:0}.creature-sheet .creature-stat .creature-stat-value input:focus{outline:none;border-bottom:1px solid var(--mgt2-color-primary)}.creature-sheet .creature-stat .creature-stat-value .stat-max{width:2.5rem}.creature-sheet .creature-stat .creature-stat-value .stat-unit{font-size:.7rem;color:var(--mgt2-bgcolor-form);opacity:.7}.creature-sheet .creature-stat .creature-stat-value .stat-readonly{font-size:1rem;font-weight:700;color:var(--mgt2-bgcolor-form);min-width:2.5rem;text-align:center}.creature-sheet .creature-behavior-row{display:flex;flex-direction:row;align-items:center;gap:.5rem;flex-wrap:nowrap}.creature-sheet .creature-behavior-row label{flex:0 0 auto;font-size:.75rem;text-transform:uppercase;color:var(--mgt2-color-primary);font-weight:700;white-space:nowrap}.creature-sheet .creature-behavior-row .behavior-select{flex:1 1 auto;min-width:0;background:var(--mgt2-bgcolor-form);color:var(--mgt2-color-form);border:1px solid var(--mgt2-color-primary);border-radius:3px;font-size:.85rem;padding:1px 4px}.creature-sheet .creature-behavior-row .behavior-sep{flex:0 0 auto;color:var(--mgt2-color-form);opacity:.5}.creature-sheet .creature-size-badge{flex:0 0 auto;white-space:nowrap;font-size:.75rem;font-style:italic;color:var(--mgt2-bgcolor-form);background:var(--mgt2-bgcolor-primary);border:1px solid var(--mgt2-color-primary);border-radius:3px;padding:1px 6px}.creature-sheet .creature-body{flex:1;overflow-y:auto;padding:.5rem .75rem;min-height:228px}.creature-sheet .creature-body .tab{display:none}.creature-sheet .creature-body .tab.active{display:block}.creature-sheet .creature-info-tab{display:flex;flex-direction:column;gap:.5rem}.creature-sheet .creature-description{width:100%;background:var(--mgt2-bgcolor-form);color:var(--mgt2-color-form);border:1px solid var(--mgt2-color-primary);border-radius:3px;padding:4px;resize:vertical;font-size:.9rem}.creature-sheet .creature-damage .damage-formula{font-family:"Barlow Condensed",sans-serif;font-weight:700;color:var(--mgt2-color-primary);font-size:1rem}.creature-sheet .trait-name{font-weight:600;color:var(--mgt2-color-form)}.creature-sheet .trait-value{font-style:italic;color:var(--mgt2-color-secondary)}.mgt2-creature-roll .mgt2-roll-header{display:flex;flex-direction:row;align-items:center;gap:.6rem}.mgt2-creature-roll .creature-chat-img{width:36px;height:36px;object-fit:cover;border:1px solid var(--mgt2-color-primary);border-radius:3px;flex:0 0 36px}.mgt2-creature-roll .mgt2-roll-header-text{flex:1}.mgt2.creature .table-container+.header{margin-top:8px}.mgt2.creature .tab[data-tab=info] .editor,.mgt2.creature .tab[data-tab=info] .editor-content,.mgt2.creature .tab[data-tab=info] prose-mirror{min-height:300px !important;height:auto !important}.vehicule-sheet .vehicule-header{display:flex;flex-direction:row;align-items:flex-start;gap:.75rem;padding:.5rem .75rem;background:var(--mgt2-bgcolor-form);border-bottom:2px solid var(--mgt2-color-primary);flex-shrink:0}.vehicule-sheet .vehicule-header-img{flex:0 0 90px}.vehicule-sheet .vehicule-header-img img.profile{width:90px;height:90px;object-fit:cover;border:2px solid var(--mgt2-color-primary);border-radius:4px;cursor:pointer}.vehicule-sheet .vehicule-header-body{flex:1;display:flex;flex-direction:column;gap:.4rem;min-width:0}.vehicule-sheet .vehicule-name{font-family:"Barlow Condensed",sans-serif;font-size:1.6rem;font-weight:700;font-style:italic;color:var(--mgt2-color-form);background:rgba(0,0,0,0);border:none;border-bottom:1px solid var(--mgt2-color-primary);width:100%;padding:0}.vehicule-sheet .vehicule-name:focus{outline:none;border-bottom-color:var(--mgt2-color-secondary)}.vehicule-sheet .vehicule-header-stats{display:flex;flex-direction:row;align-items:flex-start;gap:.75rem;flex-wrap:wrap}.vehicule-sheet .vehicule-stat-box{display:flex;flex-direction:column;align-items:center;background:var(--mgt2-bgcolor-primary);border:1px solid var(--mgt2-color-primary);border-radius:4px;padding:3px 8px;min-width:4rem}.vehicule-sheet .vehicule-stat-box label{font-family:"Barlow Condensed",sans-serif;font-size:.65rem;font-weight:700;text-transform:uppercase;color:var(--mgt2-color-primary);line-height:1.2;white-space:nowrap}.vehicule-sheet .vehicule-stat-value{display:flex;align-items:center;gap:2px}.vehicule-sheet .vehicule-stat-value span{color:var(--mgt2-color-primary);font-weight:700}.vehicule-sheet .vehicule-stat-value input[type=number]{width:2.8rem;text-align:center;background:rgba(0,0,0,0);border:none;color:var(--mgt2-color-form);font-family:"Rubik",monospace;font-size:1rem;font-weight:600;padding:0}.vehicule-sheet .vehicule-stat-value input[type=number]:focus{outline:none;border-bottom:1px solid var(--mgt2-color-secondary)}.vehicule-sheet .vehicule-hull{min-width:6rem}.vehicule-sheet .vehicule-hull .vehicule-stat-value input[type=number]{width:2.5rem}.vehicule-sheet .vehicule-armor-group{display:flex;flex-direction:column;gap:2px}.vehicule-sheet .vehicule-armor-label{font-family:"Barlow Condensed",sans-serif;font-size:.65rem;font-weight:700;text-transform:uppercase;color:var(--mgt2-color-primary);text-align:center}.vehicule-sheet .vehicule-armor-row{display:flex;flex-direction:row;gap:4px}.vehicule-sheet .vehicule-armor-box{min-width:3.5rem}.vehicule-sheet .vehicule-content{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:320px}.vehicule-sheet .vehicule-tab{flex:1;overflow-y:auto;padding:.75rem;display:none}.vehicule-sheet .vehicule-tab.active{display:block}.vehicule-sheet .vehicule-stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px}.vehicule-sheet .vehicule-field{display:flex;flex-direction:row;align-items:center;gap:8px;padding:3px 0;border-bottom:1px solid rgba(0,0,0,.08)}.vehicule-sheet .vehicule-field:last-child{border-bottom:none}.vehicule-sheet .vehicule-field label{font-family:"Barlow Condensed",sans-serif;font-size:.72rem;font-weight:700;text-transform:uppercase;color:var(--mgt2-color-primary);flex:0 0 120px;white-space:nowrap}.vehicule-sheet .vehicule-field input[type=number],.vehicule-sheet .vehicule-field select{flex:1;background:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:3px;color:var(--mgt2-color-form);font-family:"Barlow Condensed",sans-serif;font-size:.9rem;padding:2px 4px}.vehicule-sheet .vehicule-field input[type=number]:focus,.vehicule-sheet .vehicule-field select:focus{outline:none;border-color:var(--mgt2-color-primary);background:hsla(0,0%,100%,.1)}.vehicule-sheet .vehicule-field input[type=number]{text-align:center;width:4rem}.vehicule-sheet .vehicule-field select{cursor:pointer}.mgt2.vehicule .vehicule-tab[data-tab=description] .editor,.mgt2.vehicule .vehicule-tab[data-tab=description] .editor-content,.mgt2.vehicule .vehicule-tab[data-tab=description] prose-mirror{min-height:300px !important;height:auto !important} diff --git a/templates/chat/creature-roll.html b/templates/chat/creature-roll.html index 9c8f268..c9fb12b 100644 --- a/templates/chat/creature-roll.html +++ b/templates/chat/creature-roll.html @@ -40,4 +40,10 @@ {{ localize 'MGT2.Chat.Roll.Effect' }} {{effectStr}} {{/if}} + + {{#if showRollDamage}} +
+ +
+ {{/if}} diff --git a/templates/chat/radiation.html b/templates/chat/radiation.html new file mode 100644 index 0000000..aea7e53 --- /dev/null +++ b/templates/chat/radiation.html @@ -0,0 +1,24 @@ +
+
+ {{rollObjectName}} +
+ + + {{ localize 'MGT2.Chat.Radiation.Title' }} + +
+
+ +
+
+
{{formula}}
+ {{{tooltip}}} +

{{total}} {{ localize 'MGT2.Chat.Radiation.Rads' }}

+
+
+ +
+ + {{ localize 'MGT2.Chat.Radiation.Rules' }} +
+
diff --git a/templates/chat/roll.html b/templates/chat/roll.html index a0528a7..96ce03f 100644 --- a/templates/chat/roll.html +++ b/templates/chat/roll.html @@ -34,6 +34,40 @@ + {{#if apValue}} +
+ + {{ localize 'MGT2.Chat.Roll.APIgnore' }} {{apValue}} +
+ {{/if}} + + {{#if blastRadius}} +
+ + {{ localize 'MGT2.Chat.Roll.BlastArea' }} {{blastRadius}}m — {{ localize 'MGT2.Chat.Roll.BlastRules' }} +
+ {{/if}} + + {{#if stunWeapon}} +
+ + {{ localize 'MGT2.Chat.Roll.StunWeapon' }} +
+ {{/if}} + + {{#if radiationWeapon}} +
+ + {{ localize 'MGT2.Chat.Radiation.Badge' }} +
+ {{/if}} + + {{#if autoInfo}} +
+ {{autoInfo}} +
+ {{/if}} + {{#if rollSuccess}}
{{ localize 'MGT2.Chat.Roll.Success' }}
{{else if rollFailure}} @@ -56,6 +90,11 @@ {{#if showRollDamage}} {{/if}} + {{#if radiationWeapon}} + + {{/if}} {{#each cardButtons as |cardButton|}} {{/each}} diff --git a/templates/items/weapon-sheet.html b/templates/items/weapon-sheet.html index 443aac4..d6ca1ae 100644 --- a/templates/items/weapon-sheet.html +++ b/templates/items/weapon-sheet.html @@ -78,24 +78,44 @@ {{/if}} -
-
-
{{ localize 'MGT2.Items.Trait' }}
-
{{ localize 'MGT2.Items.Description' }}
-
-
- {{#each system.traits as |trait i| }} -
-
-
- +
+ {{ localize 'MGT2.WeaponTraits.SectionTitle' }} +
+
+ +
-
- +
+ +
+
+ + +
+ + + + + + +
- {{/each}} -
+
{{> systems/mgt2/templates/items/parts/sheet-configuration.html }} diff --git a/templates/roll-prompt.html b/templates/roll-prompt.html index 5c0f384..9e7e384 100644 --- a/templates/roll-prompt.html +++ b/templates/roll-prompt.html @@ -40,19 +40,138 @@ {{selectOptions skills selected=skill valueAttr="_id" labelAttr="name"}}
+ {{#unless isAttack}}
+ {{/unless}}
{{ localize 'MGT2.RollPrompt.States' }} -
- - + {{!-- Hidden checkboxes preserve form values for the roll calculation --}} + + + {{!-- Read-only state badges --}} +
+ + + {{ localize 'MGT2.RollPrompt.EncumbranceDM' }} + {{#if encumbrance}}−2{{/if}} + + + + {{ localize 'MGT2.RollPrompt.FatigueDM' }} + {{#if fatigue}}−2{{/if}} +
+ {{#if isRanged}} +
+ {{ localize 'MGT2.RollPrompt.RangedModifiers' }} + {{#if hasScope}} +
+ + {{ localize 'MGT2.RollPrompt.ScopeActive' }} +
+ {{/if}} + {{#if hasZeroG}} +
+ + {{ localize 'MGT2.RollPrompt.ZeroGActive' }} +
+ {{/if}} + {{#if autoLevel}} +
+ + +
+

⚠ {{ localize 'MGT2.RollPrompt.AutoNoAim' }}

+ {{/if}} +
+ + +
+
+ + +
+
+ + +
+
+ + + +
+
+ + +
+
+ {{/if}} + {{#if isMelee}} +
+ {{ localize 'MGT2.RollPrompt.MeleeModifiers' }} +
+ + +
+
+ + +
+
+ {{/if}} {{/if}}