Compare commits

...

3 Commits

Author SHA1 Message Date
9a20a96cec Start vehicle automation 2022-09-16 17:36:58 +02:00
ae697b0bb8 WIP for vehicle sheets 2022-09-09 08:33:28 +02:00
ecf5a38eb0 WIP for vehicle sheets 2022-09-08 21:26:45 +02:00
21 changed files with 660 additions and 250 deletions

View File

@ -1,6 +1,6 @@
[Dolphin] [Dolphin]
SortRole=creationtime SortRole=modificationtime
Timestamp=2021,4,13,9,23,48.267 Timestamp=2022,9,8,20,43,38.73
Version=4 Version=4
ViewMode=1 ViewMode=1
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -9,8 +9,21 @@ const __subkey2title = {
"melee-dmg": "Melee Damage", "melee-atk": "Melee Attack", "ranged-atk": "Ranged Attack", "melee-dmg": "Melee Damage", "melee-atk": "Melee Attack", "ranged-atk": "Ranged Attack",
"ranged-dmg": "Ranged Damage", "dmg-res": "Damare Resistance" "ranged-dmg": "Ranged Damage", "dmg-res": "Damare Resistance"
} }
const __statBuild = [
{ modules: ["vehiclehull"], field: "hr", itemfield: "hr" },
{ modules: ["vehiclehull", "vehiclemodule"], field: "hr", itemfield: "size", subfield: "size" },
//{ modules: ["vehiclehull"], field: "pc", itemfield: "vms", subfield: "avgnrg" },
//{ modules: ["powercoremodule"], field: "pc", itemfield: "nrg", subfield: "avgnrg" },
{ modules: ["vehiclehull", "mobilitymodule"], itemfield: "man", field: "man" },
{ modules: ["powercoremodule"], field: "pc", itemfield: "pc", },
{ modules: ["mobilitymodule"], field: "mr", itemfield: "mr", },
{ modules: ["propulsionmodule"], field: "ad", itemfield: "ad", },
{ modules: ["combatmodule"], field: "fc", itemfield: "fc", },
]
const __isVehicleUnique = { vehiclehull:1, powercoremodule:1, mobilitymodule: 1, propulsionmodule: 1, combatmodule: 1}
const __speed2Num = { fullstop: 0, crawling: 1, slow: 2, average: 3, fast: 4, extfast: 5 }
const __num2speed = ["fullstop", "crawling", "slow", "average", "fast", "extfast"]
/* -------------------------------------------- */
/* -------------------------------------------- */ /* -------------------------------------------- */
/** /**
* Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system. * Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system.
@ -71,7 +84,9 @@ export class PegasusActor extends Actor {
this.system.encCapacity = this.getEncumbranceCapacity() this.system.encCapacity = this.getEncumbranceCapacity()
this.buildContainerTree() this.buildContainerTree()
} }
if (this.type == 'vehicle') {
this.computeVehicleStats();
}
super.prepareDerivedData(); super.prepareDerivedData();
} }
@ -106,6 +121,42 @@ export class PegasusActor extends Actor {
let comp = this.items.filter(item => item.type == 'effect'); let comp = this.items.filter(item => item.type == 'effect');
return comp; return comp;
} }
/* -------------------------------------------- */
getCombatModules() {
let comp = this.items.filter(item => item.type == 'combatmodule');
return comp;
}
/* -------------------------------------------- */
getVehicleHull() {
let comp = this.items.filter(item => item.type == 'vehiclehull');
return comp;
}
/* -------------------------------------------- */
getPowercoreModules() {
let comp = this.items.filter(item => item.type == 'powercoremodule');
return comp;
}
/* -------------------------------------------- */
getMobilityModules() {
let comp = this.items.filter(item => item.type == 'mobilitymodule');
return comp;
}
/* -------------------------------------------- */
getPropulsionModules() {
let comp = this.items.filter(item => item.type == 'propulsionmodule');
return comp;
}
/* -------------------------------------------- */
getVehicleModules() {
let comp = this.items.filter(item => item.type == 'vehiclemodule');
return comp;
}
/* -------------------------------------------- */
getVehicleWeaponModules() {
let comp = this.items.filter(item => item.type == 'vehicleweaponmodule');
return comp;
}
/* -------------------------------------------- */ /* -------------------------------------------- */
getPowers() { getPowers() {
let comp = this.items.filter(item => item.type == 'power'); let comp = this.items.filter(item => item.type == 'power');
@ -577,6 +628,7 @@ export class PegasusActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async preprocessItem(event, item, onDrop = false) { async preprocessItem(event, item, onDrop = false) {
// Pre-filter effects // Pre-filter effects
if (item.type == 'effect') { if (item.type == 'effect') {
if (this.checkMentalDisruption() && item.system.type == "mental" && item.system.genre == "positive") { if (this.checkMentalDisruption() && item.system.type == "mental" && item.system.genre == "positive") {
@ -624,7 +676,7 @@ export class PegasusActor extends Actor {
return false return false
} }
} }
if (item.type == "power" && item.system.purchasedtext.length > 0 ) { if (item.type == "power" && item.system.purchasedtext.length > 0) {
ChatMessage.create({ content: `Power ${item.name} puchased : ${item.system.purchasedtext}` }) ChatMessage.create({ content: `Power ${item.name} puchased : ${item.system.purchasedtext}` })
} }
let dropID = $(event.target).parents(".item").attr("data-item-id") // Only relevant if container drop let dropID = $(event.target).parents(".item").attr("data-item-id") // Only relevant if container drop
@ -713,8 +765,8 @@ export class PegasusActor extends Actor {
if (spec) { if (spec) {
let powers = [] let powers = []
for (let power of spec.system.powers) { for (let power of spec.system.powers) {
if ( power.data ) { if (power.data) {
power.system = power.data power.system = power.data
} }
power.system.specId = specId power.system.specId = specId
powers.push(power) powers.push(power)
@ -861,10 +913,18 @@ export class PegasusActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
incDecNRG(value) { incDecNRG(value) {
let nrg = duplicate(this.system.nrg) if (this.type == "character") {
nrg.value += value let nrg = duplicate(this.system.nrg)
if (nrg.value >= 0 && nrg.value <= nrg.max) { nrg.value += value
this.update({ 'data.nrg': nrg }) if (nrg.value >= 0 && nrg.value <= nrg.max) {
this.update({ 'data.nrg': nrg })
}
} else {
let pc = duplicate(this.system.statistics.pc)
pc.curnrg += value
if (pc.curnrg >= 0) {
this.update({ 'system.statistics.pc': pc })
}
} }
} }
@ -932,7 +992,7 @@ export class PegasusActor extends Actor {
if (status == "activated") { if (status == "activated") {
// Add effects linked to the perk // Add effects linked to the perk
let effects = [] let effects = []
for (let effect of item.system.effectsgained) { for (let effect of item.system.effectsgained) {
if (effect.data) { if (effect.data) {
effect.system = effect.data effect.system = effect.data
} }
@ -1099,11 +1159,10 @@ export class PegasusActor extends Actor {
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async computeNRGHealth() { async computeNRGHealth() {
if (this.type == "vehicle") {
return
}
if (this.isOwner || game.user.isGM) { if (this.isOwner || game.user.isGM) {
let updates = {} let updates = {}
let phyDiceValue = PegasusUtility.getDiceValue(this.system.statistics.phy.value) + this.system.secondary.health.bonus + this.system.statistics.phy.mod; let phyDiceValue = PegasusUtility.getDiceValue(this.system.statistics.phy.value) + this.system.secondary.health.bonus + this.system.statistics.phy.mod;
@ -1694,4 +1753,141 @@ export class PegasusActor extends Actor {
ui.notifications.warn("Power not found !", powerId); ui.notifications.warn("Power not found !", powerId);
} }
} }
/* -------------------------------------------- */
/* VEHICLE STUFF */
manageCurrentSpeed(speed) {
if (speed == "fullstop") {
this.update({ 'system.secondary.moverange': "nomovement" })
}
if (speed == "crawling") {
this.update({ 'system.secondary.moverange': "threatzone" })
}
if (speed == "slow") {
this.update({ 'system.secondary.moverange': "close" })
}
if (speed == "average") {
this.update({ 'system.secondary.moverange': "medium" })
}
if (speed == "fast") {
this.update({ 'system.secondary.moverange': "long" })
}
if (speed == "extfast") {
this.update({ 'system.secondary.moverange': "extreme" })
}
}
/* -------------------------------------------- */
modifyVehicleStun(incDec) {
let stun = this.system.stun.value + incDec
this.update({ 'stun.value': stun })
}
/* -------------------------------------------- */
addTopSpeedBonus( topspeed, bonus) {
let num = __speed2Num[topspeed] + Number(bonus)
num = Math.max(0, num)
num = Math.min(num, __num2speed.length-1)
return __num2speed[num]
}
/* -------------------------------------------- */
async computeVehicleStats() {
if (this.type == "vehicle") {
for (let statDef of __statBuild) {
let sum = 0
let list = []
for (let moduleType of statDef.modules) {
list = list.concat(this.items.filter(item => item.type == moduleType))
}
if (list && list.length > 0) {
sum = list.reduce((value, item2) => value + Number(item2.system[statDef.itemfield]), 0)
}
//console.log("Processing", statDef.field, this.system.statistics[statDef.field].level, list, sum)
if (statDef.subfield){
if (sum != Number(this.system.statistics[statDef.field][statDef.subfield])) {
//console.log("Update", statDef.field, statDef.subfield, sum, this.system.statistics[statDef.field][statDef.subfield])
this.update({ [`system.statistics.${statDef.field}.${statDef.subfield}`]: sum } )
}
} else {
if (sum != Number(this.system.statistics[statDef.field].level)) {
this.update({ [`system.statistics.${statDef.field}.level`]: sum, [`system.statistics.${statDef.field}.currentlevel`]: sum })
}
}
}
// Top speed management
let mobility = this.items.find( item => item.type == "mobilitymodule")
let arcs = duplicate(this.system.arcs)
if (mobility) {
let propulsion = this.items.find( item => item.type == "propulsionmodule")
let bonus = (propulsion) ? propulsion.system.topspeed : 0
arcs.frontarc.topspeed = this.addTopSpeedBonus(mobility.system.ts_f, bonus)
arcs.rightarc.topspeed = mobility.system.ts_s
arcs.leftarc.topspeed = mobility.system.ts_s
arcs.toparc.topspeed = mobility.system.ts_s
arcs.bottomarc.topspeed = mobility.system.ts_s
arcs.reararc.topspeed = mobility.system.ts_r
} else {
arcs.frontarc.topspeed = "fullstop"
arcs.rightarc.topspeed = "fullstop"
arcs.leftarc.topspeed = "fullstop"
arcs.toparc.topspeed = "fullstop"
arcs.bottomarc.topspeed = "fullstop"
arcs.reararc.topspeed = "fullstop"
}
for (let key in this.system.arcs) {
if (this.system.arcs[key].topspeed != arcs[key].topspeed) {
this.update( { 'system.arcs': arcs})
}
}
// VMS management
let hull = this.items.find( item => item.type == "vehiclehull")
let modules = duplicate(this.system.modules)
if (hull ) {
modules.totalvms = Number(hull.system.vms)
} else {
modules.totalvms = 0
}
let spaceList = this.items.filter(item => item.type == "vehiclemodule") || []
spaceList = spaceList.concat(this.items.filter(item => item.type == "vehicleweaponmodule") || [])
let space = 0
if (spaceList && spaceList.length> 0) {
space = spaceList.reduce((value, item2) => value + Number(item2.system.space), 0)
}
modules.usedvms = space
if ( modules.totalvms != this.system.modules.totalvms || modules.usedvms != this.system.modules.usedvms) {
this.update( {'system.modules': modules})
}
if (modules.usedvms > modules.totalvms ) {
ui.notifications.warn("Warning! No more space available in cargo !!")
}
}
// Manage top speed
}
/* -------------------------------------------- */
async preprocessItemVehicle(event, item, onDrop = false) {
//console.log(">>>>> item", item.type, __isVehicleUnique[item.type])
if ( __isVehicleUnique[item.type] ) {
let toDelList = []
for (let toDel of this.items) {
if ( toDel.type == item.type) {
toDelList.push( toDel.id )
}
}
//console.log("TODEL : ", toDelList)
if ( toDelList.length > 0 ) {
await this.deleteEmbeddedDocuments('Item', toDelList)
}
}
return true
}
} }

View File

@ -399,7 +399,7 @@ export class PegasusUtility {
this.rollPegasus(rollData) this.rollPegasus(rollData)
character.modifyHeroLevelRemaining(-1) character.modifyHeroLevelRemaining(-1)
} else { } else {
ui.notifications.warn(`No more Hero Level for ${actor.name} ! Unable to reroll.`) ui.notifications.warn(`No more Hero Level for ${character.name} ! Unable to reroll.`)
} }
} }
} }

View File

@ -43,6 +43,13 @@ export class PegasusVehicleSheet extends ActorSheet {
optionsLevel: PegasusUtility.getOptionsLevel(), optionsLevel: PegasusUtility.getOptionsLevel(),
subActors: duplicate(this.actor.getSubActors()), subActors: duplicate(this.actor.getSubActors()),
effects: duplicate(this.actor.getEffects()), effects: duplicate(this.actor.getEffects()),
combatModules: duplicate(this.actor.getCombatModules()),
powerCoreModules: duplicate(this.actor.getPowercoreModules()),
vehicleHull: duplicate(this.actor.getVehicleHull()),
mobilityModules: duplicate(this.actor.getMobilityModules()),
propulsionModules: duplicate(this.actor.getPropulsionModules()),
vehicleModules: duplicate(this.actor.getVehicleModules()),
vehicleWeaponModules: duplicate(this.actor.getVehicleWeaponModules()),
options: this.options, options: this.options,
owner: this.document.isOwner, owner: this.document.isOwner,
editScore: this.options.editScore, editScore: this.options.editScore,
@ -106,15 +113,9 @@ export class PegasusVehicleSheet extends ActorSheet {
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true }) this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
}) })
html.find('.spec-group-activate').click(ev => { html.find('.current-speed-change').click(ev => {
const li = $(ev.currentTarget).parents(".item"); let speed = ev.currentTarget.value
let itemId = li.data("item-id"); this.actor.manageCurrentSpeed(speed)
this.actor.specPowerActivate( itemId)
});
html.find('.spec-group-deactivate').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let itemId = li.data("item-id");
this.actor.specPowerDeactivate( itemId)
}); });
html.find('.equip-activate').click(ev => { html.find('.equip-activate').click(ev => {
@ -133,32 +134,6 @@ export class PegasusVehicleSheet extends ActorSheet {
let itemId = li.data("item-id"); let itemId = li.data("item-id");
this.actor.perkEffectUsed( itemId) this.actor.perkEffectUsed( itemId)
}); });
html.find('.perk-status').change(ev => {
const li = $(ev.currentTarget).parents(".item");
let itemId = li.data("item-id");
this.actor.updatePerkStatus( itemId, ev.currentTarget.value)
this.render()
});
html.find('.power-cost-spent').change(ev => {
const li = $(ev.currentTarget).parents(".item");
let itemId = li.data("item-id");
this.actor.updatePowerSpentCost( itemId, ev.currentTarget.value)
});
html.find('.power-dmg-roll').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let itemId = li.data("item-id")
this.actor.powerDmgRoll( itemId )
})
html.find('.perk-used').change(ev => {
const li = $(ev.currentTarget).parents(".item")
let itemId = li.data("item-id")
let index = Number($(ev.currentTarget).data("use-index") )
this.actor.updatePerkUsed( itemId, index, ev.currentTarget.checked )
});
html.find('.subactor-edit').click(ev => { html.find('.subactor-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item"); const li = $(ev.currentTarget).parents(".item");
@ -181,10 +156,10 @@ export class PegasusVehicleSheet extends ActorSheet {
const li = $(event.currentTarget).parents(".item"); const li = $(event.currentTarget).parents(".item");
this.actor.incDecQuantity( li.data("item-id"), +1 ); this.actor.incDecQuantity( li.data("item-id"), +1 );
} ) } )
html.find('.current-nrg-minus').click(event => { html.find('.vehicle-current-nrg-minus').click(event => {
this.actor.incDecNRG( -1 ); this.actor.incDecNRG( -1 );
} ) } )
html.find('.current-nrg-plus').click(event => { html.find('.vehicle-current-nrg-plus').click(event => {
this.actor.incDecNRG( 1 ); this.actor.incDecNRG( 1 );
} ) } )
@ -197,11 +172,11 @@ export class PegasusVehicleSheet extends ActorSheet {
this.actor.incDecAmmo( li.data("item-id"), +1 ) this.actor.incDecAmmo( li.data("item-id"), +1 )
} ); } );
html.find('.stun-minus').click(event => { html.find('.vehicle-stun-minus').click(event => {
this.actor.modifyStun( -1 ) this.actor.modifyVehicleStun( -1 )
} ) } )
html.find('.stun-plus').click(event => { html.find('.vehicle-stun-plus').click(event => {
this.actor.modifyStun( 1 ) this.actor.modifyVehicleStun( 1 )
} ) } )
@ -250,16 +225,6 @@ export class PegasusVehicleSheet extends ActorSheet {
this.rollIDR( li.data("item-id"), diceValue) this.rollIDR( li.data("item-id"), diceValue)
}) })
html.find('.roll-spec').click((event) => {
const li = $(event.currentTarget).parents(".item");
const specId = li.data("item-id");
this.actor.rollSpec(specId);
});
html.find('.power-roll').click((event) => {
const li = $(event.currentTarget).parents(".item");
const powerId = li.data("item-id");
this.actor.rollPower(powerId);
});
html.find('.weapon-roll').click((event) => { html.find('.weapon-roll').click((event) => {
const li = $(event.currentTarget).parents(".item"); const li = $(event.currentTarget).parents(".item");
const weaponId = li.data("item-id"); const weaponId = li.data("item-id");
@ -297,35 +262,12 @@ export class PegasusVehicleSheet extends ActorSheet {
this.actor.equipItem( li.data("item-id") ); this.actor.equipItem( li.data("item-id") );
this.render(true); this.render(true);
}); });
html.find('.power-activate').click(ev => {
const li = $(ev.currentTarget).parents(".item");
this.actor.activatePower( li.data("item-id") );
this.render(true);
});
html.find('.vice-virtue-activate').click(ev => {
const li = $(ev.currentTarget).parents(".item")
this.actor.activateViceOrVirtue( li.data("item-id") )
this.render(true);
})
html.find('.change-worstfear').change(ev => {
this.actor.manageWorstFear( ev.currentTarget.checked )
});
html.find('.change-desires').change(ev => {
this.actor.manageDesires( ev.currentTarget.checked )
});
html.find('.update-field').change(ev => { html.find('.update-field').change(ev => {
const fieldName = $(ev.currentTarget).data("field-name"); const fieldName = $(ev.currentTarget).data("field-name");
let value = Number(ev.currentTarget.value); let value = Number(ev.currentTarget.value);
this.actor.update( { [`${fieldName}`]: value } ); this.actor.update( { [`${fieldName}`]: value } );
}); });
html.find('.perk-active').click(ev => {
const li = $(ev.currentTarget).parents(".item");
this.actor.activatePerk( li.data("item-id") );
this.render(true);
});
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -344,7 +286,7 @@ export class PegasusVehicleSheet extends ActorSheet {
if (item == undefined) { if (item == undefined) {
item = this.actor.items.get( dragData.uuid ) item = this.actor.items.get( dragData.uuid )
} }
let ret = await this.actor.preprocessItem( event, item, true ) let ret = await this.actor.preprocessItemVehicle( event, item, true )
if ( ret ) { if ( ret ) {
super._onDropItem(event, dragData) super._onDropItem(event, dragData)
} }

View File

@ -1235,8 +1235,7 @@ ul, li {
/*************************************************************/ /*************************************************************/
#pause #pause
{ { font-size: 2rem;
font-size: 2rem;
} }
#pause > h3 #pause > h3
{ {
@ -1285,6 +1284,8 @@ Focus FOC: #ff0084
background-color: black; background-color: black;
background: black; background: black;
} }
.color-class-fc,
.color-class-man,
.color-class-agi, .color-class-agi,
.color-class-ranged-attack { .color-class-ranged-attack {
background-color: #02a41d; background-color: #02a41d;
@ -1303,10 +1304,12 @@ Focus FOC: #ff0084
.color-class-meleedmg { .color-class-meleedmg {
background-color: #5f3d00; background-color: #5f3d00;
} }
.color-class-hr,
.color-class-phy, .color-class-phy,
.color-class-dmgres { .color-class-dmgres {
background-color: #990304; background-color: #990304;
} }
.color-class-ad,
.color-class-mr { .color-class-mr {
background-color: #050505; background-color: #050505;
} }
@ -1325,6 +1328,7 @@ Focus FOC: #ff0084
.color-class-ranged-damage { .color-class-ranged-damage {
background-color: #f9c801; background-color: #f9c801;
} }
.color-class-pc,
.color-class-foc { .color-class-foc {
background-color: #ff0084; background-color: #ff0084;
} }
@ -1377,8 +1381,8 @@ Focus FOC: #ff0084
min-height: 36px; min-height: 36px;
} }
.item-stat-roll-vehicle { .item-stat-roll-vehicle {
max-height: 96px; max-height: 102px;
min-height: 90px; min-height: 102px;
} }
.item-stat-roll select, .item-stat-roll input { .item-stat-roll select, .item-stat-roll input {
margin-top: 4px; margin-top: 4px;

View File

@ -1,6 +1,6 @@
{ {
"description": "Pegasus RPG system for FoundryVTT", "description": "Pegasus RPG system for FoundryVTT",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-pegasus-rpg/archive/fvtt-pegasus-rpg-v10.0.4.zip", "download": "https://www.uberwald.me/gitea/uberwald/fvtt-pegasus-rpg/archive/fvtt-pegasus-rpg-v10.0.8.zip",
"esmodules": [ "esmodules": [
"modules/pegasus-main.js" "modules/pegasus-main.js"
], ],
@ -10,7 +10,8 @@
{ {
"lang": "en", "lang": "en",
"name": "English", "name": "English",
"path": "lang/en.json" "path": "lang/en.json",
"flags": {}
} }
], ],
"authors": [ "authors": [
@ -19,11 +20,8 @@
"flags": {} "flags": {}
} }
], ],
"library": false,
"license": "LICENSE.txt", "license": "LICENSE.txt",
"manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-pegasus-rpg/raw/branch/master/system.json", "manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-pegasus-rpg/raw/branch/master/system.json",
"manifestPlusVersion": "1.0.0",
"media": [],
"compatibility": { "compatibility": {
"minimum": "10", "minimum": "10",
"verified": "10.284", "verified": "10.284",
@ -35,241 +33,217 @@
"type": "Item", "type": "Item",
"label": "Specialisations", "label": "Specialisations",
"name": "specialisations", "name": "specialisations",
"path": "./packs/specialisations.db", "path": "packs/specialisations.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"specialisation" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Racial Abilities", "label": "Racial Abilities",
"name": "racial-abilities", "name": "racial-abilities",
"path": "./packs/racial-abilities.db", "path": "packs/racial-abilities.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"ability" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Perks", "label": "Perks",
"name": "perk", "name": "perk",
"path": "./packs/perk.db", "path": "packs/perk.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"perk" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Powers", "label": "Powers",
"name": "powers", "name": "powers",
"path": "./packs/powers.db", "path": "packs/powers.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"power" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Race", "label": "Race",
"name": "race", "name": "race",
"path": "./packs/race.db", "path": "packs/race.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"race" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Role", "label": "Role",
"name": "role", "name": "role",
"path": "./packs/role.db", "path": "packs/role.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"role" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Effects", "label": "Effects",
"name": "effects", "name": "effects",
"path": "./packs/effects.db", "path": "packs/effects.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"effect" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Armour", "label": "Armour",
"name": "armour", "name": "armour",
"path": "./packs/armour.db", "path": "packs/armour.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"armour" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Equipment", "label": "Equipment",
"name": "equipment", "name": "equipment",
"path": "./packs/equipment.db", "path": "packs/equipment.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"equipment" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Shields", "label": "Shields",
"name": "shields", "name": "shields",
"path": "./packs/shields.db", "path": "packs/shields.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"shield" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Melee Weapons", "label": "Melee Weapons",
"name": "melee-weapons", "name": "melee-weapons",
"path": "./packs/melee-weapons.db", "path": "packs/melee-weapons.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"weapon", "melee" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Ranged Weapons", "label": "Ranged Weapons",
"name": "ranged-weapons", "name": "ranged-weapons",
"path": "./packs/ranged-weapons.db", "path": "packs/ranged-weapons.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"weapon", "ranged" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Currency", "label": "Currency",
"name": "currency", "name": "currency",
"path": "./packs/currency.db", "path": "packs/currency.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"currency", "money" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Macros", "label": "Macros",
"name": "macro-commands", "name": "macro-commands",
"path": "./packs/macro-commands.db", "path": "packs/macro-commands.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"macro", "command" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Vehicle - Weapon modules", "label": "Vehicle - Weapon modules",
"name": "vm-vehicle-weapons-modules", "name": "vm-vehicle-weapons-modules",
"path": "./packs/vm-vehicle-weapons-modules.db", "path": "packs/vm-vehicle-weapons-modules.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"weapon", "vehicle" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Vehicle - Propulsion modules", "label": "Vehicle - Propulsion modules",
"name": "vm-vehicle-propulsion-modules", "name": "vm-vehicle-propulsion-modules",
"path": "./packs/vm-vehicle-propulsion-modules.db", "path": "packs/vm-vehicle-propulsion-modules.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"propulsion", "vehicle" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Vehicle - Power core modules", "label": "Vehicle - Power core modules",
"name": "vm-vehicle-power-core-module", "name": "vm-vehicle-power-core-module",
"path": "./packs/vm-vehicle-power-core-module.db", "path": "packs/vm-vehicle-power-core-module.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"propulsion", "vehicle" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Vehicle - Modules", "label": "Vehicle - Modules",
"name": "vm-vehicle-modules", "name": "vm-vehicle-modules",
"path": "./packs/vm-vehicle-modules.db", "path": "packs/vm-vehicle-modules.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"module", "vehicle" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Vehicle - Mobility module", "label": "Vehicle - Mobility module",
"name": "vm-vehicle-mobility-module", "name": "vm-vehicle-mobility-module",
"path": "./packs/vm-vehicle-mobility-module.db", "path": "packs/vm-vehicle-mobility-module.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"mobility", "vehicle" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Vehicle - Hull module", "label": "Vehicle - Hull module",
"name": "vm-vehicle-hulls", "name": "vm-vehicle-hulls",
"path": "./packs/vm-vehicle-hulls.db", "path": "packs/vm-vehicle-hulls.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"hull", "vehicle" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Vehicle - Combat module", "label": "Vehicle - Combat module",
"name": "vm-vehicle-combat-module", "name": "vm-vehicle-combat-module",
"path": "./packs/vm-vehicle-combat-module.db", "path": "packs/vm-vehicle-combat-module.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"combat", "vehicle" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Vices", "label": "Vices",
"name": "vices", "name": "vices",
"path": "./packs/vices.db", "path": "packs/vices.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"vice" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "Virtues", "label": "Virtues",
"name": "virtues", "name": "virtues",
"path": "./packs/virtues.db", "path": "packs/virtues.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"virtue" "flags": {}
]
}, },
{ {
"type": "Item", "type": "Item",
"label": "ZZ-Admin-FX", "label": "ZZ-Admin-FX",
"name": "zz-adminfx-zz", "name": "zz-adminfx-zz",
"path": "./packs/zz-adminfx-zz.db", "path": "packs/zz-adminfx-zz.db",
"system": "fvtt-pegasus-rpg", "system": "fvtt-pegasus-rpg",
"tags": [ "private": false,
"fx" "flags": {}
]
} }
], ],
"primaryTokenAttribute": "secondary.health", "primaryTokenAttribute": "secondary.health",
@ -278,9 +252,8 @@
"styles": [ "styles": [
"styles/simple.css" "styles/simple.css"
], ],
"templateVersion": 112,
"title": "Pegasus RPG", "title": "Pegasus RPG",
"url": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg", "url": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg",
"version": "10.0.4", "version": "10.0.8",
"background" : "systems/fvtt-pegasus-rpg/images/ui/pegasus_welcome_page.webp" "background": "systems/fvtt-pegasus-rpg/images/ui/pegasus_welcome_page.webp"
} }

View File

@ -10,6 +10,7 @@
"name": "", "name": "",
"age": 0, "age": 0,
"size": "", "size": "",
"sizenum": 0,
"weight": "", "weight": "",
"hair": "", "hair": "",
"sex": "", "sex": "",
@ -214,6 +215,7 @@
"dicevalue": "", "dicevalue": "",
"level": 0, "level": 0,
"currentlevel": 0, "currentlevel": 0,
"turningarc45": 0,
"col": 1 "col": 1
}, },
"hr": { "hr": {
@ -264,7 +266,7 @@
"activatedmoduleenergy": 0, "activatedmoduleenergy": 0,
"vdp": 0, "vdp": 0,
"vehiculevalue": 0, "vehiculevalue": 0,
"availablevms": 0, "totalvms": 0,
"vmsused": 0, "vmsused": 0,
"totalcost": 0 "totalcost": 0
}, },
@ -674,6 +676,7 @@
"range": "", "range": "",
"idr": "", "idr": "",
"cost": 0, "cost": 0,
"size": 0,
"space": 0 "space": 0
}, },
"vehicleweaponmodule": { "vehicleweaponmodule": {

View File

@ -848,8 +848,8 @@
<input type="text" class="" name="system.biodata.age" value="{{data.biodata.age}}" data-dtype="String" /> <input type="text" class="" name="system.biodata.age" value="{{data.biodata.age}}" data-dtype="String" />
</li> </li>
<li class="item flexrow"> <li class="item flexrow">
<label class="generic-label">Height</label> <label class="generic-label">Height/Weight</label>
<input type="text" class="" name="system.biodata.size" value="{{data.biodata.size}}" data-dtype="String" /> <input type="text" class="" name="system.biodata.weight" value="{{data.biodata.weight}}" data-dtype="String" />
</li> </li>
<li class="item flexrow"> <li class="item flexrow">
<label class="generic-label">Eyes</label> <label class="generic-label">Eyes</label>
@ -864,9 +864,9 @@
<div> <div>
<ul> <ul>
<li class="flexrow item"> <li class="flexrow item">
<label class="generic-label">Weight</label> <label class="generic-label">Size</label>
<input type="text" class="" name="system.biodata.weight" value="{{data.biodata.weight}}" <input type="text" class="" name="system.biodata.sizenum" value="{{data.biodata.sizenum}}"
data-dtype="String" /> data-dtype="Number" />
</li> </li>
<li class="flexrow item"> <li class="flexrow item">
<label class="generic-label">Sex</label> <label class="generic-label">Sex</label>
@ -986,6 +986,14 @@
<label class="attribute-value checkbox"><input type="checkbox" class="change-desires" <label class="attribute-value checkbox"><input type="checkbox" class="change-desires"
name="system.biodata.desiresactive" {{checked data.biodata.desiresactive}} /> Active ?</label> name="system.biodata.desiresactive" {{checked data.biodata.desiresactive}} /> Active ?</label>
</li> </li>
<li class="flexrow">
<label class="short-label">Morality : </label>
<input type="text" class="" name="system.biodata.morality" value="{{data.biodata.morality}}" data-dtype="Number" />
</li>
<li class="flexrow">
<label class="short-label">Morality threshold : </label>
<input type="text" class="" name="system.biodata.moralitythreshold" value="{{data.biodata.moralitythreshold}}" disabled data-dtype="Number" />
</li>
</ul> </ul>
<h3>Catchphrase : </h3> <h3>Catchphrase : </h3>
@ -1026,14 +1034,6 @@
<label class="short-label">Bonus selection : </label> <label class="short-label">Bonus selection : </label>
<input type="text" class="" name="system.biodata.bonusselection" value="{{data.biodata.bonusselection}}" data-dtype="String" /> <input type="text" class="" name="system.biodata.bonusselection" value="{{data.biodata.bonusselection}}" data-dtype="String" />
</li> </li>
<li class="flexrow">
<label class="short-label">Morality : </label>
<input type="text" class="" name="system.biodata.morality" value="{{data.biodata.morality}}" data-dtype="Number" />
</li>
<li class="flexrow">
<label class="short-label">Morality threshold : </label>
<input type="text" class="" name="system.biodata.moralitythreshold" value="{{data.biodata.moralitythreshold}}" disabled data-dtype="Number" />
</li>
<li class="flexrow"> <li class="flexrow">
<label class="short-label">Hero Level (max) : </label> <label class="short-label">Hero Level (max) : </label>
<select class="status-small-label color-class-common" type="text" name="system.biodata.maxlevelremaining" value="{{data.biodata.maxlevelremaining}}" data-dtype="Number" {{#unless @root.editScore}}disabled{{/unless}}> <select class="status-small-label color-class-common" type="text" name="system.biodata.maxlevelremaining" value="{{data.biodata.maxlevelremaining}}" data-dtype="Number" {{#unless @root.editScore}}disabled{{/unless}}>

View File

@ -124,7 +124,7 @@
<input type="text" class="padd-right" name="system.deactivatedtext" value="{{data.deactivatedtext}}" data-dtype="String"/> <input type="text" class="padd-right" name="system.deactivatedtext" value="{{data.deactivatedtext}}" data-dtype="String"/>
</li> </li>
<li class="flexrow"><label class="generic-label">Power Level Cost</label> <li class="flexrow"><label class="generic-label">PPP Used to Purchase</label>
<input type="text" class="input-numeric-short padd-right" name="system.powerlevelcost" value="{{data.powerlevelcost}}" <input type="text" class="input-numeric-short padd-right" name="system.powerlevelcost" value="{{data.powerlevelcost}}"
data-dtype="Number" /> data-dtype="Number" />
</li> </li>

View File

@ -29,7 +29,7 @@
<input type="text" class="" name="system.ad" value="{{data.ad}}" data-dtype="Number"/> <input type="text" class="" name="system.ad" value="{{data.ad}}" data-dtype="Number"/>
</li> </li>
<li class="flexrow"><label class="generic-label">Top Speed (TS)</label> <li class="flexrow"><label class="generic-label">Top Speed (TS) bonus</label>
<input type="text" class="" name="system.topspeed" value="{{data.topspeed}}" data-dtype="Number"/> <input type="text" class="" name="system.topspeed" value="{{data.topspeed}}" data-dtype="Number"/>
</li> </li>

View File

@ -50,7 +50,7 @@
<label class="attribute-value checkbox"><input type="checkbox" name="system.activated" {{checked data.activated}}/></label> <label class="attribute-value checkbox"><input type="checkbox" name="system.activated" {{checked data.activated}}/></label>
</li> </li>
<li class="flexrow"><label class="generic-label">NRG</label> <li class="flexrow"><label class="generic-label">NRG Cost</label>
<input type="text" class="" name="system.nrg" value="{{data.nrg}}" data-dtype="Number"/> <input type="text" class="" name="system.nrg" value="{{data.nrg}}" data-dtype="Number"/>
</li> </li>

View File

@ -1,4 +1,4 @@
<option value="none">None</option> <option value="fullstop">Full stop</option>
<option value="crawling">Crawling</option> <option value="crawling">Crawling</option>
<option value="slow">Slow</option> <option value="slow">Slow</option>
<option value="average">Average</option> <option value="average">Average</option>

View File

@ -19,7 +19,7 @@
<span class="item-name-label-long">&nbsp;</span> <span class="item-name-label-long">&nbsp;</span>
<span class="item-field-label-long"> <span class="item-field-label-long">
<select type="text" name="system.arcs.{{idx}}.topspeed" value="{{arc.topspeed}}" data-dtype="String"> <select type="text" name="system.arcs.{{idx}}.topspeed" value="{{arc.topspeed}}" data-dtype="String" disabled>
{{#select arc.topspeed}} {{#select arc.topspeed}}
{{> systems/fvtt-pegasus-rpg/templates/partial-options-vehicle-speed.html}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-vehicle-speed.html}}
{{/select}} {{/select}}

View File

@ -2,27 +2,79 @@
<div class="flexcol"> <div class="flexcol">
<div class="flexrow"> <div class="flexrow">
<span class="stat-icon"> <span class="stat-icon">
<img class="stat-icon" src="systems/fvtt-pegasus-rpg/images/icons/{{stat.abbrev}}.webp"> <img class="stat-icon" src="systems/fvtt-pegasus-rpg/images/icons/icon_vehicle_{{stat.abbrev}}.webp">
</span> </span>
<span class="stat-label stat-margin" name="{{key}}"> <span class="stat-label stat-margin" name="{{key}}">
<h4 class="stat-text-white stat-margin"><a class="roll-stat stat-margin" <h4 class="stat-text-white stat-margin"><a class="roll-stat stat-margin"
data-stat-key="{{key}}">{{stat.abbrev}}</a></h4> data-stat-key="{{key}}">{{upper stat.abbrev}}</a></h4>
</span> </span>
<select class="status-small-label color-class-common" type="text" name="system.statistics.{{key}}.level" <select class="status-small-label color-class-common" type="text" name="system.statistics.{{key}}.level"
value="{{stat.level}}" data-dtype="Number" {{#unless @root.editScore}}disabled{{/unless}}> value="{{stat.level}}" data-dtype="Number" disabled>
{{#select stat.level}} {{#select stat.level}}
{{{@root.optionsDiceList}}} {{{@root.optionsDiceList}}}
{{/select}} {{/select}}
</select> </select>
</div> </div>
<div class="flexrow"> <div class="flexrow stat-text-white">
<span class="stat-label stat-margin" name="{{key}}">Current level</span> <span class="stat-label stat-margin" name="{{key}}">Current level</span>
<select class="status-small-label color-class-common" type="text" name="system.statistics.{{key}}.currentlevel" <select class="status-small-label color-class-common" type="text" name="system.statistics.{{key}}.currentlevel"
value="{{stat.currentlevel}}" data-dtype="Number" {{#unless @root.editScore}}disabled{{/unless}}> value="{{stat.currentlevel}}" data-dtype="Number" {{#unless @root.editScore}}disabled{{/unless}}>
{{#select stat.currentlevel}} {{#select stat.currentlevel}}
{{{@root.optionsLevel}}} {{{@root.optionsDiceList}}}
{{/select}} {{/select}}
</select> </select>
</div> </div>
{{#if (eq key "man")}}
<div class="flexrow stat-text-white">
<span class="stat-label stat-margin" name="{{key}}">45° Turning Arcs</span>
<select class="status-small-label color-class-common" type="text" name="system.statistics.{{key}}.turningarc45"
value="{{stat.turningarc45}}" data-dtype="Number" {{#unless @root.editScore}}disabled{{/unless}}>
{{#select stat.turningarc45}}
{{{@root.optionsDiceList}}}
{{/select}}
</select>
</div>
{{/if}}
{{#if (eq key "hr")}}
<div class="flexrow stat-text-white">
<span class="stat-label stat-margin" name="{{key}}">Size</span>
<input type="text" class="input-numeric-short" name="system.statistics.{{key}}.size" value="{{stat.size}}" data-dtype="Number" />
</div>
{{/if}}
{{#if (eq key "pc")}}
<div class="flexrow stat-text-white">
<span class="stat-label stat-margin" name="{{key}}">Av NRG</span>
<input type="text" class="input-numeric-short" name="system.statistics.{{key}}.avgnrg" value="{{stat.avgnrg}}" data-dtype="Number" />
<span class="stat-label stat-margin" name="{{key}}">Cur NRG</span>
<input type="text" class="input-numeric-short" name="system.statistics.{{key}}.curnrg" value="{{stat.curnrg}}" data-dtype="Number" />
<span class="padd-right status-small-label no-grow">
<a class="vehicle-current-nrg-plus plus-minus-button">+</a>
<a class="vehicle-current-nrg-minus plus-minus-button">&nbsp;-</a>
</span>
</div>
{{/if}}
{{#if (eq key "ad")}}
<div class="flexrow stat-text-white">
<span class="stat-label stat-margin" name="{{key}}">Acc Mode</span>
<select class="status-small-label color-class-common" type="text" name="system.statistics.{{key}}.accmode"
value="{{stat.accmode}}" data-dtype="String" {{#unless @root.editScore}}disabled{{/unless}}>
{{#select stat.accmode}}
<option value="acc">ACC</option>
<option value="dec">DEC</option>
{{/select}}
</select>
<span class="stat-label stat-margin" name="{{key}}">Curr. speed</span>
<select class="status-small-label color-class-common current-speed-change" type="text" name="system.statistics.{{key}}.currentspeed"
value="{{stat.currentspeed}}" data-dtype="String" {{#unless @root.editScore}}disabled{{/unless}}>
{{#select stat.currentspeed}}
{{> systems/fvtt-pegasus-rpg/templates/partial-options-vehicle-speed.html}}
{{/select}}
</select>
</div>
{{/if}}
</div> </div>
</li> </li>

View File

@ -124,8 +124,8 @@
<span class="flexrow"> <span class="flexrow">
<h3>Stun</h3> <h3>Stun</h3>
<span class="status-small-label no-grow"> <span class="status-small-label no-grow">
<a class="stun-plus plus-minus-button">+</a> <a class="vehicle-stun-plus plus-minus-button">+</a>
<a class="stun-minus plus-minus-button">&nbsp;-</a> <a class="vehicle-stun-minus plus-minus-button">&nbsp;-</a>
</span> </span>
</span> </span>
<ul class="stat-list alternate-list"> <ul class="stat-list alternate-list">
@ -139,6 +139,7 @@
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
<div class="flexrow"> <div class="flexrow">
@ -248,40 +249,281 @@
</div> </div>
</div> </div>
{{!-- Other Tab --}} {{!-- Modules Tab --}}
<div class="tab items" data-group="primary" data-tab="modules"> <div class="tab items" data-group="primary" data-tab="modules">
<div class="stat-item">
<span class="flexrow">
<h3>VMS</h3>
</span>
<ul class="stat-list alternate-list">
<li class="item stat flexrow list-item">
<span class="generic-label small-label">Total</span>
<input type="text" class="" name="system.modules.totalvms" value="{{data.modules.totalvms}}"
data-dtype="Number" disabled />
<span class="generic-label small-label">Used</span>
<input type="text" class="" name="system.modules.vmsused" value="{{data.modules.vmsused}}"
data-dtype="Number" disabled />
</li>
</ul>
</div>
<ul class="stat-list alternate-list"> <ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header"> <span class="item-name-label-header-long">
<h3><label class="items-title-text">Specialisations</label></h3> <h3><label class="items-title-text">STEP 1 - HULL TYPE</label></h3>
</span> </span>
<span class="item-field-label-short"> <span class="item-field-label-short">
<label class="short-label">Stat</label> <label class="short-label">Size</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">Hull Type</label>
</span> </span>
<span class="item-field-label-short"> <span class="item-field-label-short">
<label class="short-label">Dice</label> <label class="short-label">HR</label>
</span> </span>
<span class="item-field-label-long"> <span class="item-field-label-short">
<label class="short-label">Powergroup</label> <label class="short-label">MAN</label>
</span>
<span class="item-field-label-short">
<label class="short-label">VMS</label>
</span> </span>
</li> </li>
{{#each specs as |spec key|}} {{#each vehicleHull as |hull key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{spec._id}}"> <li class="item stat flexrow list-item list-item-shadow" data-item-id="{{hull._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{spec.img}}" /></a> src="{{hull.img}}" /></a>
<span class="item-name-label"><a class="roll-spec">{{spec.name}}</a></span> <span class="item-name-label"><a class="roll-spec">{{hull.name}}</a></span>
<span class="item-field-label-short">{{upper spec.system.statistic}}</span> <span class="item-field-label-medium">{{hull.system.hulltype}}</span>
<span class="item-field-label-short">{{spec.system.dice}}</span> <span class="item-field-label-short">{{hull.system.hr}}</span>
{{#if spec.system.ispowergroup}} <span class="item-field-label-short">{{hull.system.man}}</span>
{{#if spec.system.powersactivated}} <span class="item-field-label-short">{{hull.system.vms}}</span>
<span class="item-field-label-long"><a class="spec-group-deactivate">Deactivate</a></span> <div class="item-filler">&nbsp;</div>
{{else}} <div class="item-controls item-controls-fixed">
<span class="item-field-label-long"><a class="spec-group-activate">Activate</a></span> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
{{/if}} </div>
{{else}} </li>
<span class="item-field-label-long">&nbsp;-&nbsp;</span> {{/each}}
{{/if}} </ul>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">STEP 2 - POWER CORE MODULE</label></h3>
</span>
<span class="item-field-label-long">
<label class="short-label">Power Core Type</label>
</span>
<span class="item-field-label-sjort">
<label class="short-label">PC</label>
</span>
<span class="item-field-label-short">
<label class="short-label">NRG</label>
</span>
</li>
{{#each powerCoreModules as |powercore key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{powercore._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{powercore.img}}" /></a>
<span class="item-name-label"><a class="roll-spec">{{powercore.name}}</a></span>
<span class="item-field-label-medium">{{powercore.system.coretype}}</span>
<span class="item-field-label-short">{{powercore.system.pc}}</span>
<span class="item-field-label-short">{{powercore.system.nrg}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">STEP 3 - MOBILITY MODULE</label></h3>
</span>
<span class="item-field-label-long">
<label class="short-label">Vehicle Category</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">Quality</label>
</span>
<span class="item-field-label-short">
<label class="short-label">MR</label>
</span>
<span class="item-field-label-short">
<label class="short-label">TS:F</label>
</span>
<span class="item-field-label-short">
<label class="short-label">TS:S</label>
</span>
<span class="item-field-label-short">
<label class="short-label">TS:R</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">MAN Adj.</label>
</span>
</li>
{{#each mobilityModules as |mobility key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{mobility._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{mobility.img}}" /></a>
<span class="item-name-label"><a class="roll-spec">{{mobility.name}}</a></span>
<span class="item-field-label-long">{{mobility.system.vehiclecategory}}</span>
<span class="item-field-label-medium">{{mobility.system.quality}}</span>
<span class="item-field-label-short">{{mobility.system.mr}}</span>
<span class="item-field-label-short">{{mobility.system.ts_f}}</span>
<span class="item-field-label-short">{{mobility.system.ts_s}}</span>
<span class="item-field-label-short">{{mobility.system.ts_r}}</span>
<span class="item-field-label-medium">{{mobility.system.man}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">STEP 4 - PROPULSION MODULE</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Quality</label>
</span>
<span class="item-field-label-short">
<label class="short-label">A/D</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">TS:F Adj.</label>
</span>
</li>
{{#each propulsionModules as |propulsion key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{propulsion._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{propulsion.img}}" /></a>
<span class="item-name-label"><a class="roll-spec">{{propulsion.name}}</a></span>
<span class="item-field-label-medium">{{propulsion.system.quality}}</span>
<span class="item-field-label-short">{{propulsion.system.ad}}</span>
<span class="item-field-label-short">{{propulsion.system.topspeed}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">STEP 5 - COMBAT MODULE</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Quality</label>
</span>
<span class="item-field-label-short">
<label class="short-label">FC</label>
</span>
</li>
{{#each combatModules as |combat key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{combat._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{combat.img}}" /></a>
<span class="item-name-label"><a class="roll-spec">{{combat.name}}</a></span>
<span class="item-field-label-medium">{{combat.system.quality}}</span>
<span class="item-field-label-short">{{combat.system.fc}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">VEHICLES MODULES</label></h3>
</span>
<span class="item-field-label-long">
<label class="short-label">Category</label>
</span>
<span class="item-field-label-long">
<label class="short-label">Location</label>
</span>
<span class="item-field-label-long">
<label class="short-label">Security</label>
</span>
<span class="item-field-label-short">
<label class="short-label">NRG</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">Range</label>
</span>
<span class="item-field-label-short">
<label class="short-label">IDR</label>
</span>
</li>
{{#each vehicleModules as |vehiclemod key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{vehiclemod._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{vehiclemod.img}}" /></a>
<span class="item-name-label"><a class="roll-spec">{{vehiclemod.name}}</a></span>
<span class="item-field-label-long">{{vehiclemod.system.category}}</span>
<span class="item-field-label-long">{{vehiclemod.system.location}}</span>
<span class="item-field-label-long">{{vehiclemod.system.security}}</span>
<span class="item-field-label-short">{{vehiclemod.system.nrg}}</span>
<span class="item-field-label-medium">{{vehiclemod.system.range}}</span>
<span class="item-field-label-short">{{vehiclemod.system.idr}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">VEHICLES WEAPONS</label></h3>
</span>
<span class="item-field-label-long">
<label class="short-label">Site</label>
</span>
<span class="item-field-label-long">
<label class="short-label">Location</label>
</span>
<span class="item-field-label-short">
<label class="short-label">DMG</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">AoE</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">Turret</label>
</span>
<span class="item-field-label-short">
<label class="short-label">NRG</label>
</span>
<span class="item-field-label-short">
<label class="short-label">IDR</label>
</span>
</li>
{{#each vehicleWeaponModules as |weapon key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{weapon._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{weapon.img}}" /></a>
<span class="item-name-label"><a class="roll-spec">{{weapon.name}}</a></span>
<span class="item-field-label-long">{{weapon.system.site}}</span>
<span class="item-field-label-long">{{weapon.system.location}}</span>
<span class="item-field-label-short">{{weapon.system.dmg}}</span>
<span class="item-field-label-medium">{{weapon.system.aoe}}</span>
<span class="item-field-label-medium">{{weapon.system.turrent}}</span>
<span class="item-field-label-short">{{weapon.system.nrg}}</span>
<span class="item-field-label-short">{{weapon.system.idr}}</span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
@ -289,9 +531,7 @@
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
</div>
</div>
</div> </div>