diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index f25a4e9..73124f8 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -516,7 +516,6 @@ export class MothershipActorSheet extends foundry.appv1.sheets.ActorSheet { // Remove the type from the dataset since it's in the itemData.type prop. delete itemData.data["type"]; - // Finally, create the item! return this.actor.createEmbeddedDocuments("Item", [itemData]); } diff --git a/module/actor/creature-sheet.js b/module/actor/creature-sheet.js index 08774c7..3edcd4d 100644 --- a/module/actor/creature-sheet.js +++ b/module/actor/creature-sheet.js @@ -11,8 +11,8 @@ export class MothershipCreatureSheet extends foundry.appv1.sheets.ActorSheet { var options = { classes: ["mosh", "sheet", "actor", "creature"], template: "systems/mosh/templates/actor/creature-sheet.html", - width: 700, - height: 650, + width: 820, + height: 770, tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "character" }] }; @@ -68,6 +68,8 @@ export class MothershipCreatureSheet extends foundry.appv1.sheets.ActorSheet { // attr.isCheckbox = attr.dtype === "Boolean"; // } + const superData = data.data.system; + // Prepare items. if (this.actor.type == 'creature') { this._prepareCreatureItems(data); @@ -84,6 +86,38 @@ export class MothershipCreatureSheet extends foundry.appv1.sheets.ActorSheet { data.data.enriched = []; data.data.enriched.description = await foundry.applications.ux.TextEditor.implementation.enrichHTML(data.data.system.description, {async: true}); data.data.enriched.biography = await foundry.applications.ux.TextEditor.implementation.enrichHTML(data.data.system.biography, {async: true}); + + //SKILL XP BUTTONS + superData.xp.html = ''; + if (superData.xp.html == '') { + for (let i = 1; i <= 15; i++) { + if (i > superData.xp.value) { + if (i % 5) { + superData.xp.html += '
'; + } + else { //If a special one + let trainLevel = '
Trained
'; + if (i == 10) trainLevel = '
Expert
'; + else if (i == 15) trainLevel = '
Master
'; + superData.xp.html += '
' + trainLevel + '
'; + } + } + else { + if (i % 5) { + superData.xp.html += '
'; + } + else { //If a special one + let trainLevel = '
Trained
'; + if (i == 10) trainLevel = '
Expert
'; + else if (i == 15) trainLevel = '
Master
'; + superData.xp.html += '
' + trainLevel + '
'; + } + + } + } + } + //END SKILL XP + return data.data; } @@ -105,32 +139,69 @@ export class MothershipCreatureSheet extends foundry.appv1.sheets.ActorSheet { */ _prepareCreatureItems(sheetData) { const actorData = sheetData.data; - + //console.log(sheetData); + ///console.log("sheetdata Above"); // Initialize containers. - const abilities = []; + const gear = []; + const skills = []; const weapons = []; + const armors = []; + const conditions = []; + let curWeight = 0; // Iterate through items, allocating to containers // let totalWeight = 0; for (let i of sheetData.items) { - let item = i.system; - i.img = i.img || DEFAULT_TOKEN; + let item = i.system; + i.img = i.img || DEFAULT_TOKEN; - if (i.type === 'ability') { - abilities.push(i); - } else if (i.type === 'weapon') { - if (item.ranges.value == "" && item.ranges.medium > 0) { - item.ranges.value = item.ranges.short + "/" + item.ranges.medium + "/" + item.ranges.long; - item.ranges.medium = 0; - } - - weapons.push(i); + if (i.type === 'item') { + gear.push(i); + curWeight += item.weight * item.quantity; + } else if (i.type === 'skill') { + skills.push(i); + } else if (i.type === 'armor') { + armors.push(i); + curWeight += item.weight; + } else if (i.type === 'weapon') { + //We need to update this from the old system. + if (item.ranges.value == "" && item.ranges.medium > 0) { + item.ranges.value = item.ranges.short + "/" + item.ranges.medium + "/" + item.ranges.long; + item.ranges.medium = 0; } + + weapons.push(i); + curWeight += item.weight; + } else if (i.type === 'condition') { + // We'll handle the pip html here. + if (item.treatment == null) { + item.treatment = { + "value": 0, + "html": "" + }; + } + let pipHtml = ""; + for (let i = 0; i < 3; i++) { + if (i < item.treatment.value) { + pipHtml += ''; + } + else { + pipHtml += ''; + } + } + + item.treatment.html = pipHtml; + + conditions.push(i); + } } // Assign and return - actorData.abilities = abilities; + actorData.gear = gear; + actorData.skills = skills; + actorData.armors = armors; actorData.weapons = weapons; + actorData.conditions = conditions; } /** @override */ @@ -140,25 +211,126 @@ export class MothershipCreatureSheet extends foundry.appv1.sheets.ActorSheet { // Everything below here is only needed if the sheet is editable if (!this.options.editable) return; - // Delete Inventory Item - html.find('.item-delete').click(ev => { - const li = $(ev.currentTarget).parents(".item"); - this.actor.deleteEmbeddedDocuments("Item", [li.data("itemId")]); - li.slideUp(200, () => this.render(false)); + html.on('mousedown', '.char-pip-button', ev => { + + const div = $(ev.currentTarget); + const targetName = div.data("key"); + + let amount = this.actor.system.xp.value; + let newAmount = amount; + let max = div.data("max"); + let min = div.data("min"); + + if (event.button == 0) { + if (amount < max) { + newAmount = Number(amount) + 1; + } + } else if (event.button == 2) { + if (amount > min) { + newAmount = Number(amount) - 1; + } + } + + this.actor.update({'system.xp.value': newAmount}); + }); + html.on('mousedown', '.treatment-button', ev => { + const li = ev.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)) + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + + + let amount = item.system.treatment.value; + + if (event.button == 0) { + if (amount < 3) { + item.system.treatment.value = Number(amount) + 1; + } + } else if (event.button == 2) { + if (amount > 0) { + item.system.treatment.value = Number(amount) - 1; + } + } + + this.actor.updateEmbeddedDocuments('Item', [item]); + }); + + + // Update Inventory Item + html.find('.item-equip').click(ev => { + const li = ev.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)) + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + + item.system.equipped = !item.system.equipped; + this.actor.updateEmbeddedDocuments('Item', [item]); + }); + + // Add Inventory Item + html.find('.item-create').click(this._onItemCreate.bind(this)); + // Update Inventory Item html.find('.item-edit').click(ev => { - const li = $(ev.currentTarget).parents(".item"); - const item = this.actor.getEmbeddedDocument("Item", li.data("itemId")); - item.sheet.render({force: true}); + const li = $(ev.currentTarget).parents(".item"); + const item = this.actor.getEmbeddedDocument("Item", li.data("itemId")); + item.sheet.render({force: true}); }); - // Rollable Attribute - html.find('.stat-roll').click(ev => { - const div = $(ev.currentTarget); - const statName = div.data("key"); - this.actor.rollCheck(null, 'low', statName, null, null, null); + //Quantity adjuster + html.on('mousedown', '.item-quantity', ev => { + const li = ev.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)) + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + + let amount = item.system.quantity; + + if (event.button == 0) { + item.system.quantity = Number(amount) + 1; + } else if (event.button == 2) { + item.system.quantity = Number(amount) - 1; + } + + this.actor.updateEmbeddedDocuments('Item', [item]); + }); + + //Severity adjuster + html.on('mousedown', '.severity', ev => { + const li = ev.currentTarget.closest(".item"); + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + + + let amount = item.system.severity; + + if (event.button == 0) { + item.system.severity = Number(amount) + 1; + } else if (event.button == 2 && amount > 0) { + item.system.severity = Number(amount) - 1; + } + + this.actor.updateEmbeddedDocuments('Item', [item]); + }); + + // Delete Inventory Item + html.find('.item-delete').click(ev => { + const li = $(ev.currentTarget).parents(".item"); + this.actor.deleteEmbeddedDocuments("Item", [li.data("itemId")]); + li.slideUp(200, () => this.render(false)); + }); + + //SKILLS + // Add Inventory Item + html.find('.skill-create').click(this._onSkillCreate.bind(this)); + + // Update Inventory Item + html.find('.skill-edit').click(ev => { + const li = $(ev.currentTarget).parents(".item"); + const skill = this.actor.getEmbeddedDocument("Item", li.data("itemId")); + skill.sheet.render({force: true}); }); //Weapons @@ -167,102 +339,167 @@ export class MothershipCreatureSheet extends foundry.appv1.sheets.ActorSheet { // Update Inventory Item html.find('.weapon-edit').click(ev => { - const li = $(ev.currentTarget).parents(".item"); - const weapon = this.actor.getEmbeddedDocument("Item", li.data("itemId")); - weapon.sheet.render({force: true}); + const li = $(ev.currentTarget).parents(".item"); + const weapon = this.actor.getEmbeddedDocument("Item", li.data("itemId")); + weapon.sheet.render({force: true}); + }); + + // Rollable Attribute + html.find('.stat-roll').click(ev => { + const div = $(ev.currentTarget); + const statName = div.data("key"); + this.actor.rollCheck(null, 'low', statName, null, null, null); + }); + + // Rollable Skill + html.find('.skill-roll').click(ev => { + const li = event.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + + this.actor.rollCheck(null, null, null, item.name, item.system.bonus, null); }); // Rollable Weapon html.find('.weapon-roll').click(ev => { - const li = ev.currentTarget.closest(".item"); - var item; - item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); - let swarm_damage_roll_string =null; - if (this.actor.system.swarm && this.actor.system.swarm.enabled){ - //replace the roll damage for swarm actors - let new_dice_ammount = item.system.damage.match(/([0-9]+)d[0-9]+/i)[1]*this.getWoundsLeft(html); - swarm_damage_roll_string = item.system.damage.replace(/([0-9]+)(d[0-9]+)/i,`${new_dice_ammount}$2`); - } - this.actor.rollCheck(null, 'low', 'combat', null, null, item,swarm_damage_roll_string); + const li = ev.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + this.actor.rollCheck(null, 'low', 'combat', null, null, item); }); // Rollable Damage html.find('.dmg-roll').click(ev => { - const li = ev.currentTarget.closest(".item"); - var item; - item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); - let swarm_damage_roll_string =null; - if (this.actor.system.swarm && this.actor.system.swarm.enabled){ - //replace the roll damage for swarm actors - let new_dice_ammount = item.system.damage.match(/([0-9]+)d[0-9]+/i)[1]*this.getWoundsLeft(html); - swarm_damage_roll_string = item.system.damage.replace(/([0-9]+)(d[0-9]+)/i,`${new_dice_ammount}$2`); - } - this.actor.rollCheck(null, null, 'damage', null, null, item,swarm_damage_roll_string); - }); - - //increase ammo - html.on('mousedown', '.weapon-ammo', ev => { - //dupe item to work on - const li = ev.currentTarget.closest(".item"); - var item; - item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); - let amount = item.system.ammo; - //increase ammo - if (event.button == 0) { - if (amount >= 0) { - item.system.ammo = Number(amount) + 1; - } - } else if (event.button == 2) { - if (amount > 0) { - item.system.ammo = Number(amount) - 1; - } - } - //update ammo count - this.actor.updateEmbeddedDocuments('Item', [item]); - }); - - //increase shots - html.on('mousedown', '.weapon-shots', ev => { - const li = ev.currentTarget.closest(".item"); - var item; - item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); - if (event.button == 0) { - if (item.system.curShots >= 0 && item.system.curShots < item.system.shots && item.system.ammo > 0) { - item.system.curShots = Number(item.system.curShots) + 1; - item.system.ammo = Number(item.system.ammo) - 1; - } - } else if (event.button == 2) { - if (item.system.curShots > 0) { - item.system.curShots = Number(item.system.curShots) - 1; - item.system.ammo = Number(item.system.ammo) + 1; - } - } - this.actor.updateEmbeddedDocuments('Item', [item]); - }); - - //Reload Shots - html.on('mousedown', '.weapon-reload', ev => { - const li = ev.currentTarget.closest(".item"); - this.actor.reloadWeapon(li.dataset.itemId); + const li = ev.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + this.actor.rollCheck(null, null, 'damage', null, null, item); }); // Rollable Item/Anything with a description that we want to click on. html.find('.description-roll').click(ev => { - const li = ev.currentTarget.closest(".item"); - this.actor.printDescription(li.dataset.itemId, { - event: ev - }); + const li = ev.currentTarget.closest(".item"); + this.actor.printDescription(li.dataset.itemId, { + event: ev + }); + }); + + //increase ammo + html.on('mousedown', '.weapon-ammo', ev => { + const li = ev.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)) + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + let amount = item.system.ammo; + if (event.button == 0) { + if (amount >= 0) { + item.system.ammo = Number(amount) + 1; + } + } else if (event.button == 2) { + if (amount > 0) { + item.system.ammo = Number(amount) - 1; + } + } + this.actor.updateEmbeddedDocuments('Item', [item]); + }); + + //increase shots + html.on('mousedown', '.weapon-shots', ev => { + const li = ev.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)) + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + if (event.button == 0) { + if (item.system.curShots >= 0 && item.system.curShots < item.system.shots && item.system.ammo > 0) { + item.system.curShots = Number(item.system.curShots) + 1; + item.system.ammo = Number(item.system.ammo) - 1; + } + } else if (event.button == 2) { + if (item.system.curShots > 0) { + item.system.curShots = Number(item.system.curShots) - 1; + item.system.ammo = Number(item.system.ammo) + 1; + } + } + this.actor.updateEmbeddedDocuments('Item', [item]); + }); + + //Reload Shots + html.on('mousedown', '.weapon-reload', ev => { + const li = ev.currentTarget.closest(".item"); + this.actor.reloadWeapon(li.dataset.itemId); + }); + + //increase AP + html.on('mousedown', '.armor-ap', ev => { + const li = ev.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)) + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + let amount = item.system.armorPoints; + if (event.button == 0) { + item.system.armorPoints = Number(amount) + 1; + } else if (event.button == 2) { + if (amount > 0) { + item.system.armorPoints = Number(amount) - 1; + } + } + this.actor.updateEmbeddedDocuments('Item', [item]); + }); + + //increase DR + html.on('mousedown', '.armor-dr', ev => { + const li = ev.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)) + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + let amount = item.system.damageReduction; + if (event.button == 0) { + item.system.damageReduction = Number(amount) + 1; + } else if (event.button == 2) { + if (amount > 0) { + item.system.damageReduction = Number(amount) - 1; + } + } + this.actor.updateEmbeddedDocuments('Item', [item]); + }); + + //increase oxygen + html.on('mousedown', '.armor-oxy', ev => { + const li = ev.currentTarget.closest(".item"); + //const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)) + var item; + item = foundry.utils.duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId)); + let amount = item.system.oxygenCurrent; + if (event.button == 0) { + if (amount < item.system.oxygenMax) { + item.system.oxygenCurrent = Number(amount) + 1; + } + } else if (event.button == 2) { + if (amount > 0) { + item.system.oxygenCurrent = Number(amount) - 1; + } + } + this.actor.updateEmbeddedDocuments('Item', [item]); + }); + + // Clicking on Armor + html.find('.armor-roll').click(ev => { + //roll panic check + this.actor.chooseCover(); }); // Drag events for macros. if (this.actor.isOwner) { - let handler = ev => this._onDragStart(ev); + let handler = ev => this._onDragStart(ev); - html.find('li.dropitem').each((i, li) => { - if (li.classList.contains("inventory-header")) return; - li.setAttribute("draggable", true); - li.addEventListener("dragstart", handler, false); - }); + html.find('li.dropitem').each((i, li) => { + if (li.classList.contains("inventory-header")) return; + li.setAttribute("draggable", true); + li.addEventListener("dragstart", handler, false); + }); } // update swarm combat @@ -317,6 +554,84 @@ export class MothershipCreatureSheet extends foundry.appv1.sheets.ActorSheet { return this.actor.createEmbeddedDocuments("Item", [itemData]); } + /** + * Handle creating a new Owned skill for the actor using initial data defined in the HTML dataset + * @param {Event} event The originating click event + * @private + */ + _onSkillCreate(event) { + event.preventDefault(); + const header = event.currentTarget; + // Get the type of item to create. + const type = header.dataset.type; + // Grab any data associated with this control. + var data; + data = foundry.utils.duplicate(header.dataset); + //const data = duplicate(header.dataset); + // Initialize a default name. + const name = `New Skill`; + // Prepare the item object. + const itemData = { + name: name, + type: type, + system: data + }; + + let d = new foundry.applications.api.DialogV2({ + window: {title: `New Skill`}, + classes: ["macro-popup-dialog"], + content: ` +
+
+

Name

+
+ +
+
+
+

Rank

+
+ +
+ `, + buttons: [ + { + icon: 'fas fa-check', + action: "create", + label: "Create", + callback: (event, button, dialog) => { + var rank = button.form.querySelector('[id=\"rank\"]')?.value; + if (rank == "Trained") + itemData.system.bonus = 10; + if (rank == "Expert") + itemData.system.bonus = 15; + if (rank == "Master") + itemData.system.bonus = 20; + + itemData.system.rank = rank; + itemData.name = button.form.querySelector('[id=\"name\"]')?.value + this.actor.createEmbeddedDocuments("Item", [itemData]); + } + }, + { + icon: 'fas fa-times', + action: "cancel", + label: "Cancel", + callback: () => { } + } + ], + default: "roll", + close: () => { } + }); + d.render({force: true}); + + // Finally, create the item! + return; + } /** * Handle clickable rolls. @@ -340,4 +655,15 @@ export class MothershipCreatureSheet extends foundry.appv1.sheets.ActorSheet { } } + async _updateObject(event, formData) { + const actor = this.object; + + var updateData; + updateData = foundry.utils.expandObject(formData); + + await actor.update(updateData, { + diff: false + }); + } + } diff --git a/template.json b/template.json index f684c29..a5c08e0 100644 --- a/template.json +++ b/template.json @@ -158,6 +158,7 @@ "base" ], "biography": "", + "notes": "", "description": "This is a description", "xp": { "value": 1, @@ -197,9 +198,12 @@ "enabled" : false }, "armor": { - "value": 10, + "value": 0, + "mod": 0, "min": 0, "max": 99, + "damageReduction": 0, + "cover": "none", "label": "Armor", "rollLabel": "Armor Save", "enabled" : false diff --git a/templates/actor/actor-sheet.html b/templates/actor/actor-sheet.html index abbf024..da528cc 100644 --- a/templates/actor/actor-sheet.html +++ b/templates/actor/actor-sheet.html @@ -353,7 +353,6 @@ {{ localize 'Mosh.Items' }} {{ localize 'Mosh.Bio' }} {{ localize 'Mosh.Notes' }} - {{!-- Sheet Body --}} diff --git a/templates/actor/creature-sheet.html b/templates/actor/creature-sheet.html index 720ab2f..6732b75 100644 --- a/templates/actor/creature-sheet.html +++ b/templates/actor/creature-sheet.html @@ -99,7 +99,7 @@
-
+
@@ -134,7 +134,35 @@
{{ localize 'Mosh.Current' }}
{{ localize 'Mosh.Maximum' }}
+ +
+ +
+
+
{{system.stats.armor.mod}}
+ {{#if (compare 'str' system.stats.armor.cover '===' 'insignificant')}} +
 5
+ {{/if}} + {{#if (compare 'str' system.stats.armor.cover '===' 'light')}} +
 10
+ {{/if}} + {{#if (compare 'str' system.stats.armor.cover '===' 'heavy')}} +
 20
+ {{/if}} +
+
+
+
{{system.stats.armor.damageReduction}}
+ {{#if (compare 'str' system.stats.armor.cover '===' 'heavy')}} +
 5
+ {{/if}} +
+
+
{{ localize 'Mosh.ArmorPoints' }}
+
{{ localize 'Mosh.DMGReduction' }}
+
+

{{editor enriched.description target="system.description" button=true owner=owner editable=true}}
@@ -159,8 +187,11 @@ {{!-- Sheet Tab Navigation --}} {{!-- Sheet Body --}} @@ -168,32 +199,248 @@ {{!-- Biography Tab --}}
- {{editor system.biography target="system.biography" button=true owner=owner editable=true}} + {{editor enriched.biography target="system.biography" button=true editable=true}}
+ {{!-- Notes Tab --}} +
+ {{editor enriched.notes target="system.notes" button=true editable=true}} +
+ {{!-- Owned Items Tab --}} +
+ + {{#if system.settings.firstEdition}} + +
    +
  1. +
    +
    {{ localize 'Mosh.ArmorName' }}
    +
    {{ localize 'Mosh.AP' }}
    +
    {{ localize 'Mosh.DR' }}
    +
    {{ localize 'Mosh.Speed' }}
    +
    {{ localize 'Mosh.Oxygen' }}
    +
    {{ localize 'Mosh.Equipped' }}
    + +
  2. + {{#each armors as |armor id|}} +
  3. +
    +

    {{armor.name}}

    +
    {{armor.system.armorPoints}}
    +
    {{armor.system.damageReduction}}
    +
    {{armor.system.speed}}
    + {{#if armor.system.oxygenMax}} +
    {{armor.system.oxygenCurrent}}/{{armor.system.oxygenMax}}
    + {{else}} +
    {{ localize 'Mosh.NA' }}
    + {{/if}} +
    +
    + + +
    +
  4. + {{/each}} +
+ {{else}} + +
    +
  1. +
    +
    {{ localize 'Mosh.ArmorName' }}
    +
    {{ localize 'Mosh.SaveBonus' }}
    +
    {{ localize 'Mosh.Speed' }}
    +
    {{ localize 'Mosh.Oxygen' }}
    +
    {{ localize 'Mosh.Equipped' }}
    + +
  2. + {{#each armors as |armor id|}} +
  3. +
    +

    {{armor.name}}

    +
    {{armor.system.armorPoints}}
    +
    {{armor.system.speed}}
    + {{#if armor.system.oxygenMax}} +
    {{armor.system.oxygenCurrent}}/{{armor.system.oxygenMax}}
    + {{else}} +
    {{ localize 'Mosh.NA' }}
    + {{/if}} +
    +
    + + +
    +
  4. + {{/each}} +
+ {{/if}} + + +
    +
  1. +
    +
    {{ localize 'Mosh.ItemName' }}
    +
    {{ localize 'Mosh.Quantity' }}
    + {{#if system.settings.hideWeight}} + {{else}} +
    {{ localize 'Mosh.Weight' }}
    + {{/if}} +
    {{ localize 'Mosh.Value' }}
    +
    + Add +
    +
  2. + {{#if system.settings.hideWeight}} + {{#each gear as |item id|}} +
  3. +
    +

    {{item.name}}

    +
    {{item.system.quantity}}
    +
    {{item.system.cost}}
    +
    + + +
    +
  4. + {{/each}} + {{else}} + {{#each gear as |item id|}} +
  5. +
    +

    {{item.name}}

    +
    {{item.system.quantity}}
    +
    {{item.system.weight}}
    +
    {{item.system.cost}}
    +
    + + +
    +
  6. + {{/each}} + {{/if}} +
+ {{#unless system.settings.hideWeight}} +
+
{{ localize 'Mosh.CarryingCapacity' }}: {{system.weight.capacity}}
+
{{ localize 'Mosh.CurrentWeight' }}: {{system.weight.current}}
+
+ {{/unless}} + +
+ {{!-- Owned Skills Tab --}} +
+ +
    +
  1. +
    +
    {{ localize 'Mosh.SkillName' }}
    +
    {{ localize 'Mosh.SkillRank' }}
    +
    {{ localize 'Mosh.SkillBonus' }}
    + +
  2. + {{#each skills as |skill id|}} +
  3. +
    +
    {{skill.name}}
    +
    {{skill.system.rank}}
    +
    {{skill.system.bonus}}
    +
    + + +
    +
  4. + {{/each}} +
+ + {{#if system.settings.firstEdition}} + + +
+
+
{{ localize 'Mosh.SkillTraining' }}
+ +
{{{system.xp.html}}}
+
+
+ + {{/if}} + +
+ + + + +
    +
  1. +
    +
    {{ localize 'Mosh.Condition' }}
    +
    {{ localize 'Mosh.Severity' }}
    +
    {{ localize 'Mosh.Treatment' }}
    + +
  2. + {{#each conditions as |condition id|}} +
  3. +
    +
    {{condition.name}}
    +
    {{condition.system.severity}}
    +
    + {{#if condition.system.treatment.html}} +
    + {{{condition.system.treatment.html}}} +
    + {{else}} +
    + {{condition.name}} +
    + {{/if}} +
    +
    + + +
    +
  4. + + {{/each}} +
+ + +
+ {{!-- Owned Weapons Tab --}}
  1. - -
    {{ localize 'Mosh.Name' }}
    -
    {{ localize 'Mosh.Damage' }}{{#if system.swarm.enabled}} {{ localize 'Mosh.SwarmWoundShort' }}{{/if}}
    +
    {{ localize 'Mosh.WeaponName' }}
    +
    {{ localize 'Mosh.Damage' }}
    {{ localize 'Mosh.Ammo' }}
    {{ localize 'Mosh.Shots' }}
    {{ localize 'Mosh.Range' }}
    -
  2. + {{#each weapons as |weapon id|}} -
  3. +
  4. -
    {{weapon.name}}
    +
    {{weapon.name}}
    + {{#if weapon.system.antiArmor}} +
    {{weapon.system.damage}} ({{ localize 'Mosh.AntyArmorAcronym' }})
    + {{else}}
    {{weapon.system.damage}}
    + {{/if}} {{#if weapon.system.useAmmo}}
    {{weapon.system.ammo}}
    {{else}} @@ -214,20 +461,16 @@
    {{ localize 'Mosh.NA' }}
    {{/if}} {{#if weapon.system.ranges.value}} - -
    {{weapon.system.ranges.value}}
    {{else}}
    {{ localize 'Mosh.NA' }}
    {{/if}} -
  5. {{/each}} -