Compare commits
28 Commits
fvtt-dark-
...
fvtt-dark-
| Author | SHA1 | Date | |
|---|---|---|---|
| 1f8275e153 | |||
| e19e6df228 | |||
| 714485b688 | |||
| ceed6efc0b | |||
| 06e265586b | |||
| 78edf6b80b | |||
| 60112d1a79 | |||
| 652f24b863 | |||
| 69322cccfe | |||
| 5d0c53f52b | |||
| 9557f18eb2 | |||
| c3758da16b | |||
| 7dbc5e44b7 | |||
| 880109f189 | |||
| 2dbf8fc336 | |||
| 9b7519afa7 | |||
| 285d095d91 | |||
| 79333f8b14 | |||
| 5477e2be4b | |||
| f98852c69f | |||
| 32b5868646 | |||
| 606271e725 | |||
| 2da3d19dbe | |||
| 7ceada98fb | |||
| 580b044c77 | |||
| 83119a2b82 | |||
| 04365a93d0 | |||
| 5f36a58805 |
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
.vscode/settings.json
|
||||
.idea
|
||||
.history
|
||||
todo.md
|
||||
/.vscode
|
||||
/ignored/
|
||||
/node_modules/
|
||||
/jsconfig.json
|
||||
/package.json
|
||||
/package-lock.json
|
||||
@@ -13,10 +13,10 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-dark-stars", "sheet", "actor"],
|
||||
template: "systems/fvtt-dark-stars/templates/actor-sheet.hbs",
|
||||
template: "systems/fvtt-dark-stars/templates/actors/actor-sheet.hbs",
|
||||
width: 960,
|
||||
height: 720,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" }],
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "main" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: true
|
||||
});
|
||||
@@ -35,23 +35,22 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
name: this.actor.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
data: actorData,
|
||||
system: actorData,
|
||||
limited: this.object.limited,
|
||||
skills: this.actor.getSkills( ),
|
||||
perks: this.actor.getPerks( ),
|
||||
weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
|
||||
ammos: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getAmmos()) ),
|
||||
armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
|
||||
shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
|
||||
spells: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getLore())),
|
||||
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ),
|
||||
equippedWeapons: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquippedWeapons()) ),
|
||||
cybers: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getCybers()) ),
|
||||
genetics: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getGenetics()) ),
|
||||
equippedArmor: this.actor.getEquippedArmor(),
|
||||
equippedShield: this.actor.getEquippedShield(),
|
||||
feats: duplicate(this.actor.getFeats()),
|
||||
subActors: duplicate(this.actor.getSubActors()),
|
||||
race: duplicate(this.actor.getRace()),
|
||||
moneys: duplicate(this.actor.getMoneys()),
|
||||
encCapacity: this.actor.getEncumbranceCapacity(),
|
||||
saveRolls: this.actor.getSaveRoll(),
|
||||
conditions: this.actor.getConditions(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
notes: await TextEditor.enrichHTML(this.object.system.biodata.notes, {async: true}),
|
||||
@@ -98,17 +97,6 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
|
||||
})
|
||||
|
||||
html.find('.equip-activate').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.equipActivate( itemId)
|
||||
});
|
||||
html.find('.equip-deactivate').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.equipDeactivate( itemId)
|
||||
});
|
||||
|
||||
html.find('.subactor-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let actorId = li.data("actor-id");
|
||||
@@ -121,6 +109,17 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
let actorId = li.data("actor-id");
|
||||
this.actor.delSubActor(actorId);
|
||||
});
|
||||
|
||||
html.find('.edit-weapon-ammo').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let weaponId = li.data("item-id")
|
||||
this.actor.setWeaponAmmo( weaponId, ev.currentTarget.value )
|
||||
})
|
||||
html.find('.skill-used-id').change(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.setSkillUsed( li.data("item-id"), event.currentTarget.checked );
|
||||
} );
|
||||
|
||||
html.find('.quantity-minus').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.incDecQuantity( li.data("item-id"), -1 );
|
||||
@@ -139,10 +138,6 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
this.actor.incDecAmmo( li.data("item-id"), +1 )
|
||||
} );
|
||||
|
||||
html.find('.roll-ability').click((event) => {
|
||||
const abilityKey = $(event.currentTarget).data("ability-key");
|
||||
this.actor.rollAbility(abilityKey);
|
||||
});
|
||||
html.find('.roll-skill').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const skillId = li.data("item-id")
|
||||
@@ -154,20 +149,6 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
const skillId = li.data("item-id")
|
||||
this.actor.rollWeapon(skillId)
|
||||
});
|
||||
html.find('.roll-armor-die').click((event) => {
|
||||
this.actor.rollArmorDie()
|
||||
});
|
||||
html.find('.roll-shield-die').click((event) => {
|
||||
this.actor.rollShieldDie()
|
||||
});
|
||||
html.find('.roll-target-die').click((event) => {
|
||||
this.actor.rollDefenseRanged()
|
||||
});
|
||||
|
||||
html.find('.roll-save').click((event) => {
|
||||
const saveKey = $(event.currentTarget).data("save-key")
|
||||
this.actor.rollSave(saveKey)
|
||||
});
|
||||
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
|
||||
@@ -64,26 +64,35 @@ export class DarkStarsActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
computeHitPoints() {
|
||||
if (this.type == "character") {
|
||||
let hp = duplicate(this.system.secondary.hp)
|
||||
let max = (this.system.abilities.str.value + this.system.abilities.con.value) * 6
|
||||
if (max != hp.max || hp.value > max) {
|
||||
hp.max = max
|
||||
hp.value = max // Init case
|
||||
this.update({ 'system.secondary.hp': hp })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeEffortPoints() {
|
||||
if (this.type == "character") {
|
||||
let effort = duplicate(this.system.secondary.effort)
|
||||
let max = (this.system.abilities.con.value + this.system.abilities.int.value) * 6
|
||||
if (max != effort.max || effort.value > max) {
|
||||
effort.max = max
|
||||
effort.value = max // Init case
|
||||
this.update({ 'system.secondary.effort': effort })
|
||||
}
|
||||
computeDerivated() {
|
||||
let attr = this.system.attributes
|
||||
let deriv = this.system.derivated
|
||||
let secondary = this.system.secondary
|
||||
|
||||
deriv.csb.value = Math.round((attr.dex.value + attr.sel.value) / 2) + deriv.csb.bonus
|
||||
deriv.asb.value = Math.round((attr.int.value + attr.edu.value) / 2) + deriv.asb.bonus
|
||||
deriv.ssb.value = Math.round((attr.cha.value + attr.emp.value + attr.att.value) / 3) + deriv.ssb.bonus
|
||||
deriv.msb.value = Math.round((attr.con.value + attr.str.value ) / 2) + deriv.msb.bonus
|
||||
deriv.psb.value = Math.round((attr.str.value + attr.dex.value + attr.con.value) / 3) + deriv.psb.bonus
|
||||
|
||||
deriv.ego.value = attr.str.value + attr.cha.value + attr.sel.value + attr.emp.value + deriv.ego.bonus
|
||||
deriv.hup.value = (attr.emp.value * 10) + deriv.hup.bonus
|
||||
deriv.ss.value = (attr.edu.value * 10) + (attr.int.value * 10) + 250 + deriv.ss.bonus
|
||||
|
||||
deriv.mcdb.value = Math.round( (attr.str.value + attr.siz.value) / 4) + deriv.mcdb.bonus
|
||||
deriv.si.value = Math.round( ((attr.dex.value + attr.sel.value) / 5) + 0.5) + deriv.si.bonus
|
||||
|
||||
secondary.hp.max = ((attr.con.value + attr.siz.value ) * 2) + secondary.hp.bonus
|
||||
for(let key in this.system.hitlocations) {
|
||||
let loc = this.system.hitlocations[key]
|
||||
loc.max = Math.floor(secondary.hp.max * loc.ratio)
|
||||
}
|
||||
|
||||
secondary.fp.max = 10 + attr.str.value + attr.con.value + secondary.fp.bonus
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -91,9 +100,9 @@ export class DarkStarsActor extends Actor {
|
||||
|
||||
if (this.type == 'character' || game.user.isGM) {
|
||||
this.system.encCapacity = this.getEncumbranceCapacity()
|
||||
this.computeDerivated()
|
||||
this.buildContainerTree()
|
||||
this.computeHitPoints()
|
||||
this.computeEffortPoints()
|
||||
}
|
||||
|
||||
super.prepareDerivedData();
|
||||
@@ -110,35 +119,6 @@ export class DarkStarsActor extends Actor {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getMoneys() {
|
||||
let comp = this.items.filter(item => item.type == 'money');
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getFeats() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'feat') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getFeatsWithDie() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'feat' && item.system.isfeatdie) || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getFeatsWithSL() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'feat' && item.system.issl) || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getLore() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'spell') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getEquippedWeapons() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
@@ -158,6 +138,17 @@ export class DarkStarsActor extends Actor {
|
||||
return undefined
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getCybers() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'cyber') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getGenetics() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'genetic') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getShields() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'shield') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
@@ -171,12 +162,14 @@ export class DarkStarsActor extends Actor {
|
||||
return undefined
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getRace() {
|
||||
let race = this.items.filter(item => item.type == 'race')
|
||||
return race[0] ?? [];
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
checkAndPrepareEquipment(item) {
|
||||
// Dynamic assign ammo for the weapon
|
||||
if (item.type == "weapon" && item.system.needammo) {
|
||||
let ammo = this.items.find(ammo => ammo.type == "ammo" && item.system.ammoid == ammo.id)
|
||||
if (ammo) {
|
||||
item.ammo = duplicate(ammo)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -196,6 +189,12 @@ export class DarkStarsActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
getWeapons() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getAmmos() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'ammo') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
@@ -207,24 +206,45 @@ export class DarkStarsActor extends Actor {
|
||||
}
|
||||
return item;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
setWeaponAmmo(weaponId, ammoId) {
|
||||
let weapon = this.items.get(weaponId)
|
||||
if(weapon) {
|
||||
this.updateEmbeddedDocuments('Item', [ {_id: weapon.id, 'system.ammoid': ammoId} ])
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
setSkillUsed( skillId, checked) {
|
||||
let skill = this.items.get(skillId)
|
||||
if(skill) {
|
||||
this.updateEmbeddedDocuments('Item', [ {_id: skill.id, 'system.used': checked} ])
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updateSkill(skill) {
|
||||
skill.derivated = duplicate(this.system.derivated[skill.system.base])
|
||||
skill.total = skill.system.value + skill.derivated.value + skill.system.bonus
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getSkills() {
|
||||
this.computeDerivated()
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'skill') || [])
|
||||
for (let skill of comp) {
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
this.updateSkill(skill)
|
||||
}
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getRelevantAbility(statKey) {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'skill' && item.system.ability == ability) || []);
|
||||
return comp;
|
||||
getPerks() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'perk') || [])
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async equipItem(itemId) {
|
||||
let item = this.items.find(item => item.id == itemId)
|
||||
@@ -343,7 +363,7 @@ export class DarkStarsActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async incDecHP(formula) {
|
||||
let dmgRoll = new Roll(formula+"[dark-starsorange]").roll({ async: false })
|
||||
let dmgRoll = new Roll(formula + "[dark-starsorange]").roll({ async: false })
|
||||
await DarkStarsUtility.showDiceSoNice(dmgRoll, game.settings.get("core", "rollMode"))
|
||||
let hp = duplicate(this.system.secondary.hp)
|
||||
hp.value = Number(hp.value) + Number(dmgRoll.total)
|
||||
@@ -372,7 +392,7 @@ export class DarkStarsActor extends Actor {
|
||||
} else {
|
||||
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': containerId }])
|
||||
}
|
||||
} else if (object && object.system.containerid) { // remove from container
|
||||
} else if (object?.system.containerid) { // remove from container
|
||||
console.log("Removeing: ", object)
|
||||
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': "" }]);
|
||||
}
|
||||
@@ -389,18 +409,20 @@ export class DarkStarsActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async equipGear(equipmentId) {
|
||||
let item = this.items.find(item => item.id == equipmentId);
|
||||
if (item && item.system) {
|
||||
if (item?.system) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore(combatId, combatantId) {
|
||||
if (this.type == 'character') {
|
||||
this.rollMR(true, combatId, combatantId)
|
||||
}
|
||||
console.log("Init required !!!!")
|
||||
return -1;
|
||||
hasLastWord() {
|
||||
return this.items.find(i => i.type == "perk" && i.name.toLowerCase() === "last word")
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore() {
|
||||
let initFormula = (this.system.derivated.si.value + this.system.derivated.si.bonus) + "d6"
|
||||
let initRoll = new Roll(initFormula).roll({ async: false })
|
||||
return initRoll.total
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -428,12 +450,6 @@ export class DarkStarsActor extends Actor {
|
||||
await this.update({ 'system.subactors': newArray });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
syncRoll(rollData) {
|
||||
this.lastRollId = rollData.rollId;
|
||||
DarkStarsUtility.saveRollData(rollData);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getOneSkill(skillId) {
|
||||
let skill = this.items.find(item => item.type == 'skill' && item.id == skillId)
|
||||
@@ -488,7 +504,7 @@ export class DarkStarsActor extends Actor {
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.system.quantity + incDec
|
||||
if (newQ >= 0) {
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]) // pdates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]) // pdates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -498,7 +514,7 @@ export class DarkStarsActor extends Actor {
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.system.ammocurrent + incDec;
|
||||
if (newQ >= 0 && newQ <= objetQ.system.ammomax) {
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.ammocurrent': newQ }]); // pdates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.ammocurrent': newQ }]); // pdates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -532,6 +548,13 @@ export class DarkStarsActor extends Actor {
|
||||
return this.items.find(cond => cond.type == "condition" && cond.system.targetadvantage)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
modifyRerolls( value) {
|
||||
let rerolls = duplicate(this.system.various.rerolls)
|
||||
rerolls.value += value
|
||||
this.update({ 'system.various.rerolls': rerolls })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCommonRollData(abilityKey = undefined) {
|
||||
let noAction = this.isNoAction()
|
||||
@@ -545,20 +568,10 @@ export class DarkStarsActor extends Actor {
|
||||
rollData.actorImg = this.img
|
||||
rollData.actorId = this.id
|
||||
rollData.img = this.img
|
||||
rollData.featsDie = this.getFeatsWithDie()
|
||||
rollData.featsSL = this.getFeatsWithSL()
|
||||
rollData.armors = this.getArmors()
|
||||
rollData.conditions = this.getConditions()
|
||||
rollData.featDieName = "none"
|
||||
rollData.featSLName = "none"
|
||||
rollData.rollAdvantage = "none"
|
||||
rollData.advantage = "none"
|
||||
rollData.disadvantage = "none"
|
||||
rollData.forceAdvantage = this.isForcedAdvantage()
|
||||
rollData.forceDisadvantage = this.isForcedDisadvantage()
|
||||
rollData.forceRollAdvantage = this.isForcedRollAdvantage()
|
||||
rollData.forceRollDisadvantage = this.isForcedRollDisadvantage()
|
||||
rollData.noAdvantage = this.isNoAdvantage()
|
||||
rollData.rerolls = this.system.various.rerolls.value
|
||||
|
||||
if (rollData.defenderTokenId) {
|
||||
let defenderToken = game.canvas.tokens.get(rollData.defenderTokenId)
|
||||
let defender = defenderToken.actor
|
||||
@@ -607,15 +620,11 @@ export class DarkStarsActor extends Actor {
|
||||
rollSkill(skillId) {
|
||||
let skill = this.items.get(skillId)
|
||||
if (skill) {
|
||||
if (skill.system.islore && skill.system.level == 0) {
|
||||
ui.notifications.warn("You can't use Lore Skills with a SL of 0.")
|
||||
return
|
||||
}
|
||||
skill = duplicate(skill)
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
this.updateSkill(skill)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "skill"
|
||||
rollData.title = "Skill " + skill.name
|
||||
rollData.skill = skill
|
||||
rollData.img = skill.img
|
||||
if (rollData.target) {
|
||||
@@ -634,20 +643,13 @@ export class DarkStarsActor extends Actor {
|
||||
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
|
||||
if (skill) {
|
||||
skill = duplicate(skill)
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
this.updateSkill(skill)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "weapon"
|
||||
rollData.skill = skill
|
||||
rollData.weapon = weapon
|
||||
this.checkAndPrepareEquipment(weapon)
|
||||
rollData.img = weapon.img
|
||||
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged
|
||||
rollData.forceDisadvantage = this.isAttackDisadvantage()
|
||||
}
|
||||
/*if (rollData.weapon.system.isranged && rollData.tokensDistance > DarkStarsUtility.getWeaponMaxRange(rollData.weapon) ) {
|
||||
ui.notifications.warn(`Your target is out of range of your weapon (max: ${DarkStarsUtility.getWeaponMaxRange(rollData.weapon)} - current : ${rollData.tokensDistance})` )
|
||||
return
|
||||
}*/
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
|
||||
@@ -655,152 +657,8 @@ export class DarkStarsActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollDefenseMelee(attackRollData) {
|
||||
let weapon = this.items.get(attackRollData.defenseWeaponId)
|
||||
if (weapon) {
|
||||
weapon = duplicate(weapon)
|
||||
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
|
||||
if (skill) {
|
||||
skill = duplicate(skill)
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
rollData.defenderTokenId = undefined // Cleanup
|
||||
rollData.mode = "weapondefense"
|
||||
rollData.shield = this.getEquippedShield()
|
||||
rollData.attackRollData = duplicate(attackRollData)
|
||||
rollData.skill = skill
|
||||
rollData.weapon = weapon
|
||||
rollData.img = weapon.img
|
||||
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged
|
||||
rollData.forceDisadvantage = this.isDefenseDisadvantage()
|
||||
}
|
||||
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
|
||||
}
|
||||
} else {
|
||||
ui.notifications.warn("Weapon not found ! ")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollDefenseRanged(attackRollData) {
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.defenderTokenId = undefined // Cleanup
|
||||
rollData.mode = "rangeddefense"
|
||||
if ( attackRollData) {
|
||||
rollData.attackRollData = duplicate(attackRollData)
|
||||
rollData.effectiveRange = DarkStarsUtility.getWeaponRange(attackRollData.weapon)
|
||||
rollData.tokensDistance = attackRollData.tokensDistance // QoL copy
|
||||
}
|
||||
rollData.sizeDice = DarkStarsUtility.getSizeDice(this.system.biodata.size)
|
||||
rollData.distanceBonusDice = 0 //Math.max(0, Math.floor((rollData.tokensDistance - rollData.effectiveRange) + 0.5))
|
||||
rollData.hasCover = "none"
|
||||
rollData.situational = "none"
|
||||
rollData.useshield = false
|
||||
rollData.shield = this.getEquippedShield()
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollShieldDie() {
|
||||
let shield = this.getEquippedShield()
|
||||
if (shield) {
|
||||
shield = duplicate(shield)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "shield"
|
||||
rollData.shield = shield
|
||||
rollData.useshield = true
|
||||
rollData.img = shield.img
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmorDie(rollData = undefined) {
|
||||
let armor = this.getEquippedArmor()
|
||||
if (armor) {
|
||||
armor = duplicate(armor)
|
||||
let reduce = 0
|
||||
let multiply = 1
|
||||
let disadvantage = false
|
||||
let advantage = false
|
||||
let messages = ["Armor applied"]
|
||||
|
||||
if (rollData) {
|
||||
if (DarkStarsUtility.isArmorLight(armor) && DarkStarsUtility.isWeaponPenetrating(rollData.attackRollData.weapon)) {
|
||||
return { armorIgnored: true, nbSuccess: 0, messages: ["Armor ignored : Penetrating weapons ignore Light Armors."] }
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponPenetrating(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor reduced by 1 (Penetrating weapon)")
|
||||
reduce = 1
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponLight(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor with advantage (Light weapon)")
|
||||
advantage = true
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponHeavy(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor with disadvantage (Heavy weapon)")
|
||||
disadvantage = true
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponHack(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor reduced by 1 (Hack weapon)")
|
||||
reduce = 1
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponUndamaging(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor multiplied by 2 (Undamaging weapon)")
|
||||
multiply = 2
|
||||
}
|
||||
}
|
||||
let diceColor = armor.system.absorprionroll
|
||||
let armorResult = await DarkStarsUtility.getRollTableFromDiceColor(diceColor, false)
|
||||
console.log("Armor log", armorResult)
|
||||
let armorValue = Math.max(0, (Number(armorResult.text) + reduce) * multiply)
|
||||
if (advantage || disadvantage) {
|
||||
let armorResult2 = await DarkStarsUtility.getRollTableFromDiceColor(diceColor, false)
|
||||
let armorValue2 = Math.max(0, (Number(armorResult2.text) + reduce) * multiply)
|
||||
if (advantage) {
|
||||
armorValue = (armorValue2 > armorValue) ? armorValue2 : armorValue
|
||||
messages.push(`Armor advantage - Roll 1 = ${armorValue} - Roll 2 = ${armorValue2}`)
|
||||
}
|
||||
if (disadvantage) {
|
||||
armorValue = (armorValue2 < armorValue) ? armorValue2 : armorValue
|
||||
messages.push(`Armor disadvantage - Roll 1 = ${armorValue} - Roll 2 = ${armorValue2}`)
|
||||
}
|
||||
}
|
||||
armorResult.armorValue = armorValue
|
||||
if (!rollData) {
|
||||
ChatMessage.create({ content: "Armor result : " + armorValue })
|
||||
}
|
||||
messages.push("Armor result : " + armorValue)
|
||||
return { armorIgnored: false, nbSuccess: armorValue, rawArmor: armorResult.text, messages: messages }
|
||||
}
|
||||
return { armorIgnored: true, nbSuccess: 0, messages: ["No armor equipped."] }
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollSave(saveKey) {
|
||||
let saves = this.getSaveRoll()
|
||||
let save = saves[saveKey]
|
||||
if (save) {
|
||||
save = duplicate(save)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "save"
|
||||
rollData.save = save
|
||||
if (rollData.target) {
|
||||
ui.notifications.warn("You are targetting a token with a save roll - Not authorized.")
|
||||
return
|
||||
}
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async startRoll(rollData) {
|
||||
this.syncRoll(rollData)
|
||||
let rollDialog = await DarkStarsRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
@@ -2,29 +2,46 @@ import { DarkStarsUtility } from "./dark-stars-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class DarkStarsCombat extends Combat {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
for (let cId = 0; cId < ids.length; cId++) {
|
||||
const c = this.combatants.get(ids[cId]);
|
||||
let id = c._id || c.id;
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore( this.id, id ) : -1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: initBonus } ]);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
processOtherTurns(c, initScore) {
|
||||
let toCreate = []
|
||||
let token = canvas.tokens.get(c.tokenId)
|
||||
let hasLastWord = token.actor.hasLastWord()
|
||||
while ( (initScore > 5) || (hasLastWord && initScore >= 5)) {
|
||||
initScore -= 5;
|
||||
toCreate.push({tokenId: c.tokenId, sceneId: c.sceneId, actorId: c.actorId, hidden: c.hidden, initiative: initScore, flags: { world: { isDuplicated: true} } } );
|
||||
}
|
||||
this.createEmbeddedDocuments("Combatant", toCreate);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
for (let cId of ids) {
|
||||
const c = this.combatants.get(cId);
|
||||
let id = c._id || c.id;
|
||||
let initScore = c.actor ? c.actor.getInitiativeScore(this.id, id) : -1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: initScore }]);
|
||||
setTimeout(() => this.processOtherTurns(c, initScore), 400)
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
nextRound() {
|
||||
super.nextRound()
|
||||
let toDelete = []
|
||||
for (let c of this.combatants) {
|
||||
if (c.flags?.world?.isDuplicated) {
|
||||
toDelete.push(c._id)
|
||||
}
|
||||
}
|
||||
this.deleteEmbeddedDocuments("Combatant", toDelete);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_onUpdate(changed, options, userId) {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async checkTurnPosition() {
|
||||
while (game.combat.turn > 0) {
|
||||
await game.combat.previousTurn()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ export const DARKSTARS_CONFIG = {
|
||||
|
||||
basebonus : {
|
||||
"csb": "CSB",
|
||||
"asb": "SSB",
|
||||
"ssb": "SSB",
|
||||
"msb": "MSB",
|
||||
"psb": "PSB",
|
||||
@@ -30,6 +29,19 @@ export const DARKSTARS_CONFIG = {
|
||||
"slug": "Slug throwers",
|
||||
"energy": "Energy"
|
||||
},
|
||||
perktypes: {
|
||||
"normal": "Normal",
|
||||
"advanced": "Advanced",
|
||||
"role": "Role"
|
||||
},
|
||||
cyberTypes: {
|
||||
"I": "I",
|
||||
"P": "P",
|
||||
"U": "U",
|
||||
"W": "W",
|
||||
"E": "E",
|
||||
"GS": "GS"
|
||||
},
|
||||
range: {
|
||||
"1": "Close",
|
||||
"2": "Short",
|
||||
|
||||
@@ -132,21 +132,9 @@ export class DarkStarsItemSheet extends ItemSheet {
|
||||
this.deleteSubitem(ev);
|
||||
});
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id");
|
||||
let itemType = li.data("item-type");
|
||||
});
|
||||
|
||||
html.find('.view-subitem').click(ev => {
|
||||
this.viewSubitem(ev);
|
||||
});
|
||||
|
||||
html.find('.view-spec').click(ev => {
|
||||
this.manageSpec();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@ export class DarkStarsRollDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData) {
|
||||
|
||||
let options = { classes: ["DarkStarsDialog"], width: 540, height: 340, 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-dark-stars/templates/roll-dialog-generic.hbs', rollData);
|
||||
let options = { classes: ["DarkStarsDialog"], width: 420, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-dark-stars/templates/apps/roll-dialog-generic.hbs', rollData);
|
||||
|
||||
return new DarkStarsRollDialog(actor, rollData, html, options);
|
||||
}
|
||||
@@ -58,27 +58,17 @@ export class DarkStarsRollDialog extends Dialog {
|
||||
}
|
||||
$(function () { onLoad(); });
|
||||
|
||||
html.find('#advantage').change((event) => {
|
||||
this.rollData.advantage = event.currentTarget.value
|
||||
html.find('#bonusMalus').change((event) => {
|
||||
this.rollData.bonusMalus = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#disadvantage').change((event) => {
|
||||
this.rollData.disadvantage = event.currentTarget.value
|
||||
html.find('#above-effective-range').change((event) => {
|
||||
this.rollData.isAboveEffectiveRange = event.currentTarget.checked
|
||||
})
|
||||
html.find('#rollAdvantage').change((event) => {
|
||||
this.rollData.rollAdvantage = event.currentTarget.value
|
||||
})
|
||||
html.find('#useshield').change((event) => {
|
||||
this.rollData.useshield = event.currentTarget.checked
|
||||
})
|
||||
html.find('#hasCover').change((event) => {
|
||||
this.rollData.hasCover = event.currentTarget.value
|
||||
})
|
||||
html.find('#situational').change((event) => {
|
||||
this.rollData.situational = event.currentTarget.value
|
||||
})
|
||||
html.find('#distanceBonusDice').change((event) => {
|
||||
this.rollData.distanceBonusDice = Number(event.currentTarget.value)
|
||||
html.find('#weapon-aiming').change((event) => {
|
||||
this.rollData.weaponAiming = String(event.currentTarget.value)
|
||||
})
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -42,7 +42,7 @@ export class DarkStarsUtility {
|
||||
Handlebars.registerHelper('locationLabel', function (key) {
|
||||
return __locationNames[key]
|
||||
})
|
||||
|
||||
|
||||
|
||||
this.gameSettings()
|
||||
|
||||
@@ -50,22 +50,6 @@ export class DarkStarsUtility {
|
||||
|
||||
/*-------------------------------------------- */
|
||||
static gameSettings() {
|
||||
/*game.settings.register("fvtt-dark-stars", "dice-color-skill", {
|
||||
name: "Dice color for skills",
|
||||
hint: "Set the dice color for skills",
|
||||
scope: "world",
|
||||
config: true,
|
||||
requiresReload: true ,
|
||||
default: "#101010",
|
||||
type: String
|
||||
})
|
||||
|
||||
Hooks.on('renderSettingsConfig', (event) => {
|
||||
const element = event.element[0].querySelector(`[name='fvtt-dark-stars.dice-color-skill']`)
|
||||
if (!element) return
|
||||
// Replace placeholder element
|
||||
console.log("Element Found !!!!")
|
||||
}) */
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
@@ -103,26 +87,16 @@ export class DarkStarsUtility {
|
||||
static async chatListeners(html) {
|
||||
|
||||
html.on("click", '.view-item-from-chat', event => {
|
||||
game.system.crucible.creator.openItemView(event)
|
||||
game.system.darkstars.creator.openItemView(event)
|
||||
})
|
||||
html.on("click", '.roll-defense-melee', event => {
|
||||
let rollId = $(event.currentTarget).data("roll-id")
|
||||
let rollData = DarkStarsUtility.getRollData(rollId)
|
||||
rollData.defenseWeaponId = $(event.currentTarget).data("defense-weapon-id")
|
||||
let actor = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
if (actor && (game.user.isGM || actor.isOwner)) {
|
||||
actor.rollDefenseMelee(rollData)
|
||||
}
|
||||
html.on("click", '.chat-reroll', event => {
|
||||
let messageId = this.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "darkstars-roll-data")
|
||||
rollData.reroll = true
|
||||
rollData.roll = undefined
|
||||
this.rollDarkStars(rollData)
|
||||
})
|
||||
html.on("click", '.roll-defense-ranged', event => {
|
||||
let rollId = $(event.currentTarget).data("roll-id")
|
||||
let rollData = DarkStarsUtility.getRollData(rollId)
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
if (defender && (game.user.isGM || defender.isOwner)) {
|
||||
defender.rollDefenseRanged(rollData)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -265,176 +239,97 @@ export class DarkStarsUtility {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getAimingMalus(location) {
|
||||
if (location == "arm" || location == "head") {
|
||||
return -50
|
||||
}
|
||||
if (location == "torso" || location == "leg") {
|
||||
return -30
|
||||
}
|
||||
if (location == "hand") {
|
||||
return -70
|
||||
}
|
||||
return 0
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static getAimingLocation(roll) {
|
||||
if (roll == 1) return "head"
|
||||
if (roll >= 2 && roll <= 4) return "chest"
|
||||
if (roll >= 5 && roll <= 6) return "abdomen"
|
||||
if (roll == 7) return "leftarm"
|
||||
if (roll == 8) return "rightarm"
|
||||
if (roll == 9) return "rightleg"
|
||||
if (roll == 10) return "leftleg"
|
||||
return "abdomen"
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static locationMultiplier(location) {
|
||||
if (location == "head") return 0.3
|
||||
if (location.includes("arm")) return 0.2
|
||||
if (location.includes("leg")) return 0.4
|
||||
if (location == "chest") return 0.5
|
||||
return 0.3 // Abdomen case
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollDarkStars(rollData) {
|
||||
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
|
||||
// ability/save/size => 0
|
||||
let diceFormula
|
||||
let startFormula = "0d6cs>=5[blue]"
|
||||
if (rollData.ability) {
|
||||
startFormula = String(rollData.ability.value) + "d6cs>=5[blue]"
|
||||
}
|
||||
if (rollData.save) {
|
||||
startFormula = String(rollData.save.value) + "d6cs>=5[blue]"
|
||||
}
|
||||
if (rollData.sizeDice) {
|
||||
let nb = rollData.sizeDice.nb + rollData.distanceBonusDice + this.getDiceFromCover(rollData.hasCover) + this.getDiceFromSituational(rollData.situational)
|
||||
startFormula = String(nb) + String(rollData.sizeDice.dice) + "cs>=5[blue]"
|
||||
}
|
||||
diceFormula = startFormula
|
||||
|
||||
// skill => 2
|
||||
// feat => 4
|
||||
// bonus => 6
|
||||
rollData.percentValue = 0
|
||||
if (rollData.skill) {
|
||||
let level = rollData.skill.system.level
|
||||
if (rollData.skill.system.issl2) {
|
||||
rollData.hasSLBonus = true
|
||||
level += 2
|
||||
if (level > 7) { level = 7 }
|
||||
}
|
||||
rollData.skill.system.skilldice = __skillLevel2Dice[level]
|
||||
diceFormula += "+" + String(rollData.skill.system.skilldice) + "cs>=5[black]"
|
||||
rollData.percentValue = rollData.skill.total
|
||||
}
|
||||
rollData.percentValue += rollData.bonusMalus
|
||||
rollData.diceFormula = "1d100"
|
||||
|
||||
if (rollData.skill.system.skilltype == "complex" && rollData.skill.system.level == 0) {
|
||||
rollData.complexSkillDisadvantage = true
|
||||
rollData.rollAdvantage = "roll-disadvantage"
|
||||
}
|
||||
|
||||
if (rollData.skill.system.isfeatdie) {
|
||||
rollData.hasFeatDie = true
|
||||
diceFormula += "+ 1d10cs>=5[dark-stars-purple]"
|
||||
} else {
|
||||
diceFormula += `+ 0d10cs>=5[dark-stars-purple]`
|
||||
}
|
||||
if (rollData.skill.system.bonusdice != "none") {
|
||||
rollData.hasBonusDice = rollData.skill.system.bonusdice
|
||||
diceFormula += `+ ${rollData.hasBonusDice}cs>=5[black]`
|
||||
} else {
|
||||
diceFormula += `+ 0d6cs>=5[black]`
|
||||
}
|
||||
} else {
|
||||
diceFormula += `+ 0d8cs=>5 + 0d10cs>=5 + 0d6cs>=5`
|
||||
if (rollData.isAboveEffectiveRange) {
|
||||
rollData.percentValue -= 30
|
||||
rollData.percentValue = Math.max(0, rollData.percentValue)
|
||||
}
|
||||
|
||||
// advantage => 8
|
||||
let advFormula = "+ 0d8cs>=5"
|
||||
if (rollData.advantage == "advantage1" || rollData.forceAdvantage) {
|
||||
advFormula = "+ 1d8cs>=5[dark-stars-darkgreen]"
|
||||
if (rollData.mode == "weapon") {
|
||||
rollData.locationMalus = this.getAimingMalus(rollData.weaponAiming)
|
||||
rollData.percentValue += rollData.locationMalus
|
||||
}
|
||||
if (rollData.advantage == "advantage2") {
|
||||
advFormula = "+ 2d8cs>=5[dark-stars-darkgreen]"
|
||||
}
|
||||
diceFormula += advFormula
|
||||
|
||||
// disadvantage => 10
|
||||
let disFormula = "- 0d8cs>=5"
|
||||
if (rollData.disadvantage == "disadvantage1" || rollData.forceDisadvantage) {
|
||||
disFormula = "- 1d8cs>=5[red]"
|
||||
}
|
||||
if (rollData.disadvantage == "disadvantage2") {
|
||||
disFormula = "- 2d8cs>=5[red]"
|
||||
}
|
||||
diceFormula += disFormula
|
||||
|
||||
// armor => 12
|
||||
let skillArmorPenalty = 0
|
||||
for (let armor of rollData.armors) {
|
||||
if (armor.system.equipped) {
|
||||
skillArmorPenalty += armor.system.skillpenalty
|
||||
}
|
||||
}
|
||||
if (rollData.skill && rollData.skill.system.armorpenalty && skillArmorPenalty > 0) {
|
||||
rollData.skillArmorPenalty = skillArmorPenalty
|
||||
diceFormula += `- ${skillArmorPenalty}d8cs>=5`
|
||||
} else {
|
||||
diceFormula += `- 0d8cs>=5`
|
||||
}
|
||||
|
||||
// shield => 14
|
||||
if (rollData.useshield && rollData.shield) {
|
||||
diceFormula += "+ 1" + String(rollData.shield.system.shielddie) + "cs>=5[yellow]"
|
||||
} else {
|
||||
diceFormula += " + 0d6cs>=5"
|
||||
}
|
||||
|
||||
// Performs roll
|
||||
console.log("Roll formula", diceFormula)
|
||||
console.log("Roll formula", rollData.diceFormula)
|
||||
let myRoll = rollData.roll
|
||||
if (!myRoll) { // New rolls only of no rerolls
|
||||
myRoll = new Roll(diceFormula).roll({ async: false })
|
||||
myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
}
|
||||
rollData.rollOrder = 0
|
||||
rollData.roll = myRoll
|
||||
rollData.nbSuccess = myRoll.total
|
||||
rollData.roll = duplicate(myRoll)
|
||||
rollData.diceResult = myRoll.total
|
||||
rollData.isCriticalSuccess = rollData.diceResult <= rollData.skill.derivated.value
|
||||
rollData.isCriticalFailure = rollData.diceResult == 100
|
||||
rollData.isSuccess = rollData.diceResult == 1 || rollData.diceResult <= rollData.percentValue
|
||||
rollData.isFailure = rollData.diceResult == 100 || rollData.diceResult > rollData.percentValue
|
||||
rollData.degrees = Math.floor(rollData.percentValue / 10) - Math.floor(rollData.diceResult / 10)
|
||||
rollData.damageMultiplier = rollData.isCriticalSuccess ? 2 : 1
|
||||
|
||||
if (rollData.rollAdvantage == "none" && rollData.forceRollAdvantage) {
|
||||
rollData.rollAdvantage = "roll-advantage"
|
||||
if (rollData.reroll) {
|
||||
actor.modifyRerolls(-1)
|
||||
rollData.rerolls = 0 // DIsable rerolls
|
||||
}
|
||||
if (rollData.rollAdvantage == "none" && rollData.forceRollDisadvantage) {
|
||||
rollData.rollAdvantage = "roll-disadvantage"
|
||||
}
|
||||
if (rollData.rollAdvantage != "none") {
|
||||
|
||||
rollData.rollOrder = 1
|
||||
rollData.rollType = (rollData.rollAdvantage == "roll-advantage") ? "Advantage" : "Disadvantage"
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
|
||||
rollData.rollOrder = 2
|
||||
let myRoll2 = new Roll(diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll2, game.settings.get("core", "rollMode"))
|
||||
|
||||
rollData.roll = myRoll2 // Tmp switch to display the proper results
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
rollData.roll = myRoll // Revert the tmp switch
|
||||
rollData.nbSuccess = myRoll.total
|
||||
|
||||
if (rollData.rollAdvantage == "roll-advantage") {
|
||||
if (myRoll2.total > rollData.nbSuccess) {
|
||||
hasChanged = true
|
||||
rollData.roll = myRoll2
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
}
|
||||
} else {
|
||||
if (myRoll2.total < rollData.nbSuccess) {
|
||||
rollData.roll = myRoll2
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
}
|
||||
if (rollData.mode == "weapon") {
|
||||
if (rollData.weaponAiming == "none") {
|
||||
let rollLoc = new Roll("1d10").roll({ async: false })
|
||||
rollData.weaponAiming = this.getAimingLocation(rollLoc.total)
|
||||
}
|
||||
rollData.rollOrder = 3
|
||||
// Compute
|
||||
rollData.locationMultiplier = this.locationMultiplier(rollData.weaponAiming)
|
||||
}
|
||||
rollData.nbSuccess = Math.max(0, rollData.nbSuccess)
|
||||
|
||||
rollData.isFirstRollAdvantage = false
|
||||
// Manage exp
|
||||
if (rollData.skill && rollData.skill.system.level > 0) {
|
||||
let nbSkillSuccess = rollData.roll.terms[2].total
|
||||
if (nbSkillSuccess == 0 || nbSkillSuccess == rollData.skill.system.level) {
|
||||
actor.incrementSkillExp(rollData.skill.id, 1)
|
||||
}
|
||||
}
|
||||
|
||||
this.saveRollData(rollData)
|
||||
actor.lastRoll = rollData
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat-generic-result.hbs`, rollData)
|
||||
|
||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
|
||||
console.log("Rolldata result", rollData)
|
||||
|
||||
// Message response
|
||||
this.displayDefenseMessage(rollData)
|
||||
|
||||
// Manage defense result
|
||||
this.processAttackDefense(rollData)
|
||||
msg.setFlag("world", "darkstars-roll-data", rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -528,7 +423,7 @@ export class DarkStarsUtility {
|
||||
break;
|
||||
}
|
||||
chatOptions.alias = chatOptions.alias || name;
|
||||
ChatMessage.create(chatOptions);
|
||||
return ChatMessage.create(chatOptions);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -536,7 +431,9 @@ export class DarkStarsUtility {
|
||||
let rollData = {
|
||||
rollId: randomID(16),
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
advantage: "none"
|
||||
bonusMalus: 0,
|
||||
isAboveEffectiveRange: false,
|
||||
weaponAiming: "none"
|
||||
}
|
||||
DarkStarsUtility.updateWithTarget(rollData)
|
||||
return rollData
|
||||
@@ -552,7 +449,7 @@ export class DarkStarsUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createChatWithRollMode(name, chatOptions) {
|
||||
this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions)
|
||||
return this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
{"name":"Neo Soviet Hard Shell","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Cermetal 2","locations":{"head":{"protected":true,"max":30,"value":0},"abdomen":{"protected":true,"max":30,"value":0},"chest":{"protected":true,"max":30,"value":0},"leftleg":{"protected":true,"max":30,"value":0},"rightleg":{"protected":true,"max":30,"value":0},"leftarm":{"protected":true,"max":30,"value":0},"rightarm":{"protected":false,"max":0,"value":0}},"si":2,"skillbonus":"","availability":"P","equipped":false,"bulk":0,"cost":null,"description":"<p>Blocks 12 sieverts per hour. If it receives more than 12 sieverts per hour, after use must be destroyed.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.DndZ0pCGyR8y8SJK"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672108403022,"modifiedTime":1672108686724,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"3O3MjRkrmX4HeaPY"}
|
||||
{"name":"Marine Armour","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Cermetal","locations":{"head":{"protected":true,"max":20,"value":0},"abdomen":{"protected":true,"max":20,"value":0},"chest":{"protected":true,"max":20,"value":0},"leftleg":{"protected":true,"max":16,"value":0},"rightleg":{"protected":true,"max":16,"value":0},"leftarm":{"protected":true,"max":16,"value":0},"rightarm":{"protected":true,"max":16,"value":0}},"si":1,"skillbonus":"","availability":"P","equipped":false,"bulk":0,"cost":null,"description":"<p>Marine Armour Includes comm and integral PCM, quick repair.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.gCMeXdaHyaNcfHHl"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672092447361,"modifiedTime":1672108683847,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"3YqWrfVwifB9S1Gm"}
|
||||
{"name":"Security Helmet","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Ridgy Plast","locations":{"head":{"protected":true,"max":8,"value":0},"abdomen":{"protected":false,"max":0,"value":0},"chest":{"protected":false,"max":0,"value":0},"leftleg":{"protected":false,"max":0,"value":0},"rightleg":{"protected":false,"max":0,"value":0},"leftarm":{"protected":false,"max":0,"value":0},"rightarm":{"protected":false,"max":0,"value":0}},"si":0,"skillbonus":"","availability":"C","equipped":false,"bulk":0,"cost":null,"description":"<p>A high protection security helmet</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.iFryJgG9edVdkhG6"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672091636317,"modifiedTime":1672108691719,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"5FuYpmCKk28QGqwR"}
|
||||
{"name":"Heavy Jacket","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Flexi Plast","locations":{"head":{"protected":false,"max":0,"value":0},"abdomen":{"protected":true,"max":1,"value":0},"chest":{"protected":true,"max":1,"value":0},"leftleg":{"protected":false,"max":0,"value":0},"rightleg":{"protected":false,"max":0,"value":0},"leftarm":{"protected":true,"max":1,"value":0},"rightarm":{"protected":true,"max":1,"value":0}},"si":0,"skillbonus":"","availability":"C","equipped":false,"bulk":0,"cost":null,"description":"<p>Heavy Jacket flexi plast jacket, provides some protection small arms and knives.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.Lq6vGsSbxP5B5ZRu"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672091382680,"modifiedTime":1672108681860,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"8MZj41jbtAfDh6qU"}
|
||||
{"name":"Yokohama Security Armour","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Cermetal 2","locations":{"head":{"protected":true,"max":30,"value":0},"abdomen":{"protected":true,"max":30,"value":0},"chest":{"protected":true,"max":30,"value":0},"leftleg":{"protected":true,"max":30,"value":0},"rightleg":{"protected":true,"max":30,"value":0},"leftarm":{"protected":true,"max":30,"value":0},"rightarm":{"protected":true,"max":30,"value":0}},"si":0,"skillbonus":"","availability":"R","equipped":false,"bulk":0,"cost":120000,"description":"<p>Yokohama Security Armour Blocks 14 sieverts per hour. If it receives more than 14 sieverts per hour, after use must be destroyed. </p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.UbZt9a1OXk9s5MMM"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672092872594,"modifiedTime":1672108709989,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"9MXqrbGCmj4wReOW"}
|
||||
{"name":"Tycon Arms Defender","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Cermetal 2","locations":{"head":{"protected":true,"max":30,"value":0},"abdomen":{"protected":false,"max":0,"value":0},"chest":{"protected":false,"max":0,"value":0},"leftleg":{"protected":false,"max":0,"value":0},"rightleg":{"protected":false,"max":0,"value":0},"leftarm":{"protected":false,"max":0,"value":0},"rightarm":{"protected":false,"max":0,"value":0}},"si":0,"skillbonus":"","availability":"R","equipped":false,"bulk":0,"cost":35000,"description":"<p>Tycon Arms Defender helmet Comm, PCM, self sealing, space worthy. Blocks 8 sieverts per hour. If it receives more than 8 sieverts per hour, after use must be destroyed. 2 hours of life support. </p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.VhRHbN3AtY8Pwqdo"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672092595651,"modifiedTime":1672108701910,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"G2AnAOPyeQlWghN5"}
|
||||
{"name":"Thebus Armoured Work Wear","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Flexi Plast","locations":{"head":{"protected":true,"max":5,"value":0},"abdomen":{"protected":true,"max":5,"value":0},"chest":{"protected":true,"max":5,"value":0},"leftleg":{"protected":true,"max":5,"value":0},"rightleg":{"protected":true,"max":5,"value":0},"leftarm":{"protected":true,"max":5,"value":0},"rightarm":{"protected":true,"max":5,"value":0}},"si":0,"skillbonus":"","availability":"C","equipped":false,"bulk":0,"cost":3000,"description":"<p>Thebus Armoured Work Wear provides +10% to all technical tests.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.8tfxeZcBJfxBsmIM"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672091984261,"modifiedTime":1672108699813,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"IHxpPrGqdl56dMpt"}
|
||||
{"name":"YiggRiff Hard Shell","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Cermetal 2","locations":{"head":{"protected":true,"max":17,"value":0},"abdomen":{"protected":true,"max":17,"value":0},"chest":{"protected":true,"max":17,"value":0},"leftleg":{"protected":true,"max":17,"value":0},"rightleg":{"protected":true,"max":17,"value":0},"leftarm":{"protected":true,"max":17,"value":0},"rightarm":{"protected":true,"max":17,"value":0}},"si":2,"skillbonus":"","availability":"P","equipped":false,"bulk":0,"cost":15000,"description":"<p>Blocks 8 sieverts per hour. If it receives more than 8 sieverts per hour, after use must be destroyed.</p>\n<p> </p>\n<p> </p>\n<p> </p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.qTQIYUntdBFU1KLd"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672108514253,"modifiedTime":1672108705709,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"IQ7sj2hD5yh73TRx"}
|
||||
{"name":"Skin Suit (environmentally sealed)","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Flexi Plast","locations":{"head":{"protected":true,"max":1,"value":0},"abdomen":{"protected":true,"max":1,"value":0},"chest":{"protected":true,"max":1,"value":0},"leftleg":{"protected":true,"max":1,"value":0},"rightleg":{"protected":true,"max":1,"value":0},"leftarm":{"protected":true,"max":1,"value":0},"rightarm":{"protected":true,"max":1,"value":0}},"si":0,"skillbonus":"","availability":"C","equipped":false,"bulk":0,"cost":500,"description":"<p>A thin layer of sealed armour primarly for environmental protection from toxins, low level radiation, and acid rain. Provides 10 hours of independant oxygen supply and lifesupport often worn under heavier armour. </p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.lUSc6c6D1tqSqojK"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672091705245,"modifiedTime":1672108693300,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"NJIXgxTSU3xTolyQ"}
|
||||
{"name":"Raider Armour (scrounged together)","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Flexi Plast","locations":{"head":{"protected":true,"max":3,"value":0},"abdomen":{"protected":true,"max":3,"value":0},"chest":{"protected":true,"max":3,"value":0},"leftleg":{"protected":true,"max":2,"value":0},"rightleg":{"protected":true,"max":2,"value":0},"leftarm":{"protected":true,"max":2,"value":0},"rightarm":{"protected":true,"max":2,"value":0}},"si":0,"skillbonus":"","availability":"C","equipped":false,"bulk":0,"cost":800,"description":"<p>Raider armour is scrounged and contains off cuts and scrips from armour or tires, bits of plastic or metal. Can also be purchased as a gang suit manufactured by gangs in the mega cities. </p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.ZZK3R7s7NhuxjmUP"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672091485957,"modifiedTime":1672108688229,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"OnVLyi5Tz2Of7LCP"}
|
||||
{"name":"Military Hard Shell","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Cermetal 2","locations":{"head":{"protected":true,"max":25,"value":0},"abdomen":{"protected":true,"max":25,"value":0},"chest":{"protected":true,"max":25,"value":0},"leftleg":{"protected":true,"max":25,"value":0},"rightleg":{"protected":true,"max":25,"value":0},"leftarm":{"protected":true,"max":25,"value":0},"rightarm":{"protected":true,"max":25,"value":0}},"si":2,"skillbonus":"","availability":"P","equipped":false,"bulk":0,"cost":null,"description":"<p>Military Hard Shell Blocks 10 sieverts per hour. If it receives more than 10 sieverts per hour, after use must be destroyed.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.UZ2CjvWmbIkFIj23"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672092706892,"modifiedTime":1672108685294,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"YXFJ4D4pJDoZWSw5"}
|
||||
{"name":"Yokohama Mobile Security Suit","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"","locations":{"head":{"protected":true,"max":15,"value":0},"abdomen":{"protected":true,"max":15,"value":0},"chest":{"protected":true,"max":15,"value":0},"leftleg":{"protected":true,"max":15,"value":0},"rightleg":{"protected":true,"max":15,"value":0},"leftarm":{"protected":true,"max":15,"value":0},"rightarm":{"protected":true,"max":15,"value":0}},"si":0,"skillbonus":"","availability":"C","equipped":false,"bulk":0,"cost":null,"description":"<p>Yokohama Mobile Security Suit provides +10% intimidation.<br><br></p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.dKcY7rwZY3XewoAW"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672092155187,"modifiedTime":1672108708302,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"eNEC6AHRYrwGgS6I"}
|
||||
{"name":"Ridgy Security Armour","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Ridgy Plast","locations":{"head":{"protected":true,"max":12,"value":0},"abdomen":{"protected":true,"max":12,"value":0},"chest":{"protected":true,"max":12,"value":0},"leftleg":{"protected":true,"max":12,"value":0},"rightleg":{"protected":true,"max":12,"value":0},"leftarm":{"protected":true,"max":12,"value":0},"rightarm":{"protected":true,"max":12,"value":0}},"si":0,"skillbonus":"","availability":"C","equipped":false,"bulk":0,"cost":7000,"description":"<p>Ridgy Security Armour</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.DUcIIRnBywEYtE3c"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672092084700,"modifiedTime":1672108689908,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"pOhc7ydvFhJ29gvE"}
|
||||
{"name":"Tycon Mobile Security Suit","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"Ridgy Plast","locations":{"head":{"protected":true,"max":15,"value":0},"abdomen":{"protected":true,"max":15,"value":0},"chest":{"protected":true,"max":15,"value":0},"leftleg":{"protected":true,"max":12,"value":0},"rightleg":{"protected":true,"max":12,"value":0},"leftarm":{"protected":true,"max":12,"value":0},"rightarm":{"protected":true,"max":12,"value":0}},"si":1,"skillbonus":"","availability":"C","equipped":false,"bulk":0,"cost":22000,"description":""},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.fDmEK9nfCtV3AVR2"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672092242012,"modifiedTime":1672108703462,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"pU3vlWEAWRamT58h"}
|
||||
{"name":"Skin Suit Rad Proof (environmentally sealed)","type":"armor","img":"systems/fvtt-dark-stars/images/icons/armor.webp","system":{"armortype":"","locations":{"head":{"protected":true,"max":2,"value":0},"abdomen":{"protected":true,"max":2,"value":0},"chest":{"protected":true,"max":2,"value":0},"leftleg":{"protected":true,"max":2,"value":0},"rightleg":{"protected":true,"max":2,"value":0},"leftarm":{"protected":true,"max":2,"value":0},"rightarm":{"protected":true,"max":2,"value":0}},"si":0,"skillbonus":"","availability":"C","equipped":false,"bulk":0,"cost":null,"description":"<p>Skin Suit Rad Proof (environmentally sealed)</p>\n<p>10 hours life support, often worn under armour. Blocks 5 sieverts per hour. If it receives more than 5 sieverts per hour, after use must be destroyed.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.Q156jztUqVkicxaF"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672091868386,"modifiedTime":1672108697085,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"q9JGWL4y4udYrzvD"}
|
||||
BIN
packs/armor/000005.ldb
Normal file
BIN
packs/armor/000005.ldb
Normal file
Binary file not shown.
1
packs/armor/CURRENT
Normal file
1
packs/armor/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000114
|
||||
8
packs/armor/LOG
Normal file
8
packs/armor/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/23-16:21:18.818735 7fc51b7fe6c0 Recovering log #112
|
||||
2023/10/23-16:21:18.828413 7fc51b7fe6c0 Delete type=3 #110
|
||||
2023/10/23-16:21:18.828468 7fc51b7fe6c0 Delete type=0 #112
|
||||
2023/10/23-16:38:21.235245 7fc299bff6c0 Level-0 table #117: started
|
||||
2023/10/23-16:38:21.235287 7fc299bff6c0 Level-0 table #117: 0 bytes OK
|
||||
2023/10/23-16:38:21.288685 7fc299bff6c0 Delete type=0 #115
|
||||
2023/10/23-16:38:21.402896 7fc299bff6c0 Manual compaction at level-0 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
||||
2023/10/23-16:38:21.445657 7fc299bff6c0 Manual compaction at level-1 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
||||
8
packs/armor/LOG.old
Normal file
8
packs/armor/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/23-16:10:20.406453 7fc51bfff6c0 Recovering log #108
|
||||
2023/10/23-16:10:20.455315 7fc51bfff6c0 Delete type=3 #106
|
||||
2023/10/23-16:10:20.455416 7fc51bfff6c0 Delete type=0 #108
|
||||
2023/10/23-16:21:11.331176 7fc299bff6c0 Level-0 table #113: started
|
||||
2023/10/23-16:21:11.331203 7fc299bff6c0 Level-0 table #113: 0 bytes OK
|
||||
2023/10/23-16:21:11.340134 7fc299bff6c0 Delete type=0 #111
|
||||
2023/10/23-16:21:11.358495 7fc299bff6c0 Manual compaction at level-0 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
||||
2023/10/23-16:21:11.367303 7fc299bff6c0 Manual compaction at level-1 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/armor/MANIFEST-000114
Normal file
BIN
packs/armor/MANIFEST-000114
Normal file
Binary file not shown.
1
packs/conditions/CURRENT
Normal file
1
packs/conditions/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000114
|
||||
7
packs/conditions/LOG
Normal file
7
packs/conditions/LOG
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/23-16:21:18.866233 7fc51b7fe6c0 Recovering log #112
|
||||
2023/10/23-16:21:18.876627 7fc51b7fe6c0 Delete type=3 #110
|
||||
2023/10/23-16:21:18.876726 7fc51b7fe6c0 Delete type=0 #112
|
||||
2023/10/23-16:38:21.562992 7fc299bff6c0 Level-0 table #117: started
|
||||
2023/10/23-16:38:21.563052 7fc299bff6c0 Level-0 table #117: 0 bytes OK
|
||||
2023/10/23-16:38:21.606768 7fc299bff6c0 Delete type=0 #115
|
||||
2023/10/23-16:38:21.649491 7fc299bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
7
packs/conditions/LOG.old
Normal file
7
packs/conditions/LOG.old
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/23-16:10:20.672216 7fc51bfff6c0 Recovering log #108
|
||||
2023/10/23-16:10:20.732577 7fc51bfff6c0 Delete type=3 #106
|
||||
2023/10/23-16:10:20.732730 7fc51bfff6c0 Delete type=0 #108
|
||||
2023/10/23-16:21:11.375247 7fc299bff6c0 Level-0 table #113: started
|
||||
2023/10/23-16:21:11.375301 7fc299bff6c0 Level-0 table #113: 0 bytes OK
|
||||
2023/10/23-16:21:11.384595 7fc299bff6c0 Delete type=0 #111
|
||||
2023/10/23-16:21:11.403049 7fc299bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/conditions/MANIFEST-000114
Normal file
BIN
packs/conditions/MANIFEST-000114
Normal file
Binary file not shown.
1
packs/currency/CURRENT
Normal file
1
packs/currency/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000114
|
||||
0
packs/currency/LOCK
Normal file
0
packs/currency/LOCK
Normal file
7
packs/currency/LOG
Normal file
7
packs/currency/LOG
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/23-16:21:18.878355 7fc51a7fc6c0 Recovering log #112
|
||||
2023/10/23-16:21:18.889689 7fc51a7fc6c0 Delete type=3 #110
|
||||
2023/10/23-16:21:18.889751 7fc51a7fc6c0 Delete type=0 #112
|
||||
2023/10/23-16:38:21.520237 7fc299bff6c0 Level-0 table #117: started
|
||||
2023/10/23-16:38:21.520269 7fc299bff6c0 Level-0 table #117: 0 bytes OK
|
||||
2023/10/23-16:38:21.562758 7fc299bff6c0 Delete type=0 #115
|
||||
2023/10/23-16:38:21.649457 7fc299bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
7
packs/currency/LOG.old
Normal file
7
packs/currency/LOG.old
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/23-16:10:20.739722 7fc51a7fc6c0 Recovering log #108
|
||||
2023/10/23-16:10:20.793493 7fc51a7fc6c0 Delete type=3 #106
|
||||
2023/10/23-16:10:20.793641 7fc51a7fc6c0 Delete type=0 #108
|
||||
2023/10/23-16:21:11.384741 7fc299bff6c0 Level-0 table #113: started
|
||||
2023/10/23-16:21:11.384782 7fc299bff6c0 Level-0 table #113: 0 bytes OK
|
||||
2023/10/23-16:21:11.394018 7fc299bff6c0 Delete type=0 #111
|
||||
2023/10/23-16:21:11.403106 7fc299bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/currency/MANIFEST-000114
Normal file
BIN
packs/currency/MANIFEST-000114
Normal file
Binary file not shown.
BIN
packs/cybernetics/000005.ldb
Normal file
BIN
packs/cybernetics/000005.ldb
Normal file
Binary file not shown.
0
packs/cybernetics/000044.log
Normal file
0
packs/cybernetics/000044.log
Normal file
1
packs/cybernetics/CURRENT
Normal file
1
packs/cybernetics/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000042
|
||||
0
packs/cybernetics/LOCK
Normal file
0
packs/cybernetics/LOCK
Normal file
8
packs/cybernetics/LOG
Normal file
8
packs/cybernetics/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/23-16:21:18.916086 7fc51b7fe6c0 Recovering log #40
|
||||
2023/10/23-16:21:18.926380 7fc51b7fe6c0 Delete type=3 #38
|
||||
2023/10/23-16:21:18.926444 7fc51b7fe6c0 Delete type=0 #40
|
||||
2023/10/23-16:38:21.687516 7fc299bff6c0 Level-0 table #45: started
|
||||
2023/10/23-16:38:21.687571 7fc299bff6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/10/23-16:38:21.736925 7fc299bff6c0 Delete type=0 #43
|
||||
2023/10/23-16:38:21.737272 7fc299bff6c0 Manual compaction at level-0 from '!items!0JlVJvgxQQWY8lpO' @ 72057594037927935 : 1 .. '!items!zjxV4mcELwbZU8Et' @ 0 : 0; will stop at (end)
|
||||
2023/10/23-16:38:21.737344 7fc299bff6c0 Manual compaction at level-1 from '!items!0JlVJvgxQQWY8lpO' @ 72057594037927935 : 1 .. '!items!zjxV4mcELwbZU8Et' @ 0 : 0; will stop at (end)
|
||||
8
packs/cybernetics/LOG.old
Normal file
8
packs/cybernetics/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/23-16:10:20.951307 7fc51bfff6c0 Recovering log #36
|
||||
2023/10/23-16:10:21.100428 7fc51bfff6c0 Delete type=3 #34
|
||||
2023/10/23-16:10:21.100526 7fc51bfff6c0 Delete type=0 #36
|
||||
2023/10/23-16:21:11.413951 7fc299bff6c0 Level-0 table #41: started
|
||||
2023/10/23-16:21:11.413979 7fc299bff6c0 Level-0 table #41: 0 bytes OK
|
||||
2023/10/23-16:21:11.422105 7fc299bff6c0 Delete type=0 #39
|
||||
2023/10/23-16:21:11.422327 7fc299bff6c0 Manual compaction at level-0 from '!items!0JlVJvgxQQWY8lpO' @ 72057594037927935 : 1 .. '!items!zjxV4mcELwbZU8Et' @ 0 : 0; will stop at (end)
|
||||
2023/10/23-16:21:11.422382 7fc299bff6c0 Manual compaction at level-1 from '!items!0JlVJvgxQQWY8lpO' @ 72057594037927935 : 1 .. '!items!zjxV4mcELwbZU8Et' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/cybernetics/MANIFEST-000042
Normal file
BIN
packs/cybernetics/MANIFEST-000042
Normal file
Binary file not shown.
0
packs/equipment/000116.log
Normal file
0
packs/equipment/000116.log
Normal file
1
packs/equipment/CURRENT
Normal file
1
packs/equipment/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000114
|
||||
0
packs/equipment/LOCK
Normal file
0
packs/equipment/LOCK
Normal file
7
packs/equipment/LOG
Normal file
7
packs/equipment/LOG
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/23-16:21:18.830319 7fc51a7fc6c0 Recovering log #112
|
||||
2023/10/23-16:21:18.840025 7fc51a7fc6c0 Delete type=3 #110
|
||||
2023/10/23-16:21:18.840086 7fc51a7fc6c0 Delete type=0 #112
|
||||
2023/10/23-16:38:21.349441 7fc299bff6c0 Level-0 table #117: started
|
||||
2023/10/23-16:38:21.349501 7fc299bff6c0 Level-0 table #117: 0 bytes OK
|
||||
2023/10/23-16:38:21.402714 7fc299bff6c0 Delete type=0 #115
|
||||
2023/10/23-16:38:21.445484 7fc299bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
7
packs/equipment/LOG.old
Normal file
7
packs/equipment/LOG.old
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/23-16:10:20.466941 7fc51a7fc6c0 Recovering log #108
|
||||
2023/10/23-16:10:20.525312 7fc51a7fc6c0 Delete type=3 #106
|
||||
2023/10/23-16:10:20.525371 7fc51a7fc6c0 Delete type=0 #108
|
||||
2023/10/23-16:21:11.349899 7fc299bff6c0 Level-0 table #113: started
|
||||
2023/10/23-16:21:11.349986 7fc299bff6c0 Level-0 table #113: 0 bytes OK
|
||||
2023/10/23-16:21:11.358380 7fc299bff6c0 Delete type=0 #111
|
||||
2023/10/23-16:21:11.367287 7fc299bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/equipment/MANIFEST-000114
Normal file
BIN
packs/equipment/MANIFEST-000114
Normal file
Binary file not shown.
0
packs/genetics/000004.log
Normal file
0
packs/genetics/000004.log
Normal file
1
packs/genetics/CURRENT
Normal file
1
packs/genetics/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000002
|
||||
0
packs/genetics/LOCK
Normal file
0
packs/genetics/LOCK
Normal file
5
packs/genetics/LOG
Normal file
5
packs/genetics/LOG
Normal file
@@ -0,0 +1,5 @@
|
||||
2023/10/19-11:34:56.763463 7f8105ffb6c0 Delete type=3 #1
|
||||
2023/10/19-11:42:11.816999 7f7e677006c0 Level-0 table #5: started
|
||||
2023/10/19-11:42:11.817033 7f7e677006c0 Level-0 table #5: 0 bytes OK
|
||||
2023/10/19-11:42:11.824095 7f7e677006c0 Delete type=0 #3
|
||||
2023/10/19-11:42:11.824348 7f7e677006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/genetics/MANIFEST-000002
Normal file
BIN
packs/genetics/MANIFEST-000002
Normal file
Binary file not shown.
BIN
packs/perks/000005.ldb
Normal file
BIN
packs/perks/000005.ldb
Normal file
Binary file not shown.
0
packs/perks/000116.log
Normal file
0
packs/perks/000116.log
Normal file
1
packs/perks/CURRENT
Normal file
1
packs/perks/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000114
|
||||
0
packs/perks/LOCK
Normal file
0
packs/perks/LOCK
Normal file
8
packs/perks/LOG
Normal file
8
packs/perks/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/23-16:21:18.903797 7fc51affd6c0 Recovering log #112
|
||||
2023/10/23-16:21:18.914282 7fc51affd6c0 Delete type=3 #110
|
||||
2023/10/23-16:21:18.914341 7fc51affd6c0 Delete type=0 #112
|
||||
2023/10/23-16:38:21.649612 7fc299bff6c0 Level-0 table #117: started
|
||||
2023/10/23-16:38:21.649693 7fc299bff6c0 Level-0 table #117: 0 bytes OK
|
||||
2023/10/23-16:38:21.687274 7fc299bff6c0 Delete type=0 #115
|
||||
2023/10/23-16:38:21.737212 7fc299bff6c0 Manual compaction at level-0 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
||||
2023/10/23-16:38:21.737295 7fc299bff6c0 Manual compaction at level-1 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
||||
8
packs/perks/LOG.old
Normal file
8
packs/perks/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/23-16:10:20.851365 7fc51affd6c0 Recovering log #108
|
||||
2023/10/23-16:10:20.940844 7fc51affd6c0 Delete type=3 #106
|
||||
2023/10/23-16:10:20.940918 7fc51affd6c0 Delete type=0 #108
|
||||
2023/10/23-16:21:11.403299 7fc299bff6c0 Level-0 table #113: started
|
||||
2023/10/23-16:21:11.403360 7fc299bff6c0 Level-0 table #113: 0 bytes OK
|
||||
2023/10/23-16:21:11.413808 7fc299bff6c0 Delete type=0 #111
|
||||
2023/10/23-16:21:11.422303 7fc299bff6c0 Manual compaction at level-0 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
||||
2023/10/23-16:21:11.422358 7fc299bff6c0 Manual compaction at level-1 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/perks/MANIFEST-000114
Normal file
BIN
packs/perks/MANIFEST-000114
Normal file
Binary file not shown.
0
packs/shields/000116.log
Normal file
0
packs/shields/000116.log
Normal file
1
packs/shields/CURRENT
Normal file
1
packs/shields/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000114
|
||||
0
packs/shields/LOCK
Normal file
0
packs/shields/LOCK
Normal file
7
packs/shields/LOG
Normal file
7
packs/shields/LOG
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/23-16:21:18.841422 7fc51bfff6c0 Recovering log #112
|
||||
2023/10/23-16:21:18.851392 7fc51bfff6c0 Delete type=3 #110
|
||||
2023/10/23-16:21:18.851494 7fc51bfff6c0 Delete type=0 #112
|
||||
2023/10/23-16:38:21.402937 7fc299bff6c0 Level-0 table #117: started
|
||||
2023/10/23-16:38:21.402989 7fc299bff6c0 Level-0 table #117: 0 bytes OK
|
||||
2023/10/23-16:38:21.445303 7fc299bff6c0 Delete type=0 #115
|
||||
2023/10/23-16:38:21.520208 7fc299bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
7
packs/shields/LOG.old
Normal file
7
packs/shields/LOG.old
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/23-16:10:20.532396 7fc51b7fe6c0 Recovering log #108
|
||||
2023/10/23-16:10:20.583047 7fc51b7fe6c0 Delete type=3 #106
|
||||
2023/10/23-16:10:20.583182 7fc51b7fe6c0 Delete type=0 #108
|
||||
2023/10/23-16:21:11.358565 7fc299bff6c0 Level-0 table #113: started
|
||||
2023/10/23-16:21:11.358632 7fc299bff6c0 Level-0 table #113: 0 bytes OK
|
||||
2023/10/23-16:21:11.367191 7fc299bff6c0 Delete type=0 #111
|
||||
2023/10/23-16:21:11.375219 7fc299bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/shields/MANIFEST-000114
Normal file
BIN
packs/shields/MANIFEST-000114
Normal file
Binary file not shown.
@@ -1,23 +0,0 @@
|
||||
{"name":"Vehicle Weapons","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"csb","bonus":0,"used":false,"description":"<p>The character is skilled in the use of indirect and direct artillery including missiles, howitzers<br>and auto cannons, any vehicle weapons.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672086342604,"modifiedTime":1672086575155,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"5YJWuGaagmi1dgbv","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Engineering (Name of Field)","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"asb","bonus":0,"used":false,"description":"<p>The character has a university-level education in an Engineering skill chosen from the list<br>below. The character can design and direct construction in the field. For example, Sam has Engineering (Computer Systems) 60%. He decides to make a supercomputer out of several<br>desktop PCs – he can do this. Furthermore, he can direct people who can help him.</p>\n<p><br>Civil, Electrical and Power, Computer Systems, Naval and Life Support, Mechanical, Propulsion Systems, Architecture, Robotics & Mechatronics, Genetics, Cybernetic Design, Nanomachines, Weapons Systems, Personal Weapons and Armour Design.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085548127,"modifiedTime":1672086575152,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"9a1riW3iSabgr4sH","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Basic Ground Navigation","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"asb","bonus":0,"used":false,"description":"<p>The character can navigate by map and compass, by land or sea. Navigation can be by the sun, stars or compass.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085470278,"modifiedTime":1672086575152,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"ESvBNzSQ6UVa2Hdj","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Persuasion & Manipulation","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"ssb","bonus":0,"used":false,"description":"<p>The character can persuade others to do what he or she wants or to provide information. This<br>is non-violent persuasion. The game master may oppose the skill check using the NPC persuasion<br>skill. Role-playing well may provide a bonus to the use of this skill; however, not roleplaying may attract a penalty. This skill must be carefully refereed by the game master. Typical Persuasion checks may be used to ask someone for information or help in some way. It is not possible to persuade someone to knowingly harm themselves; however, it could be used to trick a person into doing something against their best interests. This skill is not mind control; it is careful persuasion. When a character chooses to manipulate a person, it is similar to persuasion; however, rather than truthful reasoning, manipulation is deceitful.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085115239,"modifiedTime":1672086575153,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"EZV7SCG4WbkervUv","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Projectile Weapons","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"csb","bonus":0,"used":false,"description":"<p>The character is trained in the use and maintenance of projectile weapons like rifles, pistols and dart launchers. The character is trained in the use and maintenance of rail weapons like rail rifles, rail SMGs and rail assault weapons.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672086276980,"modifiedTime":1672086575154,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"I8HWWCwhF7R19u6x","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Speak & Read (Language)","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"ssb","bonus":0,"used":false,"description":"<p>Speak Language is used whenever a character is not very good at the dialect he or she is trying to communicate in. If the language skills of both participants total 50%, then communication is assured, and no Language roll is necessary.</p>\n<p>Reading a language allows the character to read and understand the written word. Characters may need to roll at the GM’s suggestion on their Speak and Read Language skill. Otherwise, understanding is assured. The following list of languages and scripts can be used, although there are of course more languages.<br><br>Spoken and Written Languages Examples<br>English, Spanish, Portuguese, Mandarin, Hindi, Chinese, German, Russian, Italian, Korean, Japanese.</p>"},"effects":[],"flags":{"core":{"sheetClass":"fvtt-dark-stars.DarkStarsItemSheet"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671852339032,"modifiedTime":1672086575154,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"IW0nw7bk83QQItjF","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Stealth","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"psb","bonus":0,"used":false,"description":"<p>The Stealth skill involves hiding, sneaking and generally moving without being detected by sound or sight. A roll is always required for this skill whenever it is attempted.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085657806,"modifiedTime":1672086575154,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"JB8ItSbIQ4nnQk9U","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Heavy Weapons","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"csb","bonus":0,"used":false,"description":"<p>The character is skilled in the use of RPGs, grenade launchers and machine guns, and artillery pieces.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672086320348,"modifiedTime":1672086575154,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"JGtOg9mUP0pZievc","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Science (Name of Science)","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"asb","bonus":0,"used":false,"description":"<p>The character has a university-level education in a Science skill chosen from the list below.<br>Science skills are theoretical in nature. A Science skill can be used for an Engineering skill at half the value.</p>\n<p><br>Mathematics, Computer Science, Economics, Physics, Biology, Chemistry, Biochemistry, Medicine, Genetics, Archaeology, Astronomy, Geology, Psychology, Cybernetics, Pharmacology.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085504870,"modifiedTime":1672086575153,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"O6Gxntfqt0hGXvYW","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Energy Weapons","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"csb","bonus":0,"used":false,"description":"<p>The character is trained in the use and maintenance of personal lasers, ion guns, neural stunners and plasma weapons.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672086249716,"modifiedTime":1672086575154,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"OB4khIPwWYlRXt6t","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Professional Skill (Name of Field/Role)","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"asb","bonus":0,"used":false,"description":"<p>A variety of professions, usually learned through apprenticeship. Professions are usually<br>skills that involve acquiring the resource or crafting items from resources.<br><br>Includes <br>Medicine, Surgery*, Pharmaceuticals, Psychiatry+, Horticulture, Animal Husbandry, Forensic Examiner, Politics, Computer Security, Communications Specialist, Business, Military Tactics, Logistics, Manufacturing, Robot Brains, Armourer. <br><br>* requires Medicine + requires Psychology</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085414469,"modifiedTime":1672086575153,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"Sf4375GLeaEdXjz0","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Empathy","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"ssb","bonus":0,"used":false,"description":"<p>The character can perceive other people’s motives and motivations. This skill is useful when gathering information about likely actions and motivational options.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085187959,"modifiedTime":1672086575152,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"TAgwGCqdB61eBDJ3","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Recon","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"psb","bonus":0,"used":false,"description":"<p>Recon is basically observation. Characters have a basic level in this skill, and trained characters should have a higher rating in the skill. This skill is used whenever a character wishes to find something out or whenever the GM wishes to roll to see if the character spots or hears something.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085691670,"modifiedTime":1672086575153,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"Wiy2P34tbpFLpK7e","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Pilot (Vehicle Type)","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"msb","bonus":0,"used":false,"description":"<p>The character is skilled in the use of vehicles. They can operate and perform basic maintenance and repairs. Examples of vehicles are wheeled vehicle, watercraft, spaceship, airplane, tracked vehicle, gravcraft, power armour and drones.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672086377747,"modifiedTime":1672086575155,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"XmyIaZ07ngWvnIAD","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Social & Style","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"ssb","bonus":0,"used":false,"description":"<p>This skill is designed to enable a character to know what is fashionable in any given social<br>group. It also enables the character to behave with the correct etiquette for the social group<br>they are in at the time. This skill is used to determine advance actions. This is not a pursued<br>skill, however, if a role is played well it can provide a bonus in such situations.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671852578894,"modifiedTime":1672086575153,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"dDzdnXRcwZRQZ5RG","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Drive Ground Car and Ride Motorcycle","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"msb","bonus":0,"used":false,"description":"<p>The character can drive cars and motorcycles. This is not a professional level of driving, just<br>everyday driving.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672086514348,"modifiedTime":1672086575155,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"gQ7bFMrV47R02z3i","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Melee Combat","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"csb","bonus":0,"used":false,"description":"<p>The character is skilled at using riot shields, melee weapons and bladed weapons. If the game master chooses, this can be broken up into multiple skills; however, for simplicity we refer to this skill as melee combat.</p>\n<p>The character can use shields to block attacks. The character is skilled at knife and sword fighting. The character is also skilled in the use of mass weapons such as axes, two-handed swords, maces, hammers, batons, truncheons, clubs and polearms. Styles are: Kendo, Single Stick, Fencing etc.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672086188534,"modifiedTime":1672086575154,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"hdOSBK7SwELJMzZb","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Demolitions","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"msb","bonus":0,"used":false,"description":"<p>The character is skilled in the art of laying explosives, creatively setting fuses and generally blowing stuff up.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672086436924,"modifiedTime":1672086575155,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"kNVEnbgz68l5H6F7","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Basic Education","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"asb","bonus":0,"used":false,"description":"<p>This skill includes a variety of catch-all skills from simple mathematics to geography, history, literacy and general knowhow. This skill is also special in that it starts as the character’s Education x 2, and then points may be spent to increase it. All characters start with this skill just as they have their native language. Spending points on this skill means the character has more depth to their knowledge. More educated characters know more about a variety of subjects. Game masters must decide if this skill can be used for any given task.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085276422,"modifiedTime":1672086575152,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"lCcvKGDWbmNqZmM4","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Unarmed Combat","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"csb","bonus":0,"used":false,"description":"<p>The character is skilled in the use of unarmed combat. They are practised and professional, and know how to use their body, fists and feet to devastating effect.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085777245,"modifiedTime":1672086575154,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"ouxLcHbuWWKhJQg9","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Athletics","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"psb","bonus":0,"used":false,"description":"<p>The Athletics skill is used for any form of physical activity. Jumping, dodging, climbing, abseiling, running, throwing, swimming and others can be chosen. This skill is very broad and represents the education characters received in school and while they were growing up. Rolls are required at the GM’s discretion. Athletics can be substituted for Unarmed Combat, but at half value.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085605799,"modifiedTime":1672086575152,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"wPq70BdgDHP6H4lD","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"Graft (Type)","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"ssb","bonus":0,"used":false,"description":"<p>Graft refers to all forms of illegal activities. This skill includes bribery, streetwise, gambling,<br>racketeering, sales, bureaucracy, fencing and pimping.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672085235048,"modifiedTime":1672086575153,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"xVquq7UFdm1S4FdJ","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
{"name":"First Aid","type":"skill","img":"systems/fvtt-dark-stars/images/icons/skill.webp","system":{"base":"msb","bonus":0,"used":false,"description":"<p>The character can perform basic first aid, stop bleeding and perform CPR. This skill enables the character to dress wounds and apply bandages.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1672086482524,"modifiedTime":1672086575155,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"_id":"yo7mOkfbbOogx8na","folder":null,"sort":0,"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3}}
|
||||
BIN
packs/skills/000005.ldb
Normal file
BIN
packs/skills/000005.ldb
Normal file
Binary file not shown.
0
packs/skills/000116.log
Normal file
0
packs/skills/000116.log
Normal file
1
packs/skills/CURRENT
Normal file
1
packs/skills/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000114
|
||||
0
packs/skills/LOCK
Normal file
0
packs/skills/LOCK
Normal file
8
packs/skills/LOG
Normal file
8
packs/skills/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/23-16:21:18.891042 7fc51bfff6c0 Recovering log #112
|
||||
2023/10/23-16:21:18.901616 7fc51bfff6c0 Delete type=3 #110
|
||||
2023/10/23-16:21:18.901698 7fc51bfff6c0 Delete type=0 #112
|
||||
2023/10/23-16:38:21.606929 7fc299bff6c0 Level-0 table #117: started
|
||||
2023/10/23-16:38:21.606959 7fc299bff6c0 Level-0 table #117: 0 bytes OK
|
||||
2023/10/23-16:38:21.649170 7fc299bff6c0 Delete type=0 #115
|
||||
2023/10/23-16:38:21.649544 7fc299bff6c0 Manual compaction at level-0 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
||||
2023/10/23-16:38:21.737175 7fc299bff6c0 Manual compaction at level-1 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
||||
8
packs/skills/LOG.old
Normal file
8
packs/skills/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/23-16:10:20.795855 7fc51b7fe6c0 Recovering log #108
|
||||
2023/10/23-16:10:20.847003 7fc51b7fe6c0 Delete type=3 #106
|
||||
2023/10/23-16:10:20.847142 7fc51b7fe6c0 Delete type=0 #108
|
||||
2023/10/23-16:21:11.394255 7fc299bff6c0 Level-0 table #113: started
|
||||
2023/10/23-16:21:11.394305 7fc299bff6c0 Level-0 table #113: 0 bytes OK
|
||||
2023/10/23-16:21:11.402795 7fc299bff6c0 Delete type=0 #111
|
||||
2023/10/23-16:21:11.403156 7fc299bff6c0 Manual compaction at level-0 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
||||
2023/10/23-16:21:11.413937 7fc299bff6c0 Manual compaction at level-1 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/skills/MANIFEST-000114
Normal file
BIN
packs/skills/MANIFEST-000114
Normal file
Binary file not shown.
BIN
packs/weapons/000018.ldb
Normal file
BIN
packs/weapons/000018.ldb
Normal file
Binary file not shown.
0
packs/weapons/000117.log
Normal file
0
packs/weapons/000117.log
Normal file
1
packs/weapons/CURRENT
Normal file
1
packs/weapons/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000115
|
||||
0
packs/weapons/LOCK
Normal file
0
packs/weapons/LOCK
Normal file
8
packs/weapons/LOG
Normal file
8
packs/weapons/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/23-16:21:18.853136 7fc51affd6c0 Recovering log #113
|
||||
2023/10/23-16:21:18.864323 7fc51affd6c0 Delete type=3 #111
|
||||
2023/10/23-16:21:18.864379 7fc51affd6c0 Delete type=0 #113
|
||||
2023/10/23-16:38:21.445678 7fc299bff6c0 Level-0 table #118: started
|
||||
2023/10/23-16:38:21.445739 7fc299bff6c0 Level-0 table #118: 0 bytes OK
|
||||
2023/10/23-16:38:21.519996 7fc299bff6c0 Delete type=0 #116
|
||||
2023/10/23-16:38:21.606911 7fc299bff6c0 Manual compaction at level-0 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
||||
2023/10/23-16:38:21.649518 7fc299bff6c0 Manual compaction at level-1 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
||||
8
packs/weapons/LOG.old
Normal file
8
packs/weapons/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/23-16:10:20.585116 7fc51affd6c0 Recovering log #109
|
||||
2023/10/23-16:10:20.661600 7fc51affd6c0 Delete type=3 #107
|
||||
2023/10/23-16:10:20.661671 7fc51affd6c0 Delete type=0 #109
|
||||
2023/10/23-16:21:11.367314 7fc299bff6c0 Level-0 table #114: started
|
||||
2023/10/23-16:21:11.367340 7fc299bff6c0 Level-0 table #114: 0 bytes OK
|
||||
2023/10/23-16:21:11.374984 7fc299bff6c0 Delete type=0 #112
|
||||
2023/10/23-16:21:11.394227 7fc299bff6c0 Manual compaction at level-0 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
||||
2023/10/23-16:21:11.403131 7fc299bff6c0 Manual compaction at level-1 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/weapons/MANIFEST-000115
Normal file
BIN
packs/weapons/MANIFEST-000115
Normal file
Binary file not shown.
@@ -238,14 +238,15 @@ table {border: 1px solid #7a7971;}
|
||||
|
||||
.fvtt-dark-stars .sheet-header .profile-img {
|
||||
-webkit-box-flex: 0;
|
||||
-ms-flex: 0 0 128px;
|
||||
flex: 0 0 128px;
|
||||
width: 196px;
|
||||
-ms-flex: 0 0 96px;
|
||||
flex: 0 0 96px;
|
||||
width: 96px;
|
||||
height: auto;
|
||||
max-height:260px;
|
||||
max-height:96px;
|
||||
margin-top: 0px;
|
||||
margin-right: 10px;
|
||||
object-fit: cover;
|
||||
border-width: 0px;
|
||||
object-position: 50% 0;
|
||||
}
|
||||
|
||||
@@ -569,7 +570,7 @@ ul, li {
|
||||
}
|
||||
.list-item-shadow {
|
||||
background:rgba(87, 60, 32, 0.35);
|
||||
flex-grow: 0;
|
||||
/*flex-grow: 0;*/
|
||||
flex-wrap: nowrap;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
@@ -1144,23 +1145,6 @@ ul, li {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.river-button {
|
||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||
background-color: #7d5d3b00;
|
||||
border-radius: 3px;
|
||||
border: 2px ridge #846109;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
color: #ffffff;
|
||||
font-size: 0.8rem;
|
||||
padding: 2px 4px 0px 4px;
|
||||
text-decoration: none;
|
||||
text-shadow: 0px 1px 0px #4d3534;
|
||||
position: relative;
|
||||
margin:4px;
|
||||
}
|
||||
|
||||
.chat-card-button {
|
||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||
@@ -1350,9 +1334,6 @@ Focus FOC: #ff0084
|
||||
.color-class-foc {
|
||||
background-color: #ff0084;
|
||||
}
|
||||
.color-class-common {
|
||||
background: rgba(185, 183, 40, 0.45);
|
||||
}
|
||||
.status-small-label {
|
||||
font-size: 0.65rem;
|
||||
}
|
||||
@@ -1488,6 +1469,12 @@ Focus FOC: #ff0084
|
||||
max-width: 14rem;
|
||||
min-width: 14rem;
|
||||
}
|
||||
.item-field-label-vlong2 {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 22rem;
|
||||
min-width: 22rem;
|
||||
}
|
||||
.item-control-end {
|
||||
align-self: flex-end;
|
||||
}
|
||||
@@ -1519,7 +1506,19 @@ Focus FOC: #ff0084
|
||||
margin-bottom: 1rem;
|
||||
background-color: #403f3e40;
|
||||
}
|
||||
|
||||
.stat-column-size {
|
||||
max-width: 12rem;
|
||||
min-width: 12rem;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.derivated-column-size {
|
||||
max-width: 14rem;
|
||||
min-width: 14rem;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.hplocation-column {
|
||||
margin-left: 4px;
|
||||
}
|
||||
.dice-pool-image {
|
||||
border: 0;
|
||||
margin-left: 4px;
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
{{!-- Carac Tab --}}
|
||||
<div class="tab items" data-group="primary" data-tab="statistics">
|
||||
|
||||
<div class="grid grid-2col">
|
||||
<div class="">
|
||||
<div class="flexrow">
|
||||
<span class="generic-label packed-left"><a class="generic-pool-roll"><button class="chat-card-button">Dice Pool</button></a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="">
|
||||
|
||||
<ul>
|
||||
<li class="item flexrow list-item" data-key="momentum">
|
||||
<span class="stat-label flexrow" name="momentum"> <h4>{{data.momentum.label}}</h4> </span>
|
||||
<input type="text" class="padd-right" name="data.momentum.value" value="{{data.momentum.value}}" data-dtype="Number"/>
|
||||
<input type="text" class="padd-right" name="data.momentum.max" value="{{data.momentum.max}}" data-dtype="Number"/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<ul>
|
||||
<li class="item flexrow list-item" data-key="mr">
|
||||
<span class="stat-label flexrow" name="mr">
|
||||
<a class="roll-mr" data-stat-key="{{mr}}"><h4>{{data.mr.label}}</h4></a>
|
||||
</span>
|
||||
<select class="carac-base flexrow" type="text" name="data.mr.value" value="{{data.mr.value}}"
|
||||
data-dtype="Number" >
|
||||
{{#select data.mr.value}}
|
||||
{{{@root.optionsDiceList}}}
|
||||
{{/select}}
|
||||
</select>
|
||||
<input type="text" class="padd-right input-numeric-short" name="data.mr.mod" value="{{data.mr.mod}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<li class="item flexrow list-item" data-attr-key="{{key}}">
|
||||
{{#each data.secondary as |stat2 key|}}
|
||||
{{#if stat2.iscombat}}
|
||||
<span class="stat-label" name="{{key}}">
|
||||
<h4>{{stat2.label}} : </h4>
|
||||
</span>
|
||||
<span class="small-label padd-right packed-left">Cur</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.secondary.{{key}}.value" value="{{stat2.value}}" data-dtype="Number"/>
|
||||
<span class="small-label padd-right packed-left"> Max</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.secondary.{{key}}.max" value="{{stat2.max}}" data-dtype="Number"/>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</li>
|
||||
<li class="item flexrow list-item" data-key="momentum">
|
||||
<span class="stat-label flexrow" name="momentum"><h4>{{data.momentum.label}}:</h4></span>
|
||||
<span class="small-label padd-right packed-left">Cur</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.momentum.value" value="{{data.momentum.value}}" data-dtype="Number"/>
|
||||
<span class="small-label padd-right packed-left"> Max</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.momentum.max" value="{{data.momentum.max}}" data-dtype="Number"/>
|
||||
</li>
|
||||
41
system.json
41
system.json
@@ -25,7 +25,7 @@
|
||||
"type": "Item",
|
||||
"label": "Armors",
|
||||
"name": "armor",
|
||||
"path": "packs/armor.db",
|
||||
"path": "packs/armor",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@@ -34,7 +34,7 @@
|
||||
"type": "Item",
|
||||
"label": "Equipments",
|
||||
"name": "equipment",
|
||||
"path": "packs/equipment.db",
|
||||
"path": "packs/equipment",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@@ -43,7 +43,7 @@
|
||||
"type": "Item",
|
||||
"label": "Shields",
|
||||
"name": "shields",
|
||||
"path": "packs/shields.db",
|
||||
"path": "packs/shields",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@@ -52,7 +52,7 @@
|
||||
"type": "Item",
|
||||
"label": "Weapons",
|
||||
"name": "weapons",
|
||||
"path": "packs/weapons.db",
|
||||
"path": "packs/weapons",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@@ -61,7 +61,7 @@
|
||||
"type": "Item",
|
||||
"label": "Conditions",
|
||||
"name": "conditions",
|
||||
"path": "packs/conditions.db",
|
||||
"path": "packs/conditions",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@@ -70,7 +70,7 @@
|
||||
"type": "Item",
|
||||
"label": "Currency",
|
||||
"name": "currency",
|
||||
"path": "packs/currency.db",
|
||||
"path": "packs/currency",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@@ -79,7 +79,25 @@
|
||||
"type": "Item",
|
||||
"label": "Skills",
|
||||
"name": "skills",
|
||||
"path": "packs/skills.db",
|
||||
"path": "packs/skills",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Perks",
|
||||
"name": "perks",
|
||||
"path": "packs/perks",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Cyber&Genetics",
|
||||
"name": "cybernetics",
|
||||
"path": "packs/cybernetics",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@@ -91,15 +109,14 @@
|
||||
"styles": [
|
||||
"styles/simple.css"
|
||||
],
|
||||
"version": "10.0.6",
|
||||
"version": "11.0.10",
|
||||
"compatibility": {
|
||||
"minimum": "10",
|
||||
"verified": "10",
|
||||
"maximum": "10"
|
||||
"minimum": "11",
|
||||
"verified": "11"
|
||||
},
|
||||
"title": "Dark Stars RPG",
|
||||
"manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-dark-stars/raw/branch/main/system.json",
|
||||
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-dark-stars/archive/fvtt-dark-stars-v10.0.6.zip",
|
||||
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-dark-stars/archive/fvtt-dark-stars-v11.0.10.zip",
|
||||
"url": "https://www.uberwald.me/gitea/uberwald/",
|
||||
"background": "images/ui/dark_stars_welcome_page.webp",
|
||||
"id": "fvtt-dark-stars"
|
||||
|
||||
197
template.json
197
template.json
@@ -46,105 +46,117 @@
|
||||
"str": {
|
||||
"label": "Strength",
|
||||
"abbrev": "str",
|
||||
"col": 1,
|
||||
"value": 0,
|
||||
"bonusname": "CSB",
|
||||
"base": 0,
|
||||
"bonus": 0
|
||||
"value": 0
|
||||
},
|
||||
"dex": {
|
||||
"label": "Dexterity",
|
||||
"abbrev": "dex",
|
||||
"col": 1,
|
||||
"value": 0,
|
||||
"bonusname": "ASB",
|
||||
"base": 0,
|
||||
"bonus": 0
|
||||
"value": 0
|
||||
},
|
||||
"con": {
|
||||
"label": "Constitution",
|
||||
"abbrev": "con",
|
||||
"col": 1,
|
||||
"value": 0,
|
||||
"bonusname": "SSB",
|
||||
"base": 0,
|
||||
"bonus": 0
|
||||
"value": 0
|
||||
},
|
||||
"siz": {
|
||||
"label": "Size",
|
||||
"abbrev": "siz",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"bonusname": "MSB",
|
||||
"base": 0,
|
||||
"bonus": 0
|
||||
"value": 0
|
||||
},
|
||||
"att": {
|
||||
"label": "Attractiveness",
|
||||
"abbrev": "att",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"bonusname": "PSB",
|
||||
"base": 0,
|
||||
"bonus": 0
|
||||
"value": 0
|
||||
},
|
||||
"int": {
|
||||
"label": "Intelligence",
|
||||
"abbrev": "int",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"derivname": "EGO",
|
||||
"derivvalue": 0,
|
||||
"base": 0
|
||||
"value": 0
|
||||
},
|
||||
"edu": {
|
||||
"label": "Education",
|
||||
"abbrev": "edu",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"derivname": "HUP",
|
||||
"base": 0,
|
||||
"derivvalue": 0
|
||||
"value": 0
|
||||
},
|
||||
"cha": {
|
||||
"label": "Charisma",
|
||||
"abbrev": "cha",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"derivname": "SS",
|
||||
"base": 0,
|
||||
"derivvalue": 0
|
||||
"value": 0
|
||||
},
|
||||
"emp": {
|
||||
"label": "Empathy",
|
||||
"abbrev": "edu",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"derivname": "MCDB",
|
||||
"base": 0,
|
||||
"derivvalue": 0
|
||||
"abbrev": "emp",
|
||||
"value": 0
|
||||
},
|
||||
"sel": {
|
||||
"label": "Self-Control",
|
||||
"abbrev": "sel",
|
||||
"col": 2,
|
||||
"value": 0
|
||||
}
|
||||
},
|
||||
"derivated": {
|
||||
"csb": {
|
||||
"label": "CSB",
|
||||
"value": 0,
|
||||
"derivname": "SI",
|
||||
"base": 0,
|
||||
"derivvalue": 0
|
||||
"bonus": 0
|
||||
},
|
||||
"asb": {
|
||||
"label": "ASB",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"ssb": {
|
||||
"label": "SSB",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"msb": {
|
||||
"label": "MSB",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"psb": {
|
||||
"label": "PSB",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"ego": {
|
||||
"label": "EGO",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"hup": {
|
||||
"label": "HUP",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"ss": {
|
||||
"label": "SS",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"mcdb": {
|
||||
"label": "MCDB",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"si": {
|
||||
"label": "SI",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
}
|
||||
},
|
||||
"secondary": {
|
||||
"hp": {
|
||||
"label": "Hitpoint",
|
||||
"label": "Hitpoints",
|
||||
"abbrev": "hp",
|
||||
"value": 0,
|
||||
"bonus": 0,
|
||||
"max": 0
|
||||
},
|
||||
"lp": {
|
||||
"label": "Hitpoint",
|
||||
"abbrev": "lp",
|
||||
"fp": {
|
||||
"label": "Fatigue Points",
|
||||
"abbrev": "fp",
|
||||
"value": 0,
|
||||
"bonus": 0,
|
||||
"max": 0
|
||||
@@ -152,6 +164,7 @@
|
||||
"bulk": {
|
||||
"label": "Bulk",
|
||||
"abbrev": "bulk",
|
||||
"maxeditable": true,
|
||||
"value": 0,
|
||||
"bonus": 0,
|
||||
"max": 0
|
||||
@@ -160,6 +173,7 @@
|
||||
"hitlocations": {
|
||||
"head": {
|
||||
"label": "Head",
|
||||
"ratio": 0.3,
|
||||
"dice": [
|
||||
1
|
||||
],
|
||||
@@ -169,6 +183,7 @@
|
||||
},
|
||||
"chest": {
|
||||
"label": "Chest",
|
||||
"ratio": 0.5,
|
||||
"dice": [
|
||||
2,
|
||||
4
|
||||
@@ -179,6 +194,7 @@
|
||||
},
|
||||
"abdomen": {
|
||||
"label": "Abdomen",
|
||||
"ratio": 0.3,
|
||||
"dice": [
|
||||
5,
|
||||
6
|
||||
@@ -189,6 +205,7 @@
|
||||
},
|
||||
"leftarm": {
|
||||
"label": "Left Arm",
|
||||
"ratio": 0.2,
|
||||
"dice": [
|
||||
7
|
||||
],
|
||||
@@ -198,6 +215,7 @@
|
||||
},
|
||||
"rightarm": {
|
||||
"label": "Right Arm",
|
||||
"ratio": 0.2,
|
||||
"dice": [
|
||||
8
|
||||
],
|
||||
@@ -207,6 +225,7 @@
|
||||
},
|
||||
"rightleg": {
|
||||
"label": "Right Leg",
|
||||
"ratio": 0.4,
|
||||
"dice": [
|
||||
9
|
||||
],
|
||||
@@ -216,6 +235,7 @@
|
||||
},
|
||||
"leftleg": {
|
||||
"label": "Left Leg",
|
||||
"ratio": 0.4,
|
||||
"dice": [
|
||||
10
|
||||
],
|
||||
@@ -224,6 +244,11 @@
|
||||
"armour": 0
|
||||
}
|
||||
},
|
||||
"various": {
|
||||
"rerolls": {
|
||||
"value": 0
|
||||
}
|
||||
},
|
||||
"xp": {
|
||||
"total": 0,
|
||||
"spent": 0
|
||||
@@ -260,15 +285,21 @@
|
||||
"weapon",
|
||||
"money",
|
||||
"genetic",
|
||||
"cyber"
|
||||
"cyber",
|
||||
"ammo"
|
||||
],
|
||||
"skill": {
|
||||
"base": "",
|
||||
"value": 0,
|
||||
"bonus": 0,
|
||||
"used": false,
|
||||
"description": ""
|
||||
},
|
||||
"perk": {
|
||||
"perktype": "normal",
|
||||
"role": "",
|
||||
"requirements": "",
|
||||
"xpcost": 0,
|
||||
"cost": 0,
|
||||
"description": ""
|
||||
},
|
||||
@@ -276,11 +307,33 @@
|
||||
"description": ""
|
||||
},
|
||||
"genetic": {
|
||||
"hup": 0,
|
||||
"genertictype": "I",
|
||||
"upgrade": "",
|
||||
"upgradelocation": "",
|
||||
"size": "",
|
||||
"power": "",
|
||||
"sp": 0,
|
||||
"sdp": 0,
|
||||
"hup": "",
|
||||
"surgery": "",
|
||||
"availability": "",
|
||||
"cost": 0,
|
||||
"equipped": false,
|
||||
"description": ""
|
||||
},
|
||||
"cyber": {
|
||||
"hup": 0,
|
||||
"cybertype": "I",
|
||||
"upgrade": "",
|
||||
"upgradelocation": "",
|
||||
"size": "",
|
||||
"power": "",
|
||||
"sp": 0,
|
||||
"sdp": 0,
|
||||
"hup": "",
|
||||
"surgery": "",
|
||||
"availability": "",
|
||||
"cost": 0,
|
||||
"equipped": false,
|
||||
"description": ""
|
||||
},
|
||||
"armor": {
|
||||
@@ -332,10 +385,12 @@
|
||||
},
|
||||
"equipment": {
|
||||
"equiptype": "",
|
||||
"cost": 0,
|
||||
"skillbonus": "",
|
||||
"quantity": 0,
|
||||
"bulk": 0,
|
||||
"sp": 0,
|
||||
"runningtime": 0,
|
||||
"cost": 0,
|
||||
"equipped": false,
|
||||
"iscontainer": false,
|
||||
"containercapacity": 0,
|
||||
@@ -347,11 +402,27 @@
|
||||
"quantity": 0,
|
||||
"description": ""
|
||||
},
|
||||
"ammo": {
|
||||
"ava": "",
|
||||
"damage": "",
|
||||
"bulk": 0,
|
||||
"br": 0,
|
||||
"cost": 0,
|
||||
"sp": 0,
|
||||
"quantity": 0,
|
||||
"properties": ""
|
||||
},
|
||||
"weapon": {
|
||||
"weapontype": "",
|
||||
"associatedskill": "",
|
||||
"penetration": "",
|
||||
"penetrationmin": "",
|
||||
"penetrationmax": "",
|
||||
"needammo": false,
|
||||
"ammoid": "",
|
||||
"hashpdamage": true,
|
||||
"damage": "",
|
||||
"hasfatiguedamage": false,
|
||||
"fatiguedamage": "",
|
||||
"bulk": 0,
|
||||
"br": 0,
|
||||
"rof": 0,
|
||||
@@ -360,8 +431,14 @@
|
||||
"maxrange": "",
|
||||
"sp": 0,
|
||||
"cost": 0,
|
||||
"size": 0,
|
||||
"size": "",
|
||||
"skillbonus": "",
|
||||
"incendiary": false,
|
||||
"armourdestruction": false,
|
||||
"disablesystems": false,
|
||||
"specialffect": false,
|
||||
"guidedweapon": false,
|
||||
"ammotype": "",
|
||||
"equipped": false,
|
||||
"description": ""
|
||||
}
|
||||
|
||||
@@ -3,77 +3,10 @@
|
||||
{{!-- Sheet Header --}}
|
||||
<header class="sheet-header">
|
||||
<div class="header-fields">
|
||||
<h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||
<div class="flexrow">
|
||||
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
<div class="flexcol">
|
||||
|
||||
<div class="flexrow">
|
||||
<div class="ability-item">
|
||||
<ul>
|
||||
{{#each data.abilities as |ability key|}}
|
||||
{{#if (eq ability.col 1)}}
|
||||
{{> systems/fvtt-crucible-rpg/templates/partial-actor-ability-block.html ability=ability key=key}}
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<li class="item flexrow list-item" data-attr-key="class">
|
||||
<span class="ability-label " name="class">
|
||||
<h4 class="ability-text-white ability-margin">Class</h4>
|
||||
</span>
|
||||
<select class="competence-base flexrow" type="text" name="system.biodata.class" value="{{data.biodata.class}}" data-dtype="String">
|
||||
{{#select data.biodata.class}}
|
||||
<option value="chaplain">Chaplain</option>
|
||||
<option value="magus">Magus</option>
|
||||
<option value="martial">Martial</option>
|
||||
<option value="skalawag">Skalawag</option>
|
||||
<option value="warden">Warden</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="ability-item">
|
||||
<ul>
|
||||
{{#each data.abilities as |ability key|}}
|
||||
{{#if (eq ability.col 2)}}
|
||||
{{> systems/fvtt-crucible-rpg/templates/partial-actor-ability-block.html ability=ability key=key}}
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
||||
{{#if equippedArmor}}
|
||||
<li class="item flexrow list-item" data-attr-key="class">
|
||||
<img class="sheet-competence-img" src="{{equippedArmor.img}}" />
|
||||
<span class="ability-label " name="class">
|
||||
<h4 class="ability-text-white ability-margin"><a class="roll-armor-die ability-margin">{{equippedArmor.name}}</a></h4>
|
||||
</span>
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#if equippedShield}}
|
||||
<li class="item flexrow list-item" data-attr-key="class">
|
||||
<img class="sheet-competence-img" src="{{equippedShield.img}}" />
|
||||
<span class="ability-label " name="equippedShield">
|
||||
<h4 class="ability-text-white ability-margin"><a class="roll-shield-die ability-margin">{{equippedShield.name}}</a></h4>
|
||||
</span>
|
||||
</li>
|
||||
{{/if}}
|
||||
<li class="item flexrow list-item" data-attr-key="class">
|
||||
<img class="sheet-competence-img" src="systems/fvtt-crucible-rpg/images/icons/feats/Marksman (Ballistic).webp" />
|
||||
<span class="ability-label " name="rollTarget">
|
||||
<h4 class="ability-text-white ability-margin"><a class="roll-target-die ability-margin">Target Roll</a></h4>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ability-item status-block">
|
||||
{{> systems/fvtt-crucible-rpg/templates/partial-actor-status.html}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -81,9 +14,10 @@
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="main">Main</a>
|
||||
<a class="item" data-tab="skills">Skills</a>
|
||||
<a class="item" data-tab="perks">Perks</a>
|
||||
<a class="item" data-tab="combat">Combat</a>
|
||||
<a class="item" data-tab="lore">Lore</a>
|
||||
<a class="item" data-tab="equipment">Equipment</a>
|
||||
<a class="item" data-tab="biodata">Biography</a>
|
||||
</nav>
|
||||
@@ -91,39 +25,135 @@
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{!-- Skills Tab --}}
|
||||
<div class="tab main" data-group="primary" data-tab="main">
|
||||
|
||||
<div class="flexrow">
|
||||
<ul class="stat-list alternate-list item-list stat-column-size">
|
||||
{{#each system.attributes as |attr key|}}
|
||||
<li class="item stat flexrow list-item list-item-shadow">
|
||||
<label class="item-field-label-medium">{{attr.label}}</label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.attributes.{{key}}.value" value="{{attr.value}}" data-dtype="Number"/>
|
||||
{{/each}}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="stat-list alternate-list item-list derivated-column-size">
|
||||
{{#each system.derivated as |deriv key|}}
|
||||
<li class="item stat flexrow list-item list-item-shadow">
|
||||
<label class="item-field-label-medium">{{deriv.label}}</label>
|
||||
<label class="item-field-label-short">{{deriv.value}}</label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.derivated.{{key}}.bonus" value="{{deriv.bonus}}" data-dtype="Number"/>
|
||||
{{/each}}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="stat-list alternate-list item-list">
|
||||
{{#each system.secondary as |second key|}}
|
||||
<li class="item stat flexrow list-item list-item-shadow">
|
||||
<label class="item-field-label-medium">{{second.label}}</label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.secondary.{{key}}.value" value="{{second.value}}" data-dtype="Number"/>
|
||||
{{#if second.maxeditable}}
|
||||
<label class="item-field-label-short"> / </label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.secondary.{{key}}.max" value="{{second.max}}" data-dtype="Number"/>
|
||||
{{else}}
|
||||
<label class="item-field-label-short"> / {{second.max}}</label>
|
||||
{{/if}}
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.secondary.{{key}}.bonus" value="{{second.bonus}}" data-dtype="Number"/>
|
||||
|
||||
{{#if (eq key "hp")}}
|
||||
<ul class="stat-list alternate-list item-list hplocation-column">
|
||||
{{#each @root.system.hitlocations as |loc key|}}
|
||||
<li class="item stat flexrow list-item list-item-shadow">
|
||||
<label class="item-field-label-short">{{loc.label}}</label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.hitlocations.{{key}}.value" value="{{loc.value}}" data-dtype="Number"/>
|
||||
<label class="item-field-label-short"> / {{loc.max}}</label>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
|
||||
{{/each}}
|
||||
</li>
|
||||
<li class="item stat flexrow list-item list-item-shadow">
|
||||
<label class="item-field-label-medium">Rerolls : </label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.various.rerolls.value" value="{{system.various.rerolls.value}}" data-dtype="Number"/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Skills Tab --}}
|
||||
<div class="tab skills" data-group="primary" data-tab="skills">
|
||||
|
||||
<ul class="stat-list alternate-list item-list">
|
||||
<ul class="alternate-list item-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<span class="item-name-label-header-long2">
|
||||
<h3><label class="items-title-text">Skills</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Ability</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Dice</label>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Base</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Background</label>
|
||||
<label class="short-label">Derivated</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Bonus</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Total</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Used?</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label"> </label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each skills as |skill key|}}
|
||||
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{skill._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{skill.img}}" /></a>
|
||||
<span class="item-name-label"><a class="roll-skill">{{skill.name}}</a></span>
|
||||
<span class="item-field-label-short">{{upper skill.system.ability}}</span>
|
||||
<span class="item-field-label-short">{{skill.system.skilldice}}</span>
|
||||
<span class="item-field-label-long"> - </span>
|
||||
<div class="item-filler"> </div>
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{skill._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" src="{{skill.img}}" />
|
||||
</a>
|
||||
<span class="item-field-label-vlong2"><a class="roll-skill">{{skill.name}}</a></span>
|
||||
<span class="item-field-label-medium">{{skill.system.value}}</span>
|
||||
<span class="item-field-label-long">{{skill.derivated.label}} ({{skill.derivated.value}})</span>
|
||||
<span class="item-field-label-medium">{{skill.system.bonus}}</span>
|
||||
<span class="item-field-label-medium">{{skill.total}}%</span>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" class="skill-used-id" {{checked skill.system.used}}/></label>
|
||||
<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>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Perks Tab --}}
|
||||
<div class="tab perks" data-group="primary" data-tab="perks">
|
||||
|
||||
<ul class="alternate-list item-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header-long2">
|
||||
<h3><label class="items-title-text">Perks</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label"> </label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each perks as |perk key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{perk._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" src="{{perk.img}}" />
|
||||
</a>
|
||||
<span class="item-field-label-vlong2">{{perk.name}}</span>
|
||||
<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>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Combat Tab --}}
|
||||
@@ -136,11 +166,17 @@
|
||||
<span class="item-name-label-header-long">
|
||||
<h3><label class="items-title-text">Weapons</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Ability</label>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Type</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Skill</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Ammo</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Range</label>
|
||||
<label class="short-label">Damage</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each equippedWeapons as |weapon key|}}
|
||||
@@ -149,9 +185,28 @@
|
||||
src="{{weapon.img}}" /></a>
|
||||
<span class="item-name-label-long"><a class ="roll-weapon">{{weapon.name}}</a></span>
|
||||
|
||||
<span class="item-field-label-short">{{weapon.system.ability}}</span>
|
||||
<span class="item-field-label-medium">{{upperFirst weapon.system.weapontype}}</span>
|
||||
|
||||
<span class="item-field-label-medium">{{perk.system.range}}</span>
|
||||
<span class="item-field-label-long">{{upperFirst weapon.system.associatedskill}}</span>
|
||||
|
||||
{{#if weapon.system.needammo}}
|
||||
<select class="item-field-label-long edit-weapon-ammo" type="text" data-dtype="String">
|
||||
{{#select system.ammoid}}
|
||||
<option value="">None</option>
|
||||
{{#each @root.ammos as |ammo index|}}
|
||||
<option value="{{ammo._id}}">{{ammo.name}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
{{#if weapon.ammo}}
|
||||
<span class="item-field-label-medium"><label>{{weapon.ammo.system.damage}}</label></span>
|
||||
{{else}}
|
||||
<span class="item-field-label-medium"><label>-</label></span>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<span class="item-field-label-long"><label>N/A</label></span>
|
||||
<span class="item-field-label-medium"><label>{{weapon.system.damage}}</label></span>
|
||||
{{/if}}
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
@@ -162,62 +217,6 @@
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<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">Feats</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Feature Die?</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">SL?</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">SL</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each feats as |feat key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{feat._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{feat.img}}" /></a>
|
||||
<span class="item-name-label-long">{{feat.name}}</span>
|
||||
|
||||
<span class="item-field-label-medium">{{upperFirst feat.system.isfeatdie}}</span>
|
||||
<span class="item-field-label-medium">{{upperFirst feat.system.issl}}</span>
|
||||
<span class="item-field-label-medium">{{feat.system.sl}}</span>
|
||||
|
||||
<div class="item-filler"> </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>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<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">Conditions</label></h3>
|
||||
</span>
|
||||
</li>
|
||||
{{#each conditions as |condition key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{condition._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{condition.img}}" /></a>
|
||||
<span class="item-name-label-long">{{condition.name}}</span>
|
||||
<div class="item-filler"> </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>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -250,9 +249,9 @@
|
||||
<span class="item-name-label">
|
||||
<a class="power-roll">{{spell.name}}</a>
|
||||
</span>
|
||||
<span class="item-field-label-medium">{{upperFirst spell.system.lore}}</span>
|
||||
<span class="item-field-label-short">{{upperFirst spell.system.circle}}</span>
|
||||
<span class="item-field-label-medium">{{upperFirst spell.system.range}}</span>
|
||||
<span class="item-field-label-medium">{{spell.system.lore}}</span>
|
||||
<span class="item-field-label-short">{{spell.system.circle}}</span>
|
||||
<span class="item-field-label-medium">{{spell.system.range}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
@@ -328,12 +327,20 @@
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Weapons</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Attack</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Damage</label>
|
||||
|
||||
<span class="item-field-label-vlong">
|
||||
<label class="short-label">Ammo</label>
|
||||
</span>
|
||||
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Damage</label>
|
||||
</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-add" data-type="weapon" title="Create Item"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
@@ -343,8 +350,27 @@
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{weapon.img}}" /></a>
|
||||
<span class="item-name-label">{{weapon.name}}</span>
|
||||
<span class="item-field-label-short"><label>{{upper weapon.system.ability}}</label></span>
|
||||
<span class="item-field-label-short"><label>{{upper weapon.system.damage}}</label></span>
|
||||
|
||||
<span class="item-field-label-medium"><label>{{weapon.system.weapontype}}</label></span>
|
||||
|
||||
{{#if weapon.system.needammo}}
|
||||
<select class="item-field-label-vlong edit-weapon-ammo" type="text" data-dtype="String">
|
||||
{{#select system.ammoid}}
|
||||
<option value="">None</option>
|
||||
{{#each @root.ammos as |ammo index|}}
|
||||
<option value="{{ammo._id}}">{{ammo.name}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
{{#if weapon.ammo}}
|
||||
<span class="item-field-label-medium"><label>{{weapon.ammo.system.damage}}</label></span>
|
||||
{{else}}
|
||||
<span class="item-field-label-medium"><label>-</label></span>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<span class="item-field-label-vlong"><label>N/A</label></span>
|
||||
<span class="item-field-label-medium"><label>{{weapon.system.damage}}</label></span>
|
||||
{{/if}}
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
@@ -356,15 +382,47 @@
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Ammos</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Quantity</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Damage</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-add" data-type="weapon" title="Create Item"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each ammos as |ammo key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{ammo._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{ammo.img}}" /></a>
|
||||
<span class="item-name-label">{{ammo.name}}</span>
|
||||
<span class="item-field-label-short"><label>{{ammo.system.quantity}}</label></span>
|
||||
<span class="item-field-label-short"><label>{{ammo.system.damage}}</label></span>
|
||||
|
||||
<div class="item-filler"> </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="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Armors</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Type</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Absorption</label>
|
||||
</span>
|
||||
|
||||
@@ -378,8 +436,8 @@
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{armor.img}}" /></a>
|
||||
<span class="item-name-label">{{armor.name}}</span>
|
||||
<span class="item-field-label-short">{{upper armor.system.armortype}}</span>
|
||||
<span class="item-field-label-short">{{armor.system.absorprionroll}}</span>
|
||||
<span class="item-field-label-medium">{{upper armor.system.armortype}}</span>
|
||||
<span class="item-field-label-medium">{{armor.system.absorprionroll}}</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
@@ -421,12 +479,93 @@
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Cyber</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Location</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">SP</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">HUP</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-add" data-type="cyber" title="Create Item"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each cybers as |cyber key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{cyber._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{cyber.img}}" /></a>
|
||||
<span class="item-name-label">{{cyber.name}}</span>
|
||||
<span class="item-field-label-medium">{{cyber.system.upgradelocation}}</span>
|
||||
<span class="item-field-label-medium">{{cyber.system.sp}}</span>
|
||||
<span class="item-field-label-medium">{{cyber.system.hup}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-equip" title="Worn">{{#if cyber.system.equipped}}<i
|
||||
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Genetics</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Location</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">SP</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">HUP</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-add" data-type="genetic" title="Create Item"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each genetics as |cyber key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{cyber._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{cyber.img}}" /></a>
|
||||
<span class="item-name-label">{{cyber.name}}</span>
|
||||
<span class="item-field-label-medium">{{cyber.system.upgradelocation}}</span>
|
||||
<span class="item-field-label-medium">{{cyber.system.sp}}</span>
|
||||
<span class="item-field-label-medium">{{cyber.system.hup}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-equip" title="Worn">{{#if cyber.system.equipped}}<i
|
||||
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Equipment</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">SP</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Running Time</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Quantity</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
@@ -435,13 +574,19 @@
|
||||
</div>
|
||||
|
||||
</li>
|
||||
{{#each containersTree as |equip key|}}
|
||||
{{> systems/fvtt-crucible-rpg/templates/partial-actor-equipment.html equip=equip level=1}}
|
||||
<ul class="item-list list-item-shadow2 list-item-margin1">
|
||||
{{#each equip.data.contents as |subgear key|}}
|
||||
{{> systems/fvtt-crucible-rpg/templates/partial-actor-equipment.html equip=subgear level=2}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{#each equipments as |equip key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{equip._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{equip.img}}" /></a>
|
||||
<span class="item-name-label">{{equip.name}}</span>
|
||||
<span class="item-field-label-medium">{{equip.system.sp}}</span>
|
||||
<span class="item-field-label-medium">{{equip.system.runningtime}}</span>
|
||||
<span class="item-field-label-medium">{{equip.system.quantity}}</span>
|
||||
<div class="item-filler"> </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>
|
||||
|
||||
|
||||
@@ -7,66 +7,11 @@
|
||||
</header>
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
{{#if sizeDice}}
|
||||
|
||||
{{#if skill}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Size basic dices : </span>
|
||||
<span class="roll-dialog-label">{{sizeDice.nb}}{{sizeDice.dice}}</span>
|
||||
</div>
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Distance bonus dice(s) : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="distanceBonusDice" value="{{distanceBonusDice}}" data-dtype="String" >
|
||||
{{#select distanceBonusDice}}
|
||||
<option value="0">0</option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if hasCover}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Cover : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="hasCover" value="{{hasCover}}" data-dtype="String" >
|
||||
{{#select hasCover}}
|
||||
<option value="none">None</option>
|
||||
<option value="cover50">Cover at 50% (+1 dice)</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if situational}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Situational : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="situational" value="{{situational}}" data-dtype="String" >
|
||||
{{#select situational}}
|
||||
<option value="none">None</option>
|
||||
<option value="dodge">Dodge (+1 dice)</option>
|
||||
<option value="prone">Prone (+1 dice)</option>
|
||||
<option value="moving">Moving (+1 dice)</option>
|
||||
<option value="Engaged">Engaged (+1 dice)</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
||||
{{#if save}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{save.label}} : </span>
|
||||
<span class="roll-dialog-label">{{save.value}}d6</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if ability}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Ability : </span>
|
||||
<span class="roll-dialog-label">{{ability.value}}d6</span>
|
||||
<span class="roll-dialog-label">Skill : </span>
|
||||
<span class="roll-dialog-label">{{skill.name}} ( {{skill.total}}% )</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
@@ -75,93 +20,45 @@
|
||||
<span class="roll-dialog-label">Weapon : </span>
|
||||
<span class="roll-dialog-label">{{weapon.name}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if shield}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Use shield ? : </span>
|
||||
<span class="roll-dialog-label"><input type="checkbox" id="useshield" name="useshield" {{checked useshield}}/></span>
|
||||
<span class="roll-dialog-label">Above effective range ({{weapon.system.effectiverange}}, -30%) : </span>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" id="above-effective-range" {{checked isAboveEffectiveRange}}/></label>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{shield.name}} : </span>
|
||||
<span class="roll-dialog-label">{{shield.data.shielddie}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if skill}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Skill : </span>
|
||||
<span class="roll-dialog-label">{{skill.name}} - {{skill.data.skilldice}}</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Feature die or SL+2? : </span>
|
||||
<span class="roll-dialog-label">{{#if skill.data.isfeatdie}} Yes {{else}} No {{/if}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if noAdvantage}}
|
||||
<div>
|
||||
<span class="roll-dialog-label">No advantage due to condition : {{noAdvantage.name}}</span>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Advantage : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="advantage" value="{{advantage}}" data-dtype="String" >
|
||||
{{#select advantage}}
|
||||
<option value="none">None</option>
|
||||
<option value="advantage1">1 Advantage</option>
|
||||
<option value="advantage2">2 Advantages</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Disadvantage : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="disadvantage" value="{{disadvantage}}" data-dtype="String" >
|
||||
{{#select disadvantage}}
|
||||
<span class="roll-dialog-label">Aiming : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="weapon-aiming" value="{{weaponAiming}}" data-dtype="String" >
|
||||
{{#select weaponAiming}}
|
||||
<option value="none">None</option>
|
||||
<option value="disadvantage1">1 Disadvantage</option>
|
||||
<option value="disadvantage2">2 Disadvantages</option>
|
||||
<option value="arm">Arm (-50)</option>
|
||||
<option value="head">Head (-50)</option>
|
||||
<option value="torso">Torso(-30)</option>
|
||||
<option value="leg">Leg (-30)</option>
|
||||
<option value="hand">Hand/Weapon (-70)</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Roll with Advantage/Disadvantage : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="rollAdvantage" value="{{rollAdvantage}}" data-dtype="String" >
|
||||
{{#select rollAdvantage}}
|
||||
<option value="none">None</option>
|
||||
<option value="roll-advantage">Roll with Advantage</option>
|
||||
<option value="roll-disadvantage">Roll with Disadvantage</option>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Bonus/Malus : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="bonusMalus" value="{{bonusMalus}}" data-dtype="Number" >
|
||||
{{#select bonusMalus}}
|
||||
<option value="-80">-80%</option>
|
||||
<option value="-70">-70%</option>
|
||||
<option value="-60">-60%</option>
|
||||
<option value="-50">-50%</option>
|
||||
<option value="-40">-40%</option>
|
||||
<option value="-30">-30%</option>
|
||||
<option value="-20">-20%</option>
|
||||
<option value="-10">-10%</option>
|
||||
<option value="0">0%</option>
|
||||
<option value="+10">+10%</option>
|
||||
<option value="+20">+20%</option>
|
||||
<option value="+30">+30%</option>
|
||||
<option value="+40">+40%</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#if forceAdvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">1 Advantage from condition : {{forceAdvantage.name}}
|
||||
{{#if advantageFromTarget}} (Provided by targetted actor) {{/if}}
|
||||
</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if forceDisadvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">1 Disadvantage from condition : {{forceDisadvantage.name}} </span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if forceRollAdvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Roll Advantage from condition : {{forceRollAdvantage.name}} </span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if forceRollDisadvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Roll Disadvantage from condition : {{forceRollDisadvantage.name}} </span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -18,130 +18,57 @@
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
{{#if (eq rollOrder 1)}}
|
||||
<li><strong>Roll with {{rollType}} - Roll 1</strong></li>
|
||||
{{/if}}
|
||||
{{#if (eq rollOrder 2)}}
|
||||
<li><strong>Roll with {{rollType}} - Roll 2</strong></li>
|
||||
{{/if}}
|
||||
{{#if (eq rollOrder 3)}}
|
||||
<li><strong>Roll with {{rollType}} - Final result !</strong></li>
|
||||
{{/if}}
|
||||
|
||||
{{#if save}}
|
||||
<li>Save : {{save.label}} - {{save.value}}d6
|
||||
({{#each roll.terms.0.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if sizeDice}}
|
||||
<li>Size/Range/Cover/Situational dices
|
||||
({{#each roll.terms.0.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if ability}}
|
||||
<li>Ability : {{ability.label}} - {{ability.value}}d6
|
||||
({{#each roll.terms.0.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if skill}}
|
||||
<li>Skill : {{skill.name}} - {{skill.data.skilldice}}
|
||||
{{#if featSL}}
|
||||
- with Feat SL +{{featSL}}
|
||||
{{/if}}
|
||||
({{#each roll.terms.2.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
<li>Skill : {{skill.name}} ({{skill.total}}%)</li>
|
||||
{{/if}}
|
||||
{{#if weapon}}
|
||||
<li>Weapon : {{weapon.name}}</li>
|
||||
{{/if}}
|
||||
{{#if isAboveEffectiveRange}}
|
||||
<li>Above effective range: yes, -30% applied</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if noAdvantage}}
|
||||
<li>No advantage due to condition : {{noAdvantage.name}}</li>
|
||||
<li>Bonus/Malus: {{bonusMalus}}% </li>
|
||||
<li>Target Number: {{percentValue}}% </li>
|
||||
<li>Result: {{diceResult}} </li>
|
||||
<li>Degrees: {{degrees}} </li>
|
||||
|
||||
{{#if isCriticalSuccess}}
|
||||
<li><strong>Critical Success !</strong></li>
|
||||
{{else}}
|
||||
{{#if (or (eq advantage "advantage1") forceAdvantage)}}
|
||||
<li>1 Advantage Die !
|
||||
({{#each roll.terms.8.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#if (eq advantage "advantage2") }}
|
||||
<li>2 Advantage Dice !
|
||||
({{#each roll.terms.8.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{#if isSuccess}}
|
||||
<li><strong>Success !</strong></li>
|
||||
{{else}}
|
||||
{{#if isCriticalFailure}}
|
||||
<li><strong>Critical Failure !</strong></li>
|
||||
{{else}}
|
||||
<li><strong>Failure ...</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (or (eq disadvantage "disadvantage1") forceDisadvantage)}}
|
||||
<li>1 Disadvantage Die !
|
||||
({{#each roll.terms.10.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#if (eq disadvantage "disadvantage2")}}
|
||||
<li>2 Disadvantage Dice !
|
||||
({{#each roll.terms.10.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#if (eq rollAdvantage "roll-advantage")}}
|
||||
<li>Roll with Advantage !</li>
|
||||
{{/if}}
|
||||
{{#if (eq rollAdvantage "roll-disadvantage")}}
|
||||
<li>Roll with Disadvantage !</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if skillArmorPenalty}}
|
||||
<li>Armor Penalty : {{skillArmorPenalty}} Disadvantage Dice
|
||||
({{#each roll.terms.12.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#if (and weapon isSuccess)}}
|
||||
<li>Location hit : {{upperFirst weaponAiming}} ({{locationMalus}})</li>
|
||||
{{#if weapon.ammo}}
|
||||
<li>Roll Ammo Damage ({{weapon.ammo.name}}): [[/r {{weapon.ammo.system.damage}}*{{damageMultiplier}}]]</li>
|
||||
<li>BR: {{weapon.ammo.system.br}}</li>
|
||||
|
||||
{{#if hasBonusDice}}
|
||||
<li>Skill bonus dice : {{hasBonusDice}}
|
||||
({{#each roll.terms.6.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if complexSkillDisadvantage}}
|
||||
<li>Roll with Disadvantage because of Complex Skill at SL 0 !</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if hasFeatDie}}
|
||||
<li>Feat Die : d10
|
||||
({{#each roll.terms.4.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if useshield}}
|
||||
<li>Shield : {{shield.name}} - {{shield.data.shielddie}}
|
||||
({{#each roll.terms.14.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{else}}
|
||||
{{#if weapon.system.hashpdamage}}
|
||||
<li>Roll HP Damage: [[/r {{weapon.system.damage}}*{{damageMultiplier}}]]</li>
|
||||
{{/if}}
|
||||
{{#if weapon.system.hasfatiguedamage}}
|
||||
<li>Roll Fatigue Damage: [[/r {{weapon.ammo.system.fatiguedamage}}*{{damageMultiplier}}]]</li>
|
||||
{{/if}}
|
||||
<li>BR: [[/r {{weapon.system.br}}]]</li>
|
||||
{{/if}}
|
||||
<li>Penetration : {{mul weapon.system.penetrationmin damageMultiplier}} - {{mul weapon.system.penetrationmax damageMultiplier}}</li>
|
||||
{{/if}}
|
||||
|
||||
<li><strong>Number of successes</strong> {{nbSuccess}} </li>
|
||||
|
||||
<!-- <button class="chat-card-button reroll-level-remaining" data-roll-id="{{rollId}}">Reroll</button> -->
|
||||
{{#if (and (not isSuccess) rerolls)}}
|
||||
<button class="chat-card-button chat-reroll">Reroll !</button>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
56
templates/items/item-ammo-sheet.hbs
Normal file
56
templates/items/item-ammo-sheet.hbs
Normal file
@@ -0,0 +1,56 @@
|
||||
<form class="{{cssClass}}" autocomplete="off">
|
||||
<header class="sheet-header">
|
||||
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}"/>
|
||||
<div class="header-fields">
|
||||
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{> systems/fvtt-dark-stars/templates/partials/partial-item-nav.hbs}}
|
||||
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{> systems/fvtt-dark-stars/templates/partials/partial-item-description.hbs}}
|
||||
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
|
||||
<div class="tab" data-group="primary">
|
||||
<ul>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Damage formula</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.damage" value="{{system.damage}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Bulk</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.bulk" value="{{system.bulk}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">BR</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.br" value="{{system.br}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">SP</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.sp" value="{{system.sp}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Properties</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.properties" value="{{system.properties}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Quantity</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.quantity" value="{{system.quantity}}"
|
||||
data-dtype="Number" />
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Cost</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</form>
|
||||
@@ -1,25 +1,66 @@
|
||||
<form class="{{cssClass}}" autocomplete="off">
|
||||
<header class="sheet-header">
|
||||
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}"/>
|
||||
<div class="header-fields">
|
||||
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
|
||||
</div>
|
||||
</header>
|
||||
<header class="sheet-header">
|
||||
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
<div class="header-fields">
|
||||
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{> systems/fvtt-dark-stars/templates/partials/partial-item-nav.hbs}}
|
||||
{{> systems/fvtt-dark-stars/templates/partials/partial-item-nav.hbs}}
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{> systems/fvtt-dark-stars/templates/partials/partial-item-description.hbs}}
|
||||
{{> systems/fvtt-dark-stars/templates/partials/partial-item-description.hbs}}
|
||||
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
<ul>
|
||||
<li class="flexrow"><label class="generic-label">HUP</label>
|
||||
<input type="text" class="" name="system.hup" value="{{system.hup}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
<ul>
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Cyber Type</label>
|
||||
<select class="item-field-label-vlong" type="text" name="system.cybertype" value="{{system.cybertype}}"
|
||||
data-dtype="String">
|
||||
{{#select system.cybertype}}
|
||||
{{#each config.cyberTypes as |type key|}}
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Upgrade</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.upgrade" value="{{system.upgrade}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Upgrade Location</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.upgradelocation" value="{{system.upgradelocation}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Size</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.size" value="{{system.size}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Power</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.power" value="{{system.power}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">SP</label>
|
||||
<input type="text" class="item-field-label-short" name="system.sp" value="{{system.sp}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">SDP</label>
|
||||
<input type="text" class="item-field-label-short" name="system.sdp" value="{{system.sdp}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">HUP</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.hup" value="{{system.hup}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Surgery</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.surgery" value="{{system.surgery}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Availability</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.availability" value="{{system.availability}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Cost</label>
|
||||
<input type="text" class="item-field-label-short" name="system.cost" value="{{system.cost}}" data-dtype="Number" />
|
||||
</li>
|
||||
<!--<li class="flexrow"><label class="item-field-label-long">Equipped ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.equipped" {{checked
|
||||
system.equipped}} /></label>
|
||||
</li>-->
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
@@ -1,9 +1,9 @@
|
||||
<form class="{{cssClass}}" autocomplete="off">
|
||||
<header class="sheet-header">
|
||||
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}"/>
|
||||
<div class="header-fields">
|
||||
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
|
||||
</div>
|
||||
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
<div class="header-fields">
|
||||
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{> systems/fvtt-dark-stars/templates/partials/partial-item-nav.hbs}}
|
||||
@@ -15,20 +15,32 @@
|
||||
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
<ul>
|
||||
<li class="flexrow"><label class="item-field-label-long">Equipped ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.equipped" {{checked system.equipped}}/></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Quantity</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.quantity" value="{{system.quantity}}" data-dtype="Number"/>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Bulk</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.bulk" value="{{system.bulk}}" data-dtype="Number"/>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Cost</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Bulk</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.bulk" value="{{system.bulk}}"
|
||||
data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">SP</label>
|
||||
<input type="text" class="item-field-label-short" name="system.sp" value="{{system.sp}}"
|
||||
data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Running time</label>
|
||||
<input type="text" class="item-field-label-short" name="system.runningtime" value="{{system.runningtime}}"
|
||||
data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Equipped ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.equipped" {{checked
|
||||
system.equipped}} /></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Quantity</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.quantity" value="{{system.quantity}}"
|
||||
data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Cost</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.cost" value="{{system.cost}}"
|
||||
data-dtype="Number" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</form>
|
||||
</form>
|
||||
@@ -14,12 +14,53 @@
|
||||
{{> systems/fvtt-dark-stars/templates/partials/partial-item-description.hbs}}
|
||||
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
<ul>
|
||||
<li class="flexrow"><label class="generic-label">HUP</label>
|
||||
<input type="text" class="" name="system.hup" value="{{system.hup}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Genetic Type</label>
|
||||
<select class="item-field-label-vlong" type="text" name="system.cybertype" value="{{system.cybertype}}"
|
||||
data-dtype="String">
|
||||
{{#select system.cybertype}}
|
||||
{{#each config.cyberTypes as |type key|}}
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Upgrade</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.upgrade" value="{{system.upgrade}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Upgrade Location</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.upgradelocation" value="{{system.upgradelocation}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Size</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.size" value="{{system.size}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Power</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.power" value="{{system.power}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">SP</label>
|
||||
<input type="text" class="item-field-label-short" name="system.sp" value="{{system.sp}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">SDP</label>
|
||||
<input type="text" class="item-field-label-short" name="system.sdp" value="{{system.sdp}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">HUP</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.hup" value="{{system.hup}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Surgery</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.surgery" value="{{system.surgery}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Availability</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.availability" value="{{system.availability}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Cost</label>
|
||||
<input type="text" class="item-field-label-short" name="system.cost" value="{{system.cost}}" data-dtype="Number" />
|
||||
</li>
|
||||
<!--<li class="flexrow"><label class="item-field-label-long">Equipped ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.equipped" {{checked
|
||||
system.equipped}} /></label>
|
||||
</li>-->
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
|
||||
@@ -15,10 +15,39 @@
|
||||
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Perk Type</label>
|
||||
<select class="item-field-label-vlong" type="text" name="system.perktype" value="{{system.perktype}}" data-dtype="String">
|
||||
{{#select system.perktype}}
|
||||
{{#each config.perktypes as |type key|}}
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
{{#if (eq system.perktype "normal")}}
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Skill Cost</label>
|
||||
<label class="item-field-label-long">Starting Skill Cost</label>
|
||||
<input type="text" class="item-field-label-medium input-numeric-short padd-right" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</li>
|
||||
{{else}}
|
||||
|
||||
{{#if (eq system.perktype "role")}}
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Role</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.role" value="{{system.role}}" data-dtype="String"/>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Requirements</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.requirements" value="{{system.requirements}}" data-dtype="String"/>
|
||||
</li>
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">XP Cost</label>
|
||||
<input type="text" class="item-field-label-medium input-numeric-short padd-right" name="system.xpcost" value="{{system.xpcost}}" data-dtype="Number"/>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -25,6 +25,10 @@
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Starting skill value</label>
|
||||
<input type="text" class="item-field-label-long" name="system.value" value="{{system.value}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Bonus</label>
|
||||
<input type="text" class="item-field-label-long" name="system.bonus" value="{{system.bonus}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<select class="item-field-label-vlong" type="text" name="system.weapontype" value="{{system.weapontype}}" data-dtype="String">
|
||||
{{#select system.weapontype}}
|
||||
{{#each config.weapontypes as |type key|}}
|
||||
<option value="{{key.name}}">{{type}}</option>
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
@@ -38,36 +38,62 @@
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Penetration</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.penetration" value="{{system.penetration}}" data-dtype="String"/>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Penetration min.</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.penetrationmin" value="{{system.penetrationmin}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Damage</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.damage" value="{{system.damage}}" data-dtype="String"/>
|
||||
<li class="flexrow"><label class="item-field-label-long">Penetration max.</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.penetrationmax" value="{{system.penetrationmax}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Needs Ammunition ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.needammo" {{checked system.needammo}}/></label>
|
||||
</li>
|
||||
|
||||
{{#if system.needammo}}
|
||||
|
||||
{{else}}
|
||||
<li class="flexrow"><label class="item-field-label-vlong">HP damage ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.hashpdamage" {{checked system.hashpdamage}}/></label>
|
||||
</li>
|
||||
{{#if system.hashpdamage}}
|
||||
<li class="flexrow"><label class="item-field-label-vlong">HP Damage formula</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.damage" value="{{system.damage}}" data-dtype="String"/>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Fatigue damage ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.hasfatiguedamage" {{checked system.hasfatiguedamage}}/></label>
|
||||
</li>
|
||||
{{#if system.hasfatiguedamage}}
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Fatigue damage formula</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.fatiguedamage" value="{{system.fatiguedamage}}" data-dtype="String"/>
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Bulk</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.bulk" value="{{data.bulk}}" data-dtype="Number"/>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.bulk" value="{{system.bulk}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">BR</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.br" value="{{data.br}}" data-dtype="Number"/>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.br" value="{{system.br}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">RoF</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.rof" value="{{data.rof}}" data-dtype="Number"/>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.rof" value="{{system.rof}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Ammo</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.ammo" value="{{data.ammo}}" data-dtype="Number"/>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.ammo" value="{{system.ammo}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Effective Range</label>
|
||||
<select class="item-field-label-long" type="text" name="system.effectiverange" value="{{system.effectiverange}}" data-dtype="Number">
|
||||
{{#select system.effectiverange}}
|
||||
{{#each config.range as |type key|}}
|
||||
<option value="{{key.name}}">{{type}}</option>
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
@@ -77,26 +103,46 @@
|
||||
<select class="item-field-label-long" type="text" name="system.maxrange" value="{{system.maxrange}}" data-dtype="Number">
|
||||
{{#select system.maxrange}}
|
||||
{{#each config.range as |type key|}}
|
||||
<option value="{{key.name}}">{{type}}</option>
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">SP</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.sp" value="{{data.sp}}" data-dtype="Number"/>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.sp" value="{{system.sp}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Size (-1 for non applicable)</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.size" value="{{data.size}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Size </label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.size" value="{{system.size}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Equipped ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.equipped" {{checked data.equipped}}/></label>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Ammo type </label>
|
||||
<input type="text" class="item-field-label-long padd-right" name="system.ammotype" value="{{system.ammotype}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Cost</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.cost" value="{{data.cost}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Incendiary ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.incendiary" {{checked system.incendiary}}/></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Armour destruction ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.armourdestruction" {{checked system.armourdestruction}}/></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Disable system ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.disablesystems" {{checked system.disablesystems}}/></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Special effect ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.specialffect" {{checked system.specialffect}}/></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Guided weapon ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.guidedweapon" {{checked system.guidedweapon}}/></label>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Equipped ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.equipped" {{checked system.equipped}}/></label>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Cost</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -10,4 +10,5 @@
|
||||
<option value="vehicle">Vehicles</option>
|
||||
<option value="clothing">Clothing</option>
|
||||
<option value="ammo">Ammo</option>
|
||||
<option value="program">Program</option>
|
||||
<option value="misc">Misc</option>
|
||||
|
||||
Reference in New Issue
Block a user