Compare commits

..

No commits in common. "main" and "fvtt-dark-stars-v10.0.12" have entirely different histories.

162 changed files with 2271 additions and 3649 deletions

10
.gitignore vendored
View File

@ -1,10 +0,0 @@
.vscode/settings.json
.idea
.history
todo.md
/.vscode
/ignored/
/node_modules/
/jsconfig.json
/package.json
/package-lock.json

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

View File

@ -1,20 +1,3 @@
{ {
"TYPES": {
"Actor": {
"character": "Character"
},
"Item": {
"armor": "Armor",
"weapon": "Weapon",
"equipment": "Equipment",
"skill": "Skill",
"perk": "Perk",
"ability": "Ability",
"cumulativetask": "Cumulative Task",
"genetic": "Genetic",
"money": "Money",
"cyber": "Cyber",
"ammo": "Ammo"
}
}
} }

View File

@ -11,7 +11,7 @@ export class DarkStarsActorSheet extends ActorSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, { return mergeObject(super.defaultOptions, {
classes: ["fvtt-dark-stars", "sheet", "actor"], classes: ["fvtt-dark-stars", "sheet", "actor"],
template: "systems/fvtt-dark-stars/templates/actors/actor-sheet.hbs", template: "systems/fvtt-dark-stars/templates/actors/actor-sheet.hbs",
width: 960, width: 960,
@ -25,7 +25,7 @@ export class DarkStarsActorSheet extends ActorSheet {
/* -------------------------------------------- */ /* -------------------------------------------- */
async getData() { async getData() {
const objectData = this.object.system const objectData = this.object.system
let actorData = foundry.utils.duplicate(objectData) let actorData = duplicate(objectData)
let formData = { let formData = {
title: this.title, title: this.title,
@ -38,24 +38,16 @@ export class DarkStarsActorSheet extends ActorSheet {
system: actorData, system: actorData,
limited: this.object.limited, limited: this.object.limited,
skills: this.actor.getSkills( ), skills: this.actor.getSkills( ),
perks: this.actor.getPerks( ), weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
weapons: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getWeapons()) ), armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
ammos: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getAmmos()) ), shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
spells: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getSpells()) ), equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ),
powers: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getPowers()) ), equippedWeapons: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquippedWeapons()) ),
armors: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getArmors())),
shields: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getShields())),
equipments: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getEquipmentsOnly()) ),
equippedWeapons: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getEquippedWeapons()) ),
cybers: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getCybers()) ),
genetics: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getGenetics()) ),
equippedArmor: this.actor.getEquippedArmor(), equippedArmor: this.actor.getEquippedArmor(),
equippedShield: this.actor.getEquippedShield(), equippedShield: this.actor.getEquippedShield(),
subActors: foundry.utils.duplicate(this.actor.getSubActors()), subActors: duplicate(this.actor.getSubActors()),
encCapacity: this.actor.getEncumbranceCapacity(), encCapacity: this.actor.getEncumbranceCapacity(),
conditions: this.actor.getConditions(), conditions: this.actor.getConditions(),
extendedTests: this.actor.getExtendedTests(),
config: game.system.darkstars.config,
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}), description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
notes: await TextEditor.enrichHTML(this.object.system.biodata.notes, {async: true}), notes: await TextEditor.enrichHTML(this.object.system.biodata.notes, {async: true}),
containersTree: this.actor.containersTree, containersTree: this.actor.containersTree,
@ -101,6 +93,17 @@ export class DarkStarsActorSheet extends ActorSheet {
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true }) 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 => { html.find('.subactor-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item"); const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id"); let actorId = li.data("actor-id");
@ -113,17 +116,6 @@ export class DarkStarsActorSheet extends ActorSheet {
let actorId = li.data("actor-id"); let actorId = li.data("actor-id");
this.actor.delSubActor(actorId); 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 => { html.find('.quantity-minus').click(event => {
const li = $(event.currentTarget).parents(".item"); const li = $(event.currentTarget).parents(".item");
this.actor.incDecQuantity( li.data("item-id"), -1 ); this.actor.incDecQuantity( li.data("item-id"), -1 );
@ -142,31 +134,35 @@ export class DarkStarsActorSheet extends ActorSheet {
this.actor.incDecAmmo( li.data("item-id"), +1 ) 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) => { html.find('.roll-skill').click((event) => {
const li = $(event.currentTarget).parents(".item") const li = $(event.currentTarget).parents(".item")
const skillId = li.data("item-id") const skillId = li.data("item-id")
this.actor.rollSkill(skillId) this.actor.rollSkill(skillId)
}); });
html.find('.roll-attribute').click((event) => {
const attrKey = $(event.currentTarget).data("attr-key")
this.actor.rollAttribute(attrKey)
})
html.find('.start-extended-test').click((event) => {
const li = $(event.currentTarget).parents(".item")
const skillId = li.data("item-id")
this.actor.rollSkill(skillId, true)
})
html.find('.roll-extended-test').click((event) => {
const li = $(event.currentTarget).parents(".item")
const testId = li.data("item-id")
this.actor.continueExtendedTest(testId)
})
html.find('.roll-weapon').click((event) => { html.find('.roll-weapon').click((event) => {
const li = $(event.currentTarget).parents(".item"); const li = $(event.currentTarget).parents(".item");
const skillId = li.data("item-id") const skillId = li.data("item-id")
this.actor.rollWeapon(skillId) 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) => { html.find('.lock-unlock-sheet').click((event) => {

View File

@ -43,6 +43,8 @@ export class DarkStarsActor extends Actor {
} }
if (data.type == 'character') { if (data.type == 'character') {
const skills = await DarkStarsUtility.loadCompendium("fvtt-dark-stars.skills");
data.items = skills.map(i => i.toObject())
} }
if (data.type == 'npc') { if (data.type == 'npc') {
} }
@ -85,11 +87,6 @@ export class DarkStarsActor extends Actor {
deriv.si.value = Math.round( ((attr.dex.value + attr.sel.value) / 5) + 0.5) + deriv.si.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 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 secondary.fp.max = 10 + attr.str.value + attr.con.value + secondary.fp.bonus
} }
@ -101,6 +98,7 @@ export class DarkStarsActor extends Actor {
this.computeDerivated() this.computeDerivated()
this.buildContainerTree() this.buildContainerTree()
this.computeHitPoints() this.computeHitPoints()
this.computeEffortPoints()
} }
super.prepareDerivedData(); super.prepareDerivedData();
@ -118,71 +116,38 @@ export class DarkStarsActor extends Actor {
} }
getEquippedWeapons() { getEquippedWeapons() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || []); let comp = duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || []);
DarkStarsUtility.sortArrayObjectsByName(comp) DarkStarsUtility.sortArrayObjectsByName(comp)
return comp; return comp;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getArmors() { getArmors() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'armor') || []); let comp = duplicate(this.items.filter(item => item.type == 'armor') || []);
DarkStarsUtility.sortArrayObjectsByName(comp)
return comp;
}
getSpells() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'spell') || []);
DarkStarsUtility.sortArrayObjectsByName(comp)
return comp;
}
getPowers() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'psychic') || []);
DarkStarsUtility.sortArrayObjectsByName(comp)
return comp;
}
getExtendedTests() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'extendedtest') || []);
DarkStarsUtility.sortArrayObjectsByName(comp) DarkStarsUtility.sortArrayObjectsByName(comp)
return comp; return comp;
} }
getEquippedArmor() { getEquippedArmor() {
let comp = this.items.find(item => item.type == 'armor' && item.system.equipped) let comp = this.items.find(item => item.type == 'armor' && item.system.equipped)
if (comp) { if (comp) {
return foundry.utils.duplicate(comp) return duplicate(comp)
} }
return undefined return undefined
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getCybers() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'cyber') || []);
DarkStarsUtility.sortArrayObjectsByName(comp)
return comp;
}
getGenetics() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'genetic') || []);
DarkStarsUtility.sortArrayObjectsByName(comp)
return comp;
}
/* -------------------------------------------- */
getShields() { getShields() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'shield') || []); let comp = duplicate(this.items.filter(item => item.type == 'shield') || []);
DarkStarsUtility.sortArrayObjectsByName(comp) DarkStarsUtility.sortArrayObjectsByName(comp)
return comp; return comp;
} }
getEquippedShield() { getEquippedShield() {
let comp = this.items.find(item => item.type == 'shield' && item.system.equipped) let comp = this.items.find(item => item.type == 'shield' && item.system.equipped)
if (comp) { if (comp) {
return foundry.utils.duplicate(comp) return duplicate(comp)
} }
return undefined return undefined
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
checkAndPrepareEquipment(item) { 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 = foundry.utils.duplicate(ammo)
}
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -195,60 +160,35 @@ export class DarkStarsActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
getConditions() { getConditions() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'condition') || []); let comp = duplicate(this.items.filter(item => item.type == 'condition') || []);
DarkStarsUtility.sortArrayObjectsByName(comp) DarkStarsUtility.sortArrayObjectsByName(comp)
return comp; return comp;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getWeapons() { getWeapons() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'weapon') || []); let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []);
DarkStarsUtility.sortArrayObjectsByName(comp) DarkStarsUtility.sortArrayObjectsByName(comp)
return comp; return comp;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getAmmos() { getItemById(id) {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'ammo') || []); let item = this.items.find(item => item.id == id);
DarkStarsUtility.sortArrayObjectsByName(comp) if (item) {
return comp; item = duplicate(item)
}
/* -------------------------------------------- */
getItemById(id, duplicate = true) {
let item = this.items.find(it => it.id == id)
if (item && duplicate) {
item = foundry.utils.duplicate(item)
}
return item
}
/* -------------------------------------------- */
getItem(id) {
let item = this.items.get(id)
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} ])
} }
return item;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
updateSkill(skill) { updateSkill(skill) {
skill.derivated = foundry.utils.duplicate(this.system.derivated[skill.system.base]) skill.derivated = duplicate(this.system.derivated[skill.system.base])
skill.total = skill.system.value + skill.derivated.value + skill.system.bonus skill.total = skill.derivated.value + skill.system.bonus
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getSkills() { getSkills() {
this.computeDerivated() this.computeDerivated()
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'skill') || []) let comp = duplicate(this.items.filter(item => item.type == 'skill') || [])
for (let skill of comp) { for (let skill of comp) {
this.updateSkill(skill) this.updateSkill(skill)
} }
@ -256,17 +196,10 @@ export class DarkStarsActor extends Actor {
return comp return comp
} }
/* -------------------------------------------- */
getPerks() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'perk') || [])
DarkStarsUtility.sortArrayObjectsByName(comp)
return comp
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async equipItem(itemId) { async equipItem(itemId) {
let item = this.items.find(item => item.id == itemId) let item = this.items.find(item => item.id == itemId)
if (item?.system) { if (item && item.system) {
if (item.type == "armor") { if (item.type == "armor") {
let armor = this.items.find(item => item.id != itemId && item.type == "armor" && item.system.equipped) let armor = this.items.find(item => item.id != itemId && item.type == "armor" && item.system.equipped)
if (armor) { if (armor) {
@ -303,7 +236,7 @@ export class DarkStarsActor extends Actor {
} }
/* ------------------------------------------- */ /* ------------------------------------------- */
getEquipmentsOnly() { getEquipmentsOnly() {
return foundry.utils.duplicate(this.items.filter(item => item.type == "equipment") || []) return duplicate(this.items.filter(item => item.type == "equipment") || [])
} }
/* ------------------------------------------- */ /* ------------------------------------------- */
@ -329,7 +262,7 @@ export class DarkStarsActor extends Actor {
/* ------------------------------------------- */ /* ------------------------------------------- */
async buildContainerTree() { async buildContainerTree() {
let equipments = foundry.utils.duplicate(this.items.filter(item => item.type == "equipment") || []) let equipments = duplicate(this.items.filter(item => item.type == "equipment") || [])
for (let equip1 of equipments) { for (let equip1 of equipments) {
if (equip1.system.iscontainer) { if (equip1.system.iscontainer) {
equip1.system.contents = [] equip1.system.contents = []
@ -383,7 +316,7 @@ export class DarkStarsActor extends Actor {
async incDecHP(formula) { 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")) await DarkStarsUtility.showDiceSoNice(dmgRoll, game.settings.get("core", "rollMode"))
let hp = foundry.utils.duplicate(this.system.secondary.hp) let hp = duplicate(this.system.secondary.hp)
hp.value = Number(hp.value) + Number(dmgRoll.total) hp.value = Number(hp.value) + Number(dmgRoll.total)
this.update({ 'system.secondary.hp': hp }) this.update({ 'system.secondary.hp': hp })
return Number(dmgRoll.total) return Number(dmgRoll.total)
@ -410,7 +343,7 @@ export class DarkStarsActor extends Actor {
} else { } else {
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': containerId }]) await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': containerId }])
} }
} else if (object?.system.containerid) { // remove from container } else if (object && object.system.containerid) { // remove from container
console.log("Removeing: ", object) console.log("Removeing: ", object)
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': "" }]); await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': "" }]);
} }
@ -427,34 +360,31 @@ export class DarkStarsActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async equipGear(equipmentId) { async equipGear(equipmentId) {
let item = this.items.find(item => item.id == equipmentId); let item = this.items.find(item => item.id == equipmentId);
if (item?.system) { if (item && item.system) {
let update = { _id: item.id, "system.equipped": !item.system.equipped }; let update = { _id: item.id, "system.equipped": !item.system.equipped };
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
hasLastWord() { getInitiativeScore(combatId, combatantId) {
return this.items.find(i => i.type == "perk" && i.name.toLowerCase() === "last word") if (this.type == 'character') {
this.rollMR(true, combatId, combatantId)
} }
/* -------------------------------------------- */ console.log("Init required !!!!")
async getInitiativeScore() { return -1;
let initFormula = (this.system.derivated.si.value + this.system.derivated.si.bonus) + "d6"
let initRoll = await new Roll(initFormula).roll()
await DarkStarsUtility.showDiceSoNice(initRoll, game.settings.get("core", "rollMode"))
return initRoll.total
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getSubActors() { getSubActors() {
let subActors = []; let subActors = [];
for (let id of this.system.subactors) { for (let id of this.system.subactors) {
subActors.push(foundry.utils.duplicate(game.actors.get(id))) subActors.push(duplicate(game.actors.get(id)))
} }
return subActors; return subActors;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async addSubActor(subActorId) { async addSubActor(subActorId) {
let subActors = foundry.utils.duplicate(this.system.subactors); let subActors = duplicate(this.system.subactors);
subActors.push(subActorId); subActors.push(subActorId);
await this.update({ 'system.subactors': subActors }); await this.update({ 'system.subactors': subActors });
} }
@ -473,7 +403,7 @@ export class DarkStarsActor extends Actor {
getOneSkill(skillId) { getOneSkill(skillId) {
let skill = this.items.find(item => item.type == 'skill' && item.id == skillId) let skill = this.items.find(item => item.type == 'skill' && item.id == skillId)
if (skill) { if (skill) {
skill = foundry.utils.duplicate(skill); skill = duplicate(skill);
} }
return skill; return skill;
} }
@ -523,7 +453,7 @@ export class DarkStarsActor extends Actor {
if (objetQ) { if (objetQ) {
let newQ = objetQ.system.quantity + incDec let newQ = objetQ.system.quantity + incDec
if (newQ >= 0) { if (newQ >= 0) {
await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]) // pdates one EmbeddedEntity const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]) // pdates one EmbeddedEntity
} }
} }
} }
@ -533,7 +463,7 @@ export class DarkStarsActor extends Actor {
if (objetQ) { if (objetQ) {
let newQ = objetQ.system.ammocurrent + incDec; let newQ = objetQ.system.ammocurrent + incDec;
if (newQ >= 0 && newQ <= objetQ.system.ammomax) { if (newQ >= 0 && newQ <= objetQ.system.ammomax) {
await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.ammocurrent': newQ }]); // pdates one EmbeddedEntity const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.ammocurrent': newQ }]); // pdates one EmbeddedEntity
} }
} }
} }
@ -567,13 +497,6 @@ export class DarkStarsActor extends Actor {
return this.items.find(cond => cond.type == "condition" && cond.system.targetadvantage) return this.items.find(cond => cond.type == "condition" && cond.system.targetadvantage)
} }
/* -------------------------------------------- */
modifyRerolls( value) {
let rerolls = foundry.utils.duplicate(this.system.various.rerolls)
rerolls.value += value
this.update({ 'system.various.rerolls': rerolls })
}
/* -------------------------------------------- */ /* -------------------------------------------- */
getCommonRollData(abilityKey = undefined) { getCommonRollData(abilityKey = undefined) {
let noAction = this.isNoAction() let noAction = this.isNoAction()
@ -585,14 +508,10 @@ export class DarkStarsActor extends Actor {
let rollData = DarkStarsUtility.getBasicRollData() let rollData = DarkStarsUtility.getBasicRollData()
rollData.alias = this.name rollData.alias = this.name
rollData.actorImg = this.img rollData.actorImg = this.img
console.log("Prepare common roll data for actor", this)
rollData.tokenId = this.token?.id
rollData.actorId = this.id rollData.actorId = this.id
rollData.img = this.img rollData.img = this.img
rollData.armors = this.getArmors() rollData.armors = this.getArmors()
rollData.conditions = this.getConditions() rollData.conditions = this.getConditions()
rollData.rerolls = this.system.various.rerolls.value
if (rollData.defenderTokenId) { if (rollData.defenderTokenId) {
let defenderToken = game.canvas.tokens.get(rollData.defenderTokenId) let defenderToken = game.canvas.tokens.get(rollData.defenderTokenId)
let defender = defenderToken.actor let defender = defenderToken.actor
@ -627,51 +546,28 @@ export class DarkStarsActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
rollAttribute(attrKey) { rollAbility(abilityKey) {
let rollData = this.getCommonRollData() let rollData = this.getCommonRollData(abilityKey)
rollData.attr = foundry.utils.duplicate(this.system.attributes[attrKey]) rollData.mode = "ability"
rollData.mode = "attribute"
rollData.title = "Attribute " + rollData.attr.label
this.startRoll(rollData)
}
/* -------------------------------------------- */
continueExtendedTest(testId) {
let test = this.items.get(testId)
if (test) {
let skill = this.items.find(it => it.type == "skill" && it.name.toLowerCase() == test.system.skill.toLowerCase())
if (skill) {
skill = foundry.utils.duplicate(skill)
this.updateSkill(skill)
let rollData = this.getCommonRollData()
rollData.mode = "extendedtest"
rollData.isExtended = true
rollData.extendedTest = test
rollData.title = "Extended test " + skill.name
rollData.skill = skill
rollData.img = skill.img
rollData.taskId = test.id
if (rollData.target) { if (rollData.target) {
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.") ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
return return
} }
this.startRoll(rollData) DarkStarsUtility.rollDarkStars(rollData)
} else {
console.log("Unable to find the relevant skill for extended test " + test.system.skill)
}
} else {
console.log("Unable to find the extended test")
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollSkill(skillId, isExtended = false, taskId = undefined) { rollSkill(skillId) {
let skill = this.items.get(skillId) let skill = this.items.get(skillId)
if (skill) { if (skill) {
skill = foundry.utils.duplicate(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)
this.updateSkill(skill) this.updateSkill(skill)
let rollData = this.getCommonRollData() let rollData = this.getCommonRollData()
rollData.mode = "skill" rollData.mode = "skill"
rollData.isExtended = isExtended
rollData.title = "Skill " + skill.name rollData.title = "Skill " + skill.name
rollData.skill = skill rollData.skill = skill
rollData.img = skill.img rollData.img = skill.img
@ -679,17 +575,6 @@ export class DarkStarsActor extends Actor {
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.") ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
return return
} }
if (isExtended) {
rollData.title = "Extended Test " + skill.name
if (!taskId) {
let extendedTest = await this.createEmbeddedDocuments("Item", [{name: "Extended test " + skill.name, type: "extendedtest",
'system.skill': skill.name}])
//console.log("Task", cumulativeTask)
rollData.taskId = extendedTest[0].id
}else {
rollData.taskId = extendedTest[0].id
}
}
this.startRoll(rollData) this.startRoll(rollData)
} }
} }
@ -698,17 +583,24 @@ export class DarkStarsActor extends Actor {
rollWeapon(weaponId) { rollWeapon(weaponId) {
let weapon = this.items.get(weaponId) let weapon = this.items.get(weaponId)
if (weapon) { if (weapon) {
weapon = foundry.utils.duplicate(weapon) weapon = duplicate(weapon)
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase()) let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
if (skill) { if (skill) {
skill = foundry.utils.duplicate(skill) skill = duplicate(skill)
this.updateSkill(skill) DarkStarsUtility.updateSkill(skill)
let rollData = this.getCommonRollData() let abilityKey = skill.system.ability
let rollData = this.getCommonRollData(abilityKey)
rollData.mode = "weapon" rollData.mode = "weapon"
rollData.skill = skill rollData.skill = skill
rollData.weapon = weapon rollData.weapon = weapon
this.checkAndPrepareEquipment(weapon)
rollData.img = weapon.img 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) this.startRoll(rollData)
} else { } else {
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name) ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)

View File

@ -3,45 +3,28 @@ import { DarkStarsUtility } from "./dark-stars-utility.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class DarkStarsCombat extends Combat { export class DarkStarsCombat extends Combat {
/* -------------------------------------------- */
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 = {} ) { async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
ids = typeof ids === "string" ? [ids] : ids; ids = typeof ids === "string" ? [ids] : ids;
for (let cId of ids) { for (let cId = 0; cId < ids.length; cId++) {
const c = this.combatants.get(cId); const c = this.combatants.get(ids[cId]);
let id = c._id || c.id; let id = c._id || c.id;
let initScore = c.actor ? await c.actor.getInitiativeScore(this.id, id) : -1; let initBonus = c.actor ? c.actor.getInitiativeScore( this.id, id ) : -1;
await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: initScore }]); await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: initBonus } ]);
setTimeout(() => this.processOtherTurns(c, initScore), 400)
}
return this;
} }
/* -------------------------------------------- */ 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) { _onUpdate(changed, options, userId) {
} }
/* -------------------------------------------- */
static async checkTurnPosition() {
while (game.combat.turn > 0) {
await game.combat.previousTurn()
}
}
} }

View File

@ -1,72 +1,6 @@
export const DARKSTARS_CONFIG = { export const DARKSTARS_CONFIG = {
sizeOptions: {
"1": "Tiny",
"2": "Small",
"3": "Medium",
"4": "Large",
"5": "Huge",
"6": "Gargantuan"
},
classNPC: {
"none": "None",
"chaplain": "Chaplain",
"magus": "Magus",
"martial": "Martial",
"skalawag": "Skalawag",
"warden": "Warden"
},
synergyBonus: {
"0": "0",
"5": "+5%",
"+6": "+6%",
"+7": "+7%",
"+8": "+8%",
"+9": "+9%",
"+10": "+10%"
},
attributeModifier: [
{value: "0", label: "None"},
{value: "-1", label: "Difficult (-1)"},
{value: "-3", label: "Hard (-3)"},
{value: "-6", label: "Very Hard (-6)"},
{value: "-9", label: "Impossible (-9)"}
],
weaponAiming: {
"none": "None",
" arm": "Arm (-50)",
"head": "Head (-50)",
"torso": "Torso(-30)",
"leg": "Leg (-30)",
"hand": "Hand/Weapon (-70)"
},
rollModifiers: [
{ "value": "-80", "label": "-80%" },
{ "value": "-70", "label": "-70%" },
{ "value": "-60", "label": "-60%" },
{ "value": "-50", "label": "-50%" },
{ "value": "-40", "label": "-40%" },
{ "value": "-30", "label": "-30%" },
{ "value": "-20", "label": "-20%" },
{ "value": "-10", "label": "-10%" },
{ "value": "0", "label": "0%" },
{ "value": "+10", "label": "+10%" },
{ "value": "+20", "label": "+20%" },
{ "value": "+30", "label": "+30%" },
{ "value": "+40", "label": "+40%" }
],
abilityValues: {
"0": "0",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8"
},
basebonus : { basebonus : {
"csb": "CSB", "csb": "CSB",
"ssb": "SSB", "ssb": "SSB",
@ -98,22 +32,7 @@ export const DARKSTARS_CONFIG = {
perktypes: { perktypes: {
"normal": "Normal", "normal": "Normal",
"advanced": "Advanced", "advanced": "Advanced",
"role": "Role", "role": "Role"
"job": "Job"
},
magicTypes: {
"lemurian": "Lemurian",
"bloodmagic": "Blood Magic Ritual",
"ritual": "Ritual",
"miracle": "Miracle"
},
cyberTypes: {
"I": "I",
"P": "P",
"U": "U",
"W": "W",
"E": "E",
"GS": "GS"
}, },
range: { range: {
"1": "Close", "1": "Close",

View File

@ -9,7 +9,7 @@ export class DarkStarsItemSheet extends ItemSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, { return mergeObject(super.defaultOptions, {
classes: ["fvtt-dark-stars", "sheet", "item"], classes: ["fvtt-dark-stars", "sheet", "item"],
template: "systems/fvtt-dark-stars/templates/items/item-sheet.hbs", template: "systems/fvtt-dark-stars/templates/items/item-sheet.hbs",
dragDrop: [{ dragSelector: null, dropSelector: null }], dragDrop: [{ dragSelector: null, dropSelector: null }],
@ -49,7 +49,7 @@ export class DarkStarsItemSheet extends ItemSheet {
/* -------------------------------------------- */ /* -------------------------------------------- */
async getData() { async getData() {
let objectData = foundry.utils.duplicate(this.object.system) let objectData = duplicate(this.object.system)
let formData = { let formData = {
title: this.title, title: this.title,
@ -87,7 +87,7 @@ export class DarkStarsItemSheet extends ItemSheet {
/* -------------------------------------------- */ /* -------------------------------------------- */
postItem() { postItem() {
let chatData = foundry.utils.duplicate(DarkStarsUtility.data(this.item)); let chatData = duplicate(DarkStarsUtility.data(this.item));
if (this.actor) { if (this.actor) {
chatData.actor = { id: this.actor.id }; chatData.actor = { id: this.actor.id };
} }
@ -132,9 +132,21 @@ export class DarkStarsItemSheet extends ItemSheet {
this.deleteSubitem(ev); 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 => { html.find('.view-subitem').click(ev => {
this.viewSubitem(ev); this.viewSubitem(ev);
}); });
html.find('.view-spec').click(ev => {
this.manageSpec();
});
} }

View File

@ -8,9 +8,7 @@ export const defaultItemImg = {
perk: "systems/fvtt-dark-stars/images/icons/perk.webp", perk: "systems/fvtt-dark-stars/images/icons/perk.webp",
ability: "systems/fvtt-dark-stars/images/icons/ability.webp", ability: "systems/fvtt-dark-stars/images/icons/ability.webp",
genetic: "systems/fvtt-dark-stars/images/icons/genetic.webp", genetic: "systems/fvtt-dark-stars/images/icons/genetic.webp",
cyber: "systems/fvtt-dark-stars/images/icons/cyber.webp", cyber: "systems/fvtt-dark-stars/images/icons/cyber.webp"
spell: "systems/fvtt-dark-stars/images/icons/magic.webp",
psychic: "systems/fvtt-dark-stars/images/icons/psychicpowers.webp",
} }
/** /**

View File

@ -18,7 +18,6 @@ import { DarkStarsItem } from "./dark-stars-item.js";
import { DarkStarsHotbar } from "./dark-stars-hotbar.js" import { DarkStarsHotbar } from "./dark-stars-hotbar.js"
import { DarkStarsCommands } from "./dark-stars-commands.js" import { DarkStarsCommands } from "./dark-stars-commands.js"
import { DARKSTARS_CONFIG } from "./dark-stars-config.js"; import { DARKSTARS_CONFIG } from "./dark-stars-config.js";
import { ClassCounter} from "https://www.uberwald.me/fvtt_appcount/count-class-ready.js"
/* -------------------------------------------- */ /* -------------------------------------------- */
/* Foundry VTT Initialization */ /* Foundry VTT Initialization */
@ -92,11 +91,15 @@ Hooks.once("ready", function () {
}); });
} }
// CSS patch for v9
if (game.version) {
let sidebar = document.getElementById("sidebar");
sidebar.style.width = "min-content";
}
welcomeMessage(); welcomeMessage();
DarkStarsUtility.ready() DarkStarsUtility.ready()
DarkStarsCommands.init() DarkStarsCommands.init()
ClassCounter.registerUsageCount()
}) })
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -11,7 +11,7 @@ export class DarkStarsNPCSheet extends ActorSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, { return mergeObject(super.defaultOptions, {
classes: ["dark-stars-rpg", "sheet", "actor"], classes: ["dark-stars-rpg", "sheet", "actor"],
template: "systems/fvtt-dark-stars/templates/npc-sheet.hbs", template: "systems/fvtt-dark-stars/templates/npc-sheet.hbs",
width: 640, width: 640,
@ -25,7 +25,7 @@ export class DarkStarsNPCSheet extends ActorSheet {
/* -------------------------------------------- */ /* -------------------------------------------- */
async getData() { async getData() {
const objectData = this.object.system const objectData = this.object.system
let actorData = foundry.utils.duplicate(objectData) let actorData = duplicate(objectData)
let formData = { let formData = {
title: this.title, title: this.title,
@ -38,22 +38,21 @@ export class DarkStarsNPCSheet extends ActorSheet {
data: actorData, data: actorData,
limited: this.object.limited, limited: this.object.limited,
skills: this.actor.getSkills( ), skills: this.actor.getSkills( ),
weapons: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getWeapons()) ), weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
armors: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getArmors())), armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
shields: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getShields())), shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
spells: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getLore())), spells: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getLore())),
equipments: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getEquipmentsOnly()) ), equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ),
equippedWeapons: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getEquippedWeapons()) ), equippedWeapons: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquippedWeapons()) ),
equippedArmor: this.actor.getEquippedArmor(), equippedArmor: this.actor.getEquippedArmor(),
equippedShield: this.actor.getEquippedShield(), equippedShield: this.actor.getEquippedShield(),
feats: foundry.utils.duplicate(this.actor.getFeats()), feats: duplicate(this.actor.getFeats()),
subActors: foundry.utils.duplicate(this.actor.getSubActors()), subActors: duplicate(this.actor.getSubActors()),
race: foundry.utils.duplicate(this.actor.getRace()), race: duplicate(this.actor.getRace()),
moneys: foundry.utils.duplicate(this.actor.getMoneys()), moneys: duplicate(this.actor.getMoneys()),
encCapacity: this.actor.getEncumbranceCapacity(), encCapacity: this.actor.getEncumbranceCapacity(),
saveRolls: this.actor.getSaveRoll(), saveRolls: this.actor.getSaveRoll(),
conditions: this.actor.getConditions(), conditions: this.actor.getConditions(),
config: game.system.darkstars.config,
containersTree: this.actor.containersTree, containersTree: this.actor.containersTree,
encCurrent: this.actor.encCurrent, encCurrent: this.actor.encCurrent,
options: this.options, options: this.options,

View File

@ -5,7 +5,7 @@ export class DarkStarsRollDialog extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async create(actor, rollData) { static async create(actor, rollData) {
let options = { classes: ["DarkStarsDialog"], width: 420, height: 'fit-content', 'z-index': 99999 }; let options = { classes: ["DarkStarsDialog"], width: 320, height: 'fit-content', 'z-index': 99999 };
let html = await renderTemplate('systems/fvtt-dark-stars/templates/apps/roll-dialog-generic.hbs', rollData); let html = await renderTemplate('systems/fvtt-dark-stars/templates/apps/roll-dialog-generic.hbs', rollData);
return new DarkStarsRollDialog(actor, rollData, html, options); return new DarkStarsRollDialog(actor, rollData, html, options);
@ -61,20 +61,6 @@ export class DarkStarsRollDialog extends Dialog {
html.find('#bonusMalus').change((event) => { html.find('#bonusMalus').change((event) => {
this.rollData.bonusMalus = Number(event.currentTarget.value) this.rollData.bonusMalus = Number(event.currentTarget.value)
}) })
html.find('#above-effective-range').change((event) => {
this.rollData.isAboveEffectiveRange = event.currentTarget.checked
})
html.find('#weapon-aiming').change((event) => {
this.rollData.weaponAiming = String(event.currentTarget.value)
})
html.find('#synergy-bonus').change((event) => {
this.rollData.synergyBonus = Number(event.currentTarget.value)
})
html.find('#extra-time').change((event) => {
this.rollData.extraTime = event.currentTarget.checked
})
html.find('#attribute-modifier').change((event) => {
this.rollData.attributeModifier = Number(event.currentTarget.value)
})
} }
} }

View File

@ -11,7 +11,9 @@ export class DarkStarsUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async init() { static async init() {
Hooks.on('renderChatLog', (log, html, data) => DarkStarsUtility.chatListeners(html)); Hooks.on('renderChatLog', (log, html, data) => DarkStarsUtility.chatListeners(html));
Hooks.on('renderChatMessage', (message, html, data) => DarkStarsUtility.chatMessageHandler(message, html, data)) /*Hooks.on("dropCanvasData", (canvas, data) => {
DarkStarsUtility.dropItemOnToken(canvas, data)
});*/
DarkStarsCommands.init(); DarkStarsCommands.init();
@ -41,28 +43,13 @@ export class DarkStarsUtility {
return __locationNames[key] return __locationNames[key]
}) })
this.gameSettings()
} }
/*-------------------------------------------- */ /*-------------------------------------------- */
static async processOpposed(rollData) { static gameSettings() {
if (this.currentOpposition) {
let opposed = {
winner: this.currentOpposition,
looser: rollData,
isOpposed : true
}
if (rollData.degrees > this.currentOpposition.degrees ) {
opposed.winner = rollData
opposed.looser = this.currentOpposition
}
let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/chat-opposition-result.hbs`, opposed)
})
await msg.setFlag("world", "darkstars-roll-data", opposed)
} else {
this.currentOpposition = rollData
ui.notifications.info("Opposed rolls started with " + rollData.alias );
}
} }
/*-------------------------------------------- */ /*-------------------------------------------- */
@ -73,13 +60,14 @@ export class DarkStarsUtility {
/*-------------------------------------------- */ /*-------------------------------------------- */
static getSkills() { static getSkills() {
return foundry.utils.duplicate(this.skills) return duplicate(this.skills)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static async ready() { static async ready() {
const skills = await DarkStarsUtility.loadCompendium("fvtt-dark-stars.sprawl"); const skills = await DarkStarsUtility.loadCompendium("fvtt-dark-stars.skills")
this.skills = skills.filter(i => i.type == "skill").map(i => i.toObject()); this.skills = skills.map(i => i.toObject())
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -99,21 +87,24 @@ export class DarkStarsUtility {
static async chatListeners(html) { static async chatListeners(html) {
html.on("click", '.view-item-from-chat', event => { html.on("click", '.view-item-from-chat', event => {
game.system.darkstars.creator.openItemView(event) game.system.crucible.creator.openItemView(event)
}) })
html.on("click", '.chat-reroll', event => { html.on("click", '.roll-defense-melee', event => {
let messageId = this.findChatMessageId(event.currentTarget) let rollId = $(event.currentTarget).data("roll-id")
let message = game.messages.get(messageId) let rollData = DarkStarsUtility.getRollData(rollId)
let rollData = message.getFlag("world", "darkstars-roll-data") rollData.defenseWeaponId = $(event.currentTarget).data("defense-weapon-id")
rollData.reroll = true let actor = game.canvas.tokens.get(rollData.defenderTokenId).actor
rollData.roll = undefined if (actor && (game.user.isGM || actor.isOwner)) {
this.rollDarkStars(rollData) actor.rollDefenseMelee(rollData)
}
}) })
html.on("click", '.chat-roll-opposed', event => { html.on("click", '.roll-defense-ranged', event => {
let messageId = this.findChatMessageId(event.currentTarget) let rollId = $(event.currentTarget).data("roll-id")
let message = game.messages.get(messageId) let rollData = DarkStarsUtility.getRollData(rollId)
let rollData = message.getFlag("world", "darkstars-roll-data") let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
this.processOpposed(rollData) if (defender && (game.user.isGM || defender.isOwner)) {
defender.rollDefenseRanged(rollData)
}
}) })
} }
@ -123,8 +114,10 @@ export class DarkStarsUtility {
const templatePaths = [ const templatePaths = [
'systems/fvtt-dark-stars/templates/partials/editor-notes-gm.hbs', 'systems/fvtt-dark-stars/templates/partials/editor-notes-gm.hbs',
'systems/fvtt-dark-stars/templates/partials/partial-roll-select.hbs',
'systems/fvtt-dark-stars/templates/partials/partial-actor-ability-block.hbs', 'systems/fvtt-dark-stars/templates/partials/partial-actor-ability-block.hbs',
'systems/fvtt-dark-stars/templates/partials/partial-actor-status.hbs', 'systems/fvtt-dark-stars/templates/partials/partial-actor-status.hbs',
'systems/fvtt-dark-stars/templates/partials/partial-options-abilities.hbs',
'systems/fvtt-dark-stars/templates/partials/partial-item-nav.hbs', 'systems/fvtt-dark-stars/templates/partials/partial-item-nav.hbs',
'systems/fvtt-dark-stars/templates/partials/partial-item-description.hbs', 'systems/fvtt-dark-stars/templates/partials/partial-item-description.hbs',
'systems/fvtt-dark-stars/templates/partials/partial-actor-equipment.hbs' 'systems/fvtt-dark-stars/templates/partials/partial-actor-equipment.hbs'
@ -256,141 +249,37 @@ 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) { static async rollDarkStars(rollData) {
let actor = game.actors.get(rollData.actorId) let actor = game.actors.get(rollData.actorId)
if (rollData.tokenId) {
actor = game.canvas.tokens.get(rollData.tokenId).actor
}
// Specific attribute
if (rollData.attr) {
rollData.isSuccess = false
rollData.isFailure = false
rollData.targetNumber = Math.max( rollData.attr.value + rollData.attributeModifier, 0)
let myRoll = await new Roll("1d10").roll()
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
if (myRoll.total <= rollData.targetNumber) {
rollData.isSuccess = true
rollData.isFailure = false
}
rollData.roll = foundry.utils.duplicate(myRoll)
rollData.diceResult = myRoll.total
let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/chat-attribute-result.hbs`, rollData)
})
msg.setFlag("world", "darkstars-roll-data", rollData)
return
}
// ability/save/size => 0 // ability/save/size => 0
rollData.percentValue = 0 rollData.percentValue = 0
if (rollData.skill) { if ( rollData.mode == "skill") {
rollData.percentValue = rollData.skill.total rollData.percentValue = rollData.skill.total
} }
if (rollData.synergyBonus) {
rollData.percentValue += rollData.synergyBonus
}
if (rollData.extraTime) {
rollData.percentValue += 30
}
rollData.percentValue += rollData.bonusMalus rollData.percentValue += rollData.bonusMalus
rollData.diceFormula = "1d100" rollData.diceFormula = "1d100"
if (rollData.isAboveEffectiveRange) {
rollData.percentValue -= 30
rollData.percentValue = Math.max(0, rollData.percentValue)
}
if (rollData.mode == "weapon") {
rollData.locationMalus = this.getAimingMalus(rollData.weaponAiming)
rollData.percentValue += rollData.locationMalus
}
rollData.percentValue = Math.max(rollData.percentValue, 0)
// Performs roll // Performs roll
console.log("Roll formula", rollData.diceFormula)
let myRoll = rollData.roll let myRoll = rollData.roll
if (!myRoll) { // New rolls only of no rerolls if (!myRoll) { // New rolls only of no rerolls
myRoll = await new Roll(rollData.diceFormula).roll() myRoll = new Roll(rollData.diceFormula).roll({ async: false })
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
} }
rollData.roll = foundry.utils.duplicate(myRoll) rollData.roll = myRoll
rollData.diceResult = myRoll.total rollData.diceResult = myRoll.total
rollData.isCriticalSuccess = rollData.diceResult <= rollData.skill.derivated.value rollData.isSuccess = rollData.diceResult <= rollData.percentValue
rollData.isCriticalFailure = rollData.diceResult == 100 rollData.isFailure = rollData.diceResult > rollData.percentValue
rollData.isSuccess = rollData.diceResult == 1 || rollData.diceResult <= rollData.percentValue
rollData.isFailure = rollData.diceResult == 100 || rollData.diceResult > rollData.percentValue
rollData.degrees = Math.floor((rollData.percentValue - rollData.diceResult) / 10)
rollData.damageMultiplier = rollData.isCriticalSuccess ? 2 : 1
if (rollData.reroll) {
actor.modifyRerolls(-1)
rollData.rerolls = 0 // DIsable rerolls
}
if (rollData.mode == "weapon") {
if (rollData.weaponAiming == "none") {
let rollLoc = new Roll("1d10").roll({ async: false })
rollData.weaponAiming = this.getAimingLocation(rollLoc.total)
}
// Compute
rollData.locationMultiplier = this.locationMultiplier(rollData.weaponAiming)
}
// Task management
if (rollData.taskId) {
let task = actor.getItem(rollData.taskId)
console.log(" Task", task, rollData.taskId)
if (task) {
let newCumulated = rollData.degrees + task.system.cumulated
let nbrolls = task.system.nbrolls + 1
task.update({ 'system.cumulated': newCumulated, 'system.nbrolls': nbrolls })
rollData.taskName = task.name
rollData.taskCumulated = newCumulated
rollData.taskNbrolls = nbrolls
}
}
let msg = await this.createChatWithRollMode(rollData.alias, { let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/chat-generic-result.hbs`, rollData) content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/chat-generic-result.hbs`, rollData)
}) })
console.log("Rolldata result", rollData) console.log("Rolldata result", rollData)
msg.setFlag("world", "darkstars-roll-data", rollData) msg.setFlag("world", "roll-data", rollData)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -412,19 +301,6 @@ export class DarkStarsUtility {
static getUsers(filter) { static getUsers(filter) {
return game.users.filter(filter).map(user => user.id); return game.users.filter(filter).map(user => user.id);
} }
/* -------------------------------------------- */
static async chatMessageHandler(message, html, data) {
const chatCard = html.find('.gm-actions')
if (chatCard.length > 0) {
// If the user is the message author or the actor owner, proceed
const actor = game.actors.get(data.message.speaker.actor)
if (actor?.isOwner) return
else if (game.user.isGM || data.author.id === game.user.id) return
const divButtons = chatCard.find('.gm-actions')
divButtons.hide()
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static getWhisperRecipients(rollMode, name) { static getWhisperRecipients(rollMode, name) {
switch (rollMode) { switch (rollMode) {
@ -442,7 +318,7 @@ export class DarkStarsUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static blindMessageToGM(chatOptions) { static blindMessageToGM(chatOptions) {
let chatGM = foundry.utils.duplicate(chatOptions); let chatGM = duplicate(chatOptions);
chatGM.whisper = this.getUsers(user => user.isGM); chatGM.whisper = this.getUsers(user => user.isGM);
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content; chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
console.log("blindMessageToGM", chatGM); console.log("blindMessageToGM", chatGM);
@ -503,15 +379,9 @@ export class DarkStarsUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static getBasicRollData() { static getBasicRollData() {
let rollData = { let rollData = {
rollId: foundry.utils.randomID(16), rollId: randomID(16),
rollMode: game.settings.get("core", "rollMode"), rollMode: game.settings.get("core", "rollMode"),
bonusMalus: 0, bonusMalus : 0
isAboveEffectiveRange: false,
weaponAiming: "none",
synergyBonus: 0,
extraTime: false,
attributeModifier: 0,
config: game.system.darkstars.config,
} }
DarkStarsUtility.updateWithTarget(rollData) DarkStarsUtility.updateWithTarget(rollData)
return rollData return rollData

View File

@ -1,6 +0,0 @@
[Dolphin]
HeaderColumnWidths=301,118,148,122
Timestamp=2024,1,26,8,35,29.906
Version=4
ViewMode=1
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000208

View File

@ -1,7 +0,0 @@
2024/06/12-11:13:40.413261 7f3f0d6006c0 Recovering log #206
2024/06/12-11:13:40.424230 7f3f0d6006c0 Delete type=3 #204
2024/06/12-11:13:40.424287 7f3f0d6006c0 Delete type=0 #206
2024/06/12-11:16:23.489560 7f3f060006c0 Level-0 table #211: started
2024/06/12-11:16:23.489605 7f3f060006c0 Level-0 table #211: 0 bytes OK
2024/06/12-11:16:23.520840 7f3f060006c0 Delete type=0 #209
2024/06/12-11:16:23.590686 7f3f060006c0 Manual compaction at level-0 from '!folders!MA6uFJMVebGeayIk' @ 72057594037927935 : 1 .. '!items!zhjdppKgrON7wJn7' @ 0 : 0; will stop at (end)

View File

@ -1,7 +0,0 @@
2024/06/12-11:13:16.247740 7f3f0ea006c0 Recovering log #202
2024/06/12-11:13:16.258091 7f3f0ea006c0 Delete type=3 #200
2024/06/12-11:13:16.258153 7f3f0ea006c0 Delete type=0 #202
2024/06/12-11:13:34.719686 7f3f060006c0 Level-0 table #207: started
2024/06/12-11:13:34.719708 7f3f060006c0 Level-0 table #207: 0 bytes OK
2024/06/12-11:13:34.726803 7f3f060006c0 Delete type=0 #205
2024/06/12-11:13:34.733250 7f3f060006c0 Manual compaction at level-0 from '!folders!MA6uFJMVebGeayIk' @ 72057594037927935 : 1 .. '!items!zhjdppKgrON7wJn7' @ 0 : 0; will stop at (end)

Binary file not shown.

15
packs/armor.db Normal file
View File

@ -0,0 +1,15 @@
{"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.&nbsp;</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.&nbsp;</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>&nbsp;</p>\n<p>&nbsp;</p>\n<p>&nbsp;</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.&nbsp;</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.&nbsp;</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"}

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000199

View File

@ -1,8 +0,0 @@
2024/02/25-13:11:04.806524 7f0422a006c0 Recovering log #197
2024/02/25-13:11:04.817703 7f0422a006c0 Delete type=3 #195
2024/02/25-13:11:04.817799 7f0422a006c0 Delete type=0 #197
2024/02/25-13:14:07.532693 7f0421a006c0 Level-0 table #202: started
2024/02/25-13:14:07.532731 7f0421a006c0 Level-0 table #202: 0 bytes OK
2024/02/25-13:14:07.539153 7f0421a006c0 Delete type=0 #200
2024/02/25-13:14:07.539281 7f0421a006c0 Manual compaction at level-0 from '!items!0JWjCJaD6OOouqTj' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.539306 7f0421a006c0 Manual compaction at level-1 from '!items!0JWjCJaD6OOouqTj' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/02/25-13:04:05.224949 7f0428e006c0 Recovering log #193
2024/02/25-13:04:05.236046 7f0428e006c0 Delete type=3 #191
2024/02/25-13:04:05.236134 7f0428e006c0 Delete type=0 #193
2024/02/25-13:10:09.480522 7f0421a006c0 Level-0 table #198: started
2024/02/25-13:10:09.480555 7f0421a006c0 Level-0 table #198: 0 bytes OK
2024/02/25-13:10:09.486678 7f0421a006c0 Delete type=0 #196
2024/02/25-13:10:09.493365 7f0421a006c0 Manual compaction at level-0 from '!items!0JWjCJaD6OOouqTj' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.499939 7f0421a006c0 Manual compaction at level-1 from '!items!0JWjCJaD6OOouqTj' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000201

View File

@ -1,7 +0,0 @@
2024/06/12-11:13:40.426654 7f3f0ea006c0 Recovering log #199
2024/06/12-11:13:40.437435 7f3f0ea006c0 Delete type=3 #197
2024/06/12-11:13:40.437506 7f3f0ea006c0 Delete type=0 #199
2024/06/12-11:16:23.521086 7f3f060006c0 Level-0 table #204: started
2024/06/12-11:16:23.521151 7f3f060006c0 Level-0 table #204: 0 bytes OK
2024/06/12-11:16:23.553911 7f3f060006c0 Delete type=0 #202
2024/06/12-11:16:23.590700 7f3f060006c0 Manual compaction at level-0 from '!folders!47aGmBuk1mHtbFFU' @ 72057594037927935 : 1 .. '!items!zwMpjsE84sk26eej' @ 0 : 0; will stop at (end)

View File

@ -1,7 +0,0 @@
2024/06/12-11:13:16.262812 7f3f0d6006c0 Recovering log #195
2024/06/12-11:13:16.272606 7f3f0d6006c0 Delete type=3 #193
2024/06/12-11:13:16.272662 7f3f0d6006c0 Delete type=0 #195
2024/06/12-11:13:34.727044 7f3f060006c0 Level-0 table #200: started
2024/06/12-11:13:34.727098 7f3f060006c0 Level-0 table #200: 0 bytes OK
2024/06/12-11:13:34.733076 7f3f060006c0 Delete type=0 #198
2024/06/12-11:13:34.733265 7f3f060006c0 Manual compaction at level-0 from '!folders!47aGmBuk1mHtbFFU' @ 72057594037927935 : 1 .. '!items!zwMpjsE84sk26eej' @ 0 : 0; will stop at (end)

View File

@ -1 +0,0 @@
MANIFEST-000254

View File

View File

@ -1,7 +0,0 @@
2024/06/12-11:13:40.356313 7f3f0d6006c0 Recovering log #252
2024/06/12-11:13:40.366003 7f3f0d6006c0 Delete type=3 #250
2024/06/12-11:13:40.366126 7f3f0d6006c0 Delete type=0 #252
2024/06/12-11:16:23.317811 7f3f060006c0 Level-0 table #257: started
2024/06/12-11:16:23.317841 7f3f060006c0 Level-0 table #257: 0 bytes OK
2024/06/12-11:16:23.355645 7f3f060006c0 Delete type=0 #255
2024/06/12-11:16:23.460439 7f3f060006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

View File

@ -1,7 +0,0 @@
2024/06/12-11:13:16.189039 7f3f0ea006c0 Recovering log #248
2024/06/12-11:13:16.200829 7f3f0ea006c0 Delete type=3 #246
2024/06/12-11:13:16.200927 7f3f0ea006c0 Delete type=0 #248
2024/06/12-11:13:34.657802 7f3f060006c0 Level-0 table #253: started
2024/06/12-11:13:34.657837 7f3f060006c0 Level-0 table #253: 0 bytes OK
2024/06/12-11:13:34.663971 7f3f060006c0 Delete type=0 #251
2024/06/12-11:13:34.681143 7f3f060006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000254

View File

View File

@ -1,7 +0,0 @@
2024/06/12-11:13:40.368093 7f3f0ea006c0 Recovering log #252
2024/06/12-11:13:40.379978 7f3f0ea006c0 Delete type=3 #250
2024/06/12-11:13:40.380078 7f3f0ea006c0 Delete type=0 #252
2024/06/12-11:16:23.408873 7f3f060006c0 Level-0 table #257: started
2024/06/12-11:16:23.408929 7f3f060006c0 Level-0 table #257: 0 bytes OK
2024/06/12-11:16:23.460072 7f3f060006c0 Delete type=0 #255
2024/06/12-11:16:23.460493 7f3f060006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

View File

@ -1,7 +0,0 @@
2024/06/12-11:13:16.204139 7f3f0d6006c0 Recovering log #248
2024/06/12-11:13:16.215399 7f3f0d6006c0 Delete type=3 #246
2024/06/12-11:13:16.215490 7f3f0d6006c0 Delete type=0 #248
2024/06/12-11:13:34.692534 7f3f060006c0 Level-0 table #253: started
2024/06/12-11:13:34.692577 7f3f060006c0 Level-0 table #253: 0 bytes OK
2024/06/12-11:13:34.698872 7f3f060006c0 Delete type=0 #251
2024/06/12-11:13:34.713306 7f3f060006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000128

View File

View File

@ -1,8 +0,0 @@
2024/02/25-13:11:04.911848 7f0422a006c0 Recovering log #126
2024/02/25-13:11:04.922320 7f0422a006c0 Delete type=3 #124
2024/02/25-13:11:04.922392 7f0422a006c0 Delete type=0 #126
2024/02/25-13:14:07.578457 7f0421a006c0 Level-0 table #131: started
2024/02/25-13:14:07.578513 7f0421a006c0 Level-0 table #131: 0 bytes OK
2024/02/25-13:14:07.585654 7f0421a006c0 Delete type=0 #129
2024/02/25-13:14:07.592632 7f0421a006c0 Manual compaction at level-0 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.592676 7f0421a006c0 Manual compaction at level-1 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/02/25-13:04:05.332283 7f0428e006c0 Recovering log #122
2024/02/25-13:04:05.343337 7f0428e006c0 Delete type=3 #120
2024/02/25-13:04:05.343387 7f0428e006c0 Delete type=0 #122
2024/02/25-13:10:09.539934 7f0421a006c0 Level-0 table #127: started
2024/02/25-13:10:09.539956 7f0421a006c0 Level-0 table #127: 0 bytes OK
2024/02/25-13:10:09.546327 7f0421a006c0 Delete type=0 #125
2024/02/25-13:10:09.552649 7f0421a006c0 Manual compaction at level-0 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.552755 7f0421a006c0 Manual compaction at level-1 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000066

View File

@ -1,8 +0,0 @@
2024/06/12-11:13:40.398008 7f3f0d6006c0 Recovering log #64
2024/06/12-11:13:40.408278 7f3f0d6006c0 Delete type=3 #62
2024/06/12-11:13:40.408353 7f3f0d6006c0 Delete type=0 #64
2024/06/12-11:16:23.554104 7f3f060006c0 Level-0 table #69: started
2024/06/12-11:16:23.554144 7f3f060006c0 Level-0 table #69: 0 bytes OK
2024/06/12-11:16:23.590465 7f3f060006c0 Delete type=0 #67
2024/06/12-11:16:23.590737 7f3f060006c0 Manual compaction at level-0 from '!folders!La3YsNYFddQnmsba' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)
2024/06/12-11:16:23.590756 7f3f060006c0 Manual compaction at level-1 from '!folders!La3YsNYFddQnmsba' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/06/12-11:13:16.233304 7f3f0ea006c0 Recovering log #60
2024/06/12-11:13:16.243341 7f3f0ea006c0 Delete type=3 #58
2024/06/12-11:13:16.243395 7f3f0ea006c0 Delete type=0 #60
2024/06/12-11:13:34.713340 7f3f060006c0 Level-0 table #65: started
2024/06/12-11:13:34.713379 7f3f060006c0 Level-0 table #65: 0 bytes OK
2024/06/12-11:13:34.719558 7f3f060006c0 Delete type=0 #63
2024/06/12-11:13:34.733213 7f3f060006c0 Manual compaction at level-0 from '!folders!La3YsNYFddQnmsba' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)
2024/06/12-11:13:34.733290 7f3f060006c0 Manual compaction at level-1 from '!folders!La3YsNYFddQnmsba' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000199

View File

View File

@ -1,8 +0,0 @@
2024/02/25-13:11:04.819236 7f0428e006c0 Recovering log #197
2024/02/25-13:11:04.829162 7f0428e006c0 Delete type=3 #195
2024/02/25-13:11:04.829232 7f0428e006c0 Delete type=0 #197
2024/02/25-13:14:07.545758 7f0421a006c0 Level-0 table #202: started
2024/02/25-13:14:07.545813 7f0421a006c0 Level-0 table #202: 0 bytes OK
2024/02/25-13:14:07.552067 7f0421a006c0 Delete type=0 #200
2024/02/25-13:14:07.565492 7f0421a006c0 Manual compaction at level-0 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!zaxcUsWUZ1vvl0p8' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.565529 7f0421a006c0 Manual compaction at level-1 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!zaxcUsWUZ1vvl0p8' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/02/25-13:04:05.239972 7f0423e006c0 Recovering log #193
2024/02/25-13:04:05.249512 7f0423e006c0 Delete type=3 #191
2024/02/25-13:04:05.249560 7f0423e006c0 Delete type=0 #193
2024/02/25-13:10:09.473431 7f0421a006c0 Level-0 table #198: started
2024/02/25-13:10:09.473459 7f0421a006c0 Level-0 table #198: 0 bytes OK
2024/02/25-13:10:09.480345 7f0421a006c0 Delete type=0 #196
2024/02/25-13:10:09.493344 7f0421a006c0 Manual compaction at level-0 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!zaxcUsWUZ1vvl0p8' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.499930 7f0421a006c0 Manual compaction at level-1 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!zaxcUsWUZ1vvl0p8' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000075

View File

View File

@ -1,8 +0,0 @@
2024/02/25-13:11:04.925036 7f0428e006c0 Recovering log #73
2024/02/25-13:11:04.935090 7f0428e006c0 Delete type=3 #71
2024/02/25-13:11:04.935353 7f0428e006c0 Delete type=0 #73
2024/02/25-13:14:07.585843 7f0421a006c0 Level-0 table #78: started
2024/02/25-13:14:07.585896 7f0421a006c0 Level-0 table #78: 0 bytes OK
2024/02/25-13:14:07.592513 7f0421a006c0 Delete type=0 #76
2024/02/25-13:14:07.592640 7f0421a006c0 Manual compaction at level-0 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.592670 7f0421a006c0 Manual compaction at level-1 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/02/25-13:04:05.347457 7f0423e006c0 Recovering log #69
2024/02/25-13:04:05.356885 7f0423e006c0 Delete type=3 #67
2024/02/25-13:04:05.356934 7f0423e006c0 Delete type=0 #69
2024/02/25-13:10:09.533502 7f0421a006c0 Level-0 table #74: started
2024/02/25-13:10:09.533526 7f0421a006c0 Level-0 table #74: 0 bytes OK
2024/02/25-13:10:09.539823 7f0421a006c0 Delete type=0 #72
2024/02/25-13:10:09.552630 7f0421a006c0 Manual compaction at level-0 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.552738 7f0421a006c0 Manual compaction at level-1 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000221

View File

@ -1,7 +0,0 @@
2024/06/12-11:13:40.440639 7f3f0d6006c0 Recovering log #219
2024/06/12-11:13:40.450523 7f3f0d6006c0 Delete type=3 #217
2024/06/12-11:13:40.450593 7f3f0d6006c0 Delete type=0 #219
2024/06/12-11:16:23.645974 7f3f060006c0 Level-0 table #224: started
2024/06/12-11:16:23.646004 7f3f060006c0 Level-0 table #224: 0 bytes OK
2024/06/12-11:16:23.683161 7f3f060006c0 Delete type=0 #222
2024/06/12-11:16:23.683408 7f3f060006c0 Manual compaction at level-0 from '!folders!2iZtDz80npHPIwkS' @ 72057594037927935 : 1 .. '!items!zyFR9C1jBTeFzbxg' @ 0 : 0; will stop at (end)

View File

@ -1,7 +0,0 @@
2024/06/12-11:13:16.276335 7f3f0ea006c0 Recovering log #215
2024/06/12-11:13:16.287074 7f3f0ea006c0 Delete type=3 #213
2024/06/12-11:13:16.287130 7f3f0ea006c0 Delete type=0 #215
2024/06/12-11:13:34.733411 7f3f060006c0 Level-0 table #220: started
2024/06/12-11:13:34.733492 7f3f060006c0 Level-0 table #220: 0 bytes OK
2024/06/12-11:13:34.741601 7f3f060006c0 Delete type=0 #218
2024/06/12-11:13:34.741825 7f3f060006c0 Manual compaction at level-0 from '!folders!2iZtDz80npHPIwkS' @ 72057594037927935 : 1 .. '!items!zyFR9C1jBTeFzbxg' @ 0 : 0; will stop at (end)

Binary file not shown.

86
packs/perks.db Normal file
View File

@ -0,0 +1,86 @@
{"name":"Upgrade Tools of the Trade","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Technician","requirements":"Requires a relevant Engineering skill of 60%","xpcost":100,"cost":0,"description":"<p>An engineer can upgrade one piece of equipment per character in the group, to upgrade the equipment they must succeed in a relevant skill check. For each degree of success, the item receives one of the bonuses, bonuses do not stack +10% on skill checks with the item, +25% to structure points (SP) or armour (AP), round up, +50% more range of the item, +2 to Stealth Rating, +2 To Sensor Rating, Double to storage capacity of computer systems, +2 To Programme Strength, +20% to Firewall Strength. The upgrade can be performed again once the relevant skill of the technician has increased.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.9T7T3uEaVyxdWH3H"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672224333744,"modifiedTime":1672355593175,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"0LA7gMBDogO56AZK"}
{"name":"Mr Roboto","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":500,"cost":0,"description":"<p>Robotic and cybernetic characters can take this perk. The character now has a +20% on the number of structure points or Hit points that a robotic or cybernetic component has (round up). It only applies to components embedded in part of their body or cyber replacements parts.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.srENv7lt6bATGgi9"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353569380,"modifiedTime":1672355542183,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"10oeP0MOIcz8dyMr"}
{"name":"Medical Technician","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":50,"description":"<p>The character is a paramedic or doctor, a true health care professional. The character receives a +10% on all skill checks in science and medical related checks. +50 Humanity Points. Once per session the character can re-roll a failed medical check on another character. Once per session the character can heal a total of their intelligence in hit points on all the characters, they are treating dividing up their intelligence state between each of their patients. EG character with 6 Intelligence healing 2 people can heal each of them an additional 3 Hit points. These points are healed over the day and not healed instantly. Requires a medical skill of<br>40%</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.mlhAYRLFrXgcX8Wi"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672220068919,"modifiedTime":1672355539616,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"1chLXnUgsPhV50XV"}
{"name":"Weapons Designer","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Technician","requirements":"Weapons Engineering skill of 60%","xpcost":200,"cost":0,"description":"<p>The technician can upgrade weapons or create new designs. The weapons designer can add one property per degree of success they achieve, the upgrade can only be performed on a weapon or weapon linked system. +2 damage and penetration (+20% for large military weapons like cannons), +50% to the ammunition capacity, +50% to the range of the weapon, +2 to sensor rating of the sensors.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.rZwgaZrEj2LRFpue"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672224421842,"modifiedTime":1672355597039,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"20dcF0rrpuAUHE6g"}
{"name":"Research Scientist","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Head Stooge","requirements":"one science skill 50%","xpcost":200,"cost":0,"description":"<p>The stooge knows intimately a research scientist, and that scientist can perform research tasks for the stooge. The stooge has promised them something in return and may or may not fulfil it. The scientist is motivated and if helping other characters or researching on their own provides 10% bonus to all science related skills. If using the research rules this is 2 automatic successes per month.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.9c0zzM69TiIMfAdx"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672352184025,"modifiedTime":1672355561632,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"3pxRZhbGH8GROoO2"}
{"name":"Berserker","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":10,"description":"<p>A character with this perk is a berserker! Maybe it&rsquo;s their Scandinavian ancestry, or they can just get really, really angry. Once per game session (or after the GM determines enough in-game time has passed) the character may enter an enraged state. This is done as a free action and must be declared before initiative is rolled. When enraged the character literally goes berserk, tearing into enemies with the most brutal melee weapon they can get their hands on. The enraged state lasts for a number of combat rounds equal to the character&rsquo;s Constitution stat. At the end of this time, the character drops to zero Fatigue until they have rested for a significant time (up to the GM but 30-60 mins).</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.eVGZVDOG2Aee3KFj"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672175662541,"modifiedTime":1672355481952,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"4CqVE4Yzgt5ZZEH3"}
{"name":"Warrior Soldier","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":50,"description":"<p>The character is a warrior and more skilled than other characters at combat operations. The character receives a +10% on all recon checks to spot ambushes or concealed equipment, +10% on Called Shots or Attacks, +5 Fatigue Points. Once per session the character can re-roll a failed recon check. &nbsp;Requires a combat skill of 40%</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.5BazvYNhaVollVkp"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672219977468,"modifiedTime":1672355595727,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"4vzWgvOfVMRalYn1"}
{"name":"Spear Master","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":1000,"cost":0,"description":"<p>Spear Masters have mastered cuts, thrusts and blocks. Spear Masters are particularly deadly closing in the opening moments of combat. Spears will have their special properties doubled. Add +2 to damage.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.oDMfgKVzlWjPaesC"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353864875,"modifiedTime":1672355569200,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"6FsoEyGjpqVPz2YL"}
{"name":"Cyber Gang","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Head Stooge","requirements":"streetwise 50%","xpcost":300,"cost":0,"description":"<p>The stooge has been supplying a cyber gang with free stuff in debiting them to the stooge.<br>They don&rsquo;t like the stooge but owe them. The stooge makes a call and a persuade check, if that<br>check succeeds 1d6 cyber gangers will arrive in 2d6 hours to assist the stooge in whatever enterprise they have.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.9Ll1L9PtEzfMoE9Q"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672352086849,"modifiedTime":1672355488296,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"7T2lI6xo821zeAeP"}
{"name":"Fan Rage","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Celebrity","requirements":"50% in one performance skill","xpcost":100,"cost":0,"description":"<p>The celebrity has inspired their fans to attack a company, individual or political group or even boycott that group. For all intents and purpose the fans will cause a ruckus and at least are very distracting. Its every likely that the issue will be discussed in the popular spheres of news. The&nbsp;<br>gm must decide what this does for the players benefit but at the very least it should bring attention to the issues. Mechanically for each degree of success the organisation will receive a global penalty of 5% per degree of success to all their tasks as fans sabotage their operations. For each degree of success this activity will continue for 1 week.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.KvZHroToAnDx5aIW"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672226287149,"modifiedTime":1672355499978,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"8A8b7kReRGV9bCC0"}
{"name":"Natural Pilot","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":200,"cost":0,"description":"<p>Your character is highly attuned to driving and controlling vehicles. All Pilot skills gain a +10% bonus.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.7il0tv3FPe36iC2w"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353350004,"modifiedTime":1672355547039,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"9LzjO8uycbp9WexV"}
{"name":"Non-Lethal Expert","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Enforcer","requirements":"50% unarmed, melee or weapon skill","xpcost":100,"cost":0,"description":"<p>The enforcer has learned to get more nonlethal effect from their non-lethal weapons. These weapons add +2 to penetration and add an extra 2d6 fatigue points of damage. This can include unarmed attacks.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.oJQEqIi7HArZk2rB"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672351399763,"modifiedTime":1672355548087,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"9t50XDpgg2dZpaFY"}
{"name":"Contacts in high places","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Stringer","requirements":"50% Social and Style","xpcost":200,"cost":0,"description":"<p>The stringer has contacts that can assist them, perhaps law enforcement, government, corporations, syndicate members or military. The contact can help the stringer in any way they can. This is a more powerful perk than the contacts perk and can only be used once per Scenario. The GM will need to decide what the contact can do, but it could be arrange passage out of a warzone, begin legal proceedings against a corporation, give the stringer 10,000 credits.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.VT6i6kolHJCQu75a"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672351621771,"modifiedTime":1672355486151,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"B2OjSQd9vK3tsDLI"}
{"name":"Fire Discipline","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"Ballistics skill of 50 or more","xpcost":100,"cost":0,"description":"<p>When you receive a command from a leader who spent an action issuing the command and directing fire, then provided that leader has the Let&rsquo;s Rock perk or the Leader perk, you receive a bonus on 10% on your next Ballistics check.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.cxhRTVKlmvOUHpuG"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672354623274,"modifiedTime":1672355511822,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"B8Mhgv9oeWHd7wkG"}
{"name":"Resources","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":300,"cost":0,"description":"<p>This perk allows the character to amass a series of lines of credit, revenue, favours and good will. You can make a Persuasion or Manipulation roll to immediately amass an amount of cash that can be collected from any major bank. For every 10% the character makes their skill check by, the character amasses 3,000 credits that can be immediately used. You don&rsquo;t even have to pay it back. This can be done once per session and every time the perk is used successfully there is a 20% chance that those avenues of resources have dried up; the character loses this perk. The perk can be repurchased any time it is lost by spending the XP again.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.TDLGq2a8TG7zKxDf"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672354024819,"modifiedTime":1672355562840,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"CNnuJwSUyfRpko2S"}
{"name":"Multi Skilled","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":200,"cost":0,"description":"<p>The character can select a second role and acquire those second set of perks. The character will have to pay 20% more experience for Perks in the second role.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.0LAHp36U3Tpkj1j6"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672354694114,"modifiedTime":1672355544873,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"CufMdkFOPEIMPSOl"}
{"name":"Technician","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":50,"description":"<p>The character is a technician and is able to design and repair all sorts of gadgets. Most engineers have a speciality field, weapons, cybernetics, electronics etc. All technicians receive one re-roll per session on a failed repair attempt. All technicians receive a +10% to all engineering and science skills except medicine, surgery, first aid, psychiatry, and pharmacology.</p>\n<p>Once per session the technician can repair a completely broken component by jury rigging<br>it, this will add a temporary 4d6 Structure point, this repair will last until the next scene.<br>Requires an engineering or science skill of 40%</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.Z0t7eFFVK1NIhK2y"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672220148447,"modifiedTime":1672355578720,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"DYFsikJWxjrVOf6N"}
{"name":"Get to the Chopper","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"Starting Initiative of 3 or less","xpcost":100,"cost":0,"description":"<p>Even though your character is slow on their reflexes, when you hear commands from leaders, you react faster. If your character receives a command that they want to react to, regardless of the leadership qualities of that character, you can take your next action immediately after that command. Your initiative order stays the same, but you take your next action sooner or later and perform the action. This can only be performed once per round, and the &ldquo;leader&rdquo; character must have used an action to issue the command.</p>\n<p>Example: Brink has the perk Get to the Chopper. Wilmer issues a command on action 24, for everyone to take cover behind the wall. Brink can now move his action on 12 to 23 and<br>use that to take cover.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.Z02xElfWh1A5BuBl"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672354269627,"modifiedTime":1672355513768,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"FKdhowXqf1yH3GsW"}
{"name":"Combat Medic","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Medical Technician","requirements":"Requires First Aid 50%","xpcost":200,"cost":0,"description":"<p>The character is used to performing under fire and getting their team back in the fight. The character can spend 1 or more actions to perform first aid and battlefield surgery. The character makes a medical check, and for each degree of success may spend 1 action treating the patient. The medic will instantly heal 1d3 Hit points per action spent.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.ox2rNWmf2jKYKTBk"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672223509693,"modifiedTime":1672355483944,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"G2fnx4Xr8BylrtJS"}
{"name":"Powerful footage","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Stringer","requirements":"Art Film, language 50%","xpcost":200,"cost":0,"description":"<p>The stringer presents information in such a way that the entire group receives a bonus to their persuade checks. For each degree of success the stringers composition adds 10% to all social checks of the characters for the scene.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.5zacbKu8nY5UiZRF"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672351710247,"modifiedTime":1672355550303,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"GHhjLSFS7FTd3fSj"}
{"name":"Master Of Weapons","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":800,"cost":0,"description":"<p>Any weapon the character uses will have its special properties doubled. Ranged weapons will have their effective range increased: Close to Short, Short to Medium, and Medium to Long. Any other weapon without a special property will receive +2 bonus to Penetration.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.PsKG66u8SlJDIz6z"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353757075,"modifiedTime":1672355538552,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"Hfl4G5tTuG3CUh3G"}
{"name":"Tough-Minded","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":30,"description":"<p>Mind control doesn&rsquo;t work too well on you. In fact, normal people can&rsquo;t even hypnotise you. Attempts at mind control on you suffer an additional 40% penalty.<br><br>30 SS cost</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.P2EAh9Zthx8E6iTM"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672109836110,"modifiedTime":1672355587568,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"HsAGgMseZMPoydb7"}
{"name":"Trauma Specialist","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Medical Technician","requirements":"Requires Medicine 50%","xpcost":200,"cost":0,"description":"<p>The character receives a re-roll on all attempts to stabilise a dying patient. If the patient suffered hit point loss from bleeding that damage is all automatically recovered.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.o3d4AiZ7h4i0ZqNy"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672222875444,"modifiedTime":1672355589792,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"Jj2ejcHHwOJYVI9H"}
{"name":"Grease Monkey Vehicle","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Technician","requirements":"Related Engineering skill of 60%","xpcost":300,"cost":0,"description":"<p>The technician is able to fix repair and modify vehicles like no one else. For each degree of success the grease monkey can repair 20% of the structure of the vehicle per 1 hour of work. If modifying a vehicle the grease monkey can add the following upgrades one per degree of success. +20% to fuel capacity or operation time, +25% to top speed, +25% power generation, +25% to available spaces<br>by more efficiently using space and combining components, in vehicles with no spaces left the vehicle receives 25% of its base spaces as free space to add new components.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.1zdpal8OOZcz114F"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672225016241,"modifiedTime":1672355514824,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"L2qCQyJsYCW4yyDw"}
{"name":"Let's Rock","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"Starting Initiative of 4 or greater","xpcost":400,"cost":0,"description":"<p>This is a leadership perk for characters with either Persuasion and Manipulation or the Professional skills Military Tactics or Battle Tactics. This character is defined as the leader. The leader can trade their own actions to one or more characters. If they fail their roll however they lose the action they attempted the roll on and cannot trade any actions. On the first round of combat, the leader can make a skill check on the relevant skill to trade their actions to another character. A character can only receive one action in this way and the leader who trades their action will lose that action from the next action they take. One action plus another action can be traded per degree of success; this must be traded to a character who has not already received a traded action. The character who receives the traded action will then take that action in the next initiative segment after the leader&rsquo;s first action. The leader may perform Let&rsquo;s Rock alongside another action by receiving -20% on both actions (as per the normal rules for taking multiple actions).</p>\n<p><br>Example: Jacks uses Let&rsquo;s Rock on her Battle Tactics check. She rolls 24 for Initiative and has 4&nbsp; actions, and Tom and Linda have two actions each. Their two actions start on 14 and 12&nbsp; espectively. On action 24 Jacks uses Let&rsquo;s Rock, while also shooting with her Squad Automatic weapon. Her Battle Tactics is 80%, and her Ballistics Weapons is 80%, but she receives -20% on both skills. She rolls 4% on Ballistics Weapons and 40% on Battle Tactics. This gives her two&nbsp; degrees of success, and she will lose her next two actions, as two actions were traded to the other characters. (Jacks could have traded three actions total, losing three actions.) As she shot her weapon on thefirst action, that is not considered lost. Each character will have their new traded action immediately after the Battle Tactics and Ballistic Weapons checks, in this example action 23. The other characters then take that free action.&nbsp;</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.nBTHDJ9CSAKqEmDa"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672354098844,"modifiedTime":1672355531159,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"MHGTHoscqACAThpT"}
{"name":"The Blue Fury","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Enforcer","requirements":"50% in persuade skill","xpcost":300,"cost":0,"description":"<p>The character first makes a persuade check, telling their law enforcement contacts that they need backup and assistance. The character can summon a horde of police from their contacts, police will cross jurisdictional lines to assist the character arriving as quickly as their vehicles can carry them. For each degree of success 1d6 law enforcement or security guards will descend on the characters location. This will be a very flashy arrival with sirens blaring and blue lights flashing. The police will then assist the character for however many scenes requires the crime to be resolved.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.99R3lYVOTA51piFg"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672351235822,"modifiedTime":1672355580879,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"MYwpEBGq42EEDxIB"}
{"name":"Stamina","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":100,"cost":0,"description":"<p>This perk grants the character a bonus of 10 points to their Fatigue points total. This perk may be taken up to three times.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.akeE7DYXKKaZ1IY0"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353531092,"modifiedTime":1672355570111,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"NUPwbemn6IHjiB3j"}
{"name":"Lowlife Connections","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Fixer","requirements":"streetwise 60%","xpcost":100,"cost":0,"description":"<p>The fixer has focused themselves on connecting with the criminals of society. In any criminal interaction or skill check the fixer receives a re-roll if the action is not going the fixers way. For example extorting some shop keepers, the fixer gets a re-roll because of the criminal connections. The fixer can also send these criminal connections to act on their behalf, and they too will receive a re-roll on the given skill. Once per session the fixer can call in cash favours by making a persuade check. They then will receive 1,000CR per degree of success.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.GrLY5pkUKcZJYbrA"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672352402989,"modifiedTime":1672355534001,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"PITT5ybwaeN3I2VW"}
{"name":"Fang it!","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Road Warrior","requirements":"Pilot or Driving skill of 60%","xpcost":100,"cost":0,"description":"<p>The character can increase the top speed of the vehicle by pushing the vehicle beyond its design limits. The engine plus one component will suffer 1d6 per round of damage from the excessive use but the top speed is increased by 50%. This bonus stacks with all other speed bonuses.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.DnbSyfvfHDsGJCgI"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672225247665,"modifiedTime":1672355510520,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"PT8tRuZs8wq2RWLg"}
{"name":"Therapy","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Medical Technician","requirements":"psychiatry and pharmacology 50%","xpcost":200,"cost":0,"description":"<p>The character can perform therapy along with the use of specific drugs (costing 100 credits per session) to restore humanity to characters that have lost humanity. Each week the character makes a check on their psychiatry, for each degree of success the patient gains 1d3 humanity. The character is never cured of their insanities, but they learn to live with them.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.BIKmhzNci6c400om"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672223388590,"modifiedTime":1672355583231,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"RfXUzc4pS6cQAegd"}
{"name":"Street Fighter","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Warrior Soldier","requirements":"","xpcost":200,"cost":0,"description":"<p>The character is skilled at brawling and street fighting. When facing multiple opponents, the bonus opponents receive from ganging up is reduced by 10% if the character has 50% or more in melee or unarmed combat, 20% if they have 70% or more in melee or unarmed combat and 40% if they have 80% or more.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.cGsAOX9ih3E1BPSA"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672221653110,"modifiedTime":1672355571144,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"S8MjwSmWq1KgVOh9"}
{"name":"Quick on the Draw","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Warrior Soldier","requirements":"","xpcost":200,"cost":0,"description":"<p>The character is fast to act, they roll their normal starting initiative but add an additional d6+2 to the first action, making that action carry forward in the turn order but still taking their second action as it normally would be taken.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.hNvG9jwPxYlZH9Q9"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672221560476,"modifiedTime":1672355553954,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"SmSbd0kTEIsZqxrR"}
{"name":"Luck Of The Leprechaun","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":10,"description":"<p>You get 1 re-roll of any test you make per session. Once used, you must wait for the next game session to use it again. This affects only skill and attribute checks.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.BwKEUssx3VjRgPDn"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672175922559,"modifiedTime":1672355535536,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"UnTUIGtB6nVgLRhn"}
{"name":"Dolla Dolla bills Yall","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Celebrity","requirements":"Requires 50% in one performance skill","xpcost":200,"cost":0,"description":"<p>The character can extract royalties from advertisers or other stooges who like their stuff. They make a persuade check and for each degree of success, receive 1,000 credits in royalty payments, these are sent immediately and thus many potential earnings are lost but they money arrives that day. After these bills are extracted, the Celebrity will need to produce a new work to use this perk again.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.jOHFJtauteWfKO4x"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672226489173,"modifiedTime":1672355491576,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"YDiTFpUIHI5rEwU6"}
{"name":"Armour Affinity","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":400,"cost":0,"description":"<p>The character is used to using armour to its maximum potential. The character can add 10%<br>more armour (round up) to their AP ratings for any armour the character is using. This is only applied to personal armour, and cannot be used with power armour, force fields or vehicles with<br>armour.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.A5EK2oSJaIko8Dv3"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353121661,"modifiedTime":1672355478241,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"YrVss2CRpVAj1QSv"}
{"name":"Road Warrior","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":50,"description":"<p>The character comes from some gang of nomadic vehicle using people. They can count on their clan to assist them. The character is also an amazing pilot or driver. Chose a given pilot skill and the character receives one free re-roll per session using that skill. The character also adds +10% to that skill as a bonus to all rolls.</p>\n<p><br>The character suffers half the normal penalties from performing multiple actions in their given vehicle example if they are on a motor cycle and jumping over a car while shooting a pistol this<br>is normally -20%, however for this character is only -10%. Road warriors can also perform an evasion or dodge using their vehicles, by using an action they can dodge an incoming attack requiring the same or more degrees of success to dodge as the attacker had.</p>\n<p>Requires an piloting skill or driving of 40%</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.T7ydlgx8hjEU9fnE"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672220380805,"modifiedTime":1672355564896,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"YyBN60duFwWHgZ7w"}
{"name":"Distracting Performance","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Celebrity","requirements":"50% in one performance skill","xpcost":390,"cost":0,"description":"<p>The character can use their performance skill to distract NPCs. The character makes a performance check and for each degree of success each viewer, watcher or listener of the performance will need to make a self-control check. If the NPC fails the check they will lose 1 action per degree of success of the Celebrity or will receive a penalty of 10% per degree of success if combat has not begun to their next skill check.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.x3yFdnC7RSR3zxFc"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672226168813,"modifiedTime":1672355490360,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"ZBkzmLxS8rGQEMey"}
{"name":"Fixer","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":50,"description":"<p>The fixer is a criminal or quasi legal person who solves problems, often using contacts and other means. All fixers have multiple networks and contacts, on any given streetwise check the fixer receives +10%. On opposed persuade or intimidation checks the fixer receives +1 automatic success. Once per session the fixer can re-roll a failed streetwise, persuade or intimidation check.<br>Streetwise 40% and Pursuade 40%</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.8sI1IK9ZzLKc3cnP"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672220854620,"modifiedTime":1672355512785,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"ZVyuECQjkD4WDZN9"}
{"name":"Drug Specialist","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Medical Technician","requirements":"Chemistry or Pharmacology 40%","xpcost":200,"cost":0,"description":"<p>The character can make a successful pharmaceutical roll to reduce the addictiveness of a drug being administered by them.&nbsp;</p>\n<p>Characters receiving the drug roll twice for addition and take the most favourable result.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.wqf86rDLNZJCRpub"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672222640304,"modifiedTime":1672355492736,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"a4XJyiqtrlBtgWZc"}
{"name":"Leader","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":50,"description":"<p>Your character is a born leader. When issuing commands which can work with other leadership perks, you can make a skill check associated with that command. If you succeed on that skill check then for each two degrees of success you will provide a bonus of 5% to the characters performing actions relating to that command. If used in long running tasks this counts as 1 degree of success per two degrees of success on your check. Skills which can work with leadership include: Profession Military Forces, Profession Corporate Officer, Profession Science Officer, Military Tactics, Battle Tactics, any Engineering or Science skill, Persuasion and Manipulation, plus any other skills the GM determines. In a given round there can only be one leader issuing commands, but multiple leaders may try. The first leader to issue a command is the leader for all bonuses that round. In long running tasks multiple leaders may issue commands but the players and the GM can choose how these bonuses may be allocated.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.fiYcViRevcQJvOwX"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672176193476,"modifiedTime":1672355529664,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"aTQkUuhATyT4k1N0"}
{"name":"Evasive Driving","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Road Warrior","requirements":"Pilot or Driving skill of 50%","xpcost":200,"cost":0,"description":"<p>When being chased the character receives an additional +10% to their pilot or driving checks, and if there is an opposed roll, they receive an automatic extra success. Each round the character can make one evasive action at no action cost.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.eP2XaLtQPKfEw1l4"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672225160705,"modifiedTime":1672355496305,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"ahcNDD0R4VLR3zSO"}
{"name":"Stubborn","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Warrior Soldier","requirements":"","xpcost":100,"cost":0,"description":"<p>The character has a never give up or never say die attitude, receives a +2 to self-control checks regarding suppressive fire, checks when combat starts in the event of ambush, once per day the character can recover 1d6 Hit Points.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.IGwmHbVkdWNayjEg"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672220960693,"modifiedTime":1672355573536,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"bYCdwZdADnndaIDt"}
{"name":"Ground Work","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Hacker","requirements":"Persuade 50%","xpcost":200,"cost":0,"description":"<p>You have already laid out a series of social engineering attacks on your given target or know someone who did. When attacking that given target all your programs receive +2 to their strength, you also get one re-roll on a run against a physical facilities intrusion counter measure.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.8FMQ4OnK6NuZkTtx"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672225902194,"modifiedTime":1672355515800,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"e6D0WO3pTGKbJR8M"}
{"name":"Improvised Weapons","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":200,"cost":0,"description":"<p>Any item can be used as a weapon. Improvised Weapons allows the character to pick up and use or throw any object as an improvised weapon to greater effect. These objects will inflict between 1d6 and 2d6 plus MCDB, or half MCDB if thrown with larger objects causing more damage.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.wbJczfXVZQyZXtzo"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353215453,"modifiedTime":1672355522392,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"ecKx5H9Zh80PRtFu"}
{"name":"Influence","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":600,"cost":0,"description":"<p>This perk enables a character to gain influence in either a corporation or government branch.<br>This influence can be used to acquire goods, services, resources or other components that the organisation is able to provide.</p>\n<p><br>A normal Persuasion or Manipulation roll is required. If successful, the organisation will attempt to give you what you ask for. The Game Master must decide if this can happen or not, and the Game Master&rsquo;s decisions are final. However, this perk allows you to exert influence remotely via net, letter, fax, phone or face-toface communications.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.x85cjiN1km9mCA7N"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353961385,"modifiedTime":1672355523377,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"fLpYB8rMnvXFtmNL"}
{"name":"Dirt","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Stringer","requirements":"","xpcost":100,"cost":0,"description":"<p>The character has some piece of dirt on a given NPC. By making a verbal threat against the person the stringer unbalances the NPC. The stringer makes an opposed manipulation check to coerce or blackmail the NPC if the stringer wins this test. Then that NPC will receive a -20% to all actions for the scene as they are so disturbed about the information getting out. The Stringer can change the NPC once per week.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.VAuElPlqlS9EdSz4"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672351556106,"modifiedTime":1672355489384,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"gB4bhgty4vBYxoZD"}
{"name":"Natural Aptitude","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":20,"description":"<p>You have a natural aptitude for a non combat skill. You receive a 20% bonus on any checks with the skill, once per game week you can reroll one failed check on that skill.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.DqAGwLpowUl7z1t7"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672175591382,"modifiedTime":1672355546033,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"gbmVPOxEfqGZFhTb"}
{"name":"Tell me the truth","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Stringer","requirements":"50% persuade and manipulate","xpcost":100,"cost":0,"description":"<p>The stringer compels or tricks the truth out of an interview subject. This can be on air or not.<br>The stringer makes a persuade check the subject makes a self-control check. For each degree of success the stringer got, the subject of the interview receives a -1 to their self-control stat for the self-control check.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.mW4yXJQNaoSnYf5V"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672351786648,"modifiedTime":1672355579903,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"gnxr6jGPAyhNyyj1"}
{"name":"Profession Specialty","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":100,"cost":0,"description":"<p>You have a special understanding of one of your skills. Choose a Science, Engineering, Piloting or Professional skill and get +10% bonus on one aspect, for example Alchemy. You can also use the Profession Specialty on Farming and Herding. The bonus is only applied to that aspect of the skill.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.bYGg7iMOrb666qMZ"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353436620,"modifiedTime":1672355552616,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"hpxHz33Rr7i0lVvu"}
{"name":"Secret Paths, Secret Lines","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Hacker","requirements":"Programming or Computer Operation 50%","xpcost":300,"cost":0,"description":"<p>You know some special ways around the network and reduce the penalties for latency and distance by half.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.KgjdSoLbxOQgqvdU"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672225980910,"modifiedTime":1672355567295,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"i0LROD5jLN8CzwXJ"}
{"name":"Syndicate Favours","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Fixer","requirements":"","xpcost":500,"cost":0,"description":"<p>Your character is owed favours from a crime syndicate or cyber criminal organisation. Once per month you can call in that favour. This could either be a syndicate hit man, who can take out a target for you, a group 2d6 of syndicate enforcers to do some work for you in the street, or even a syndicate laboratory and scientist who could concoct a batch of undetectable drugs. The monetary value of the favour should not exceed the characters charisma x 10 x 1d6 x 1,000 credits.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.7zViYasde34EmuWv"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672352950109,"modifiedTime":1672355577551,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"iNjU7NDXaXVzhaBu"}
{"name":"Latin connections","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Fixer","requirements":"70% streetwise skill","xpcost":100,"cost":0,"description":"<p>The fixer can get all manner of illegal substances. The fixer pays 20% less than the going market rate for any item, any drug any supply.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.8q1BSL8552ihER6u"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672352900374,"modifiedTime":1672355528631,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"kDmdYzCpPdENIX4q"}
{"name":"Ace Gunner","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":400,"cost":0,"description":"<p>Using the main gun of the vehicle you are in has become your specialty. Once per session you can use the main gun of your vehicle and perform an automatic armour penetrating hit. The main gun has double penetration and deals 50% more damage in a single attack.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.hcDCkCaU9aHHYuNq"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353023438,"modifiedTime":1672355475736,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"kj0YkRUBYhnH1esi"}
{"name":"Rapid Manufacturing","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Head Stooge","requirements":"one engineering skill 50%","xpcost":200,"cost":0,"description":"<p>The stooge knows people who own factories and can get any item made but for double the cost. This can be illegal items, weapons, spaceships you name it. The product will be made within half the normal time of manufacture of 1 month which ever is lower. Typical items take 1 or 2 days to manufacture, large items like spaceships take 2 months to a year.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.p7wAh6Nyxj3ozC4S"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672352258580,"modifiedTime":1672355560504,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"l6DVDxGHMbEVO4uB"}
{"name":"Torpedo","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Fixer","requirements":"Streetwise 70%","xpcost":200,"cost":0,"description":"<p>The fixer has required a loyal torpedo to strong arm others, protect them and act as body guard. This is another character and is more loyal than a gun or thug for higher. The torpedo will give their life to save the fixer, if they do so the fixer will lose this perk and must purchase it again.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.1yAvLoM4mSzDmvoO"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672352581293,"modifiedTime":1672355586297,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"lC0bd0CT8PDsxbHi"}
{"name":"Midnight Run","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Road Warrior","requirements":"","xpcost":300,"cost":0,"description":"<p>If the character is trying to evade authorities or break through blockades or just trying to lay<br>low in a city and perform errands or deliveries, the character will receive an increase of 4 to the<br>stealth rating of their vehicle by using terrain features or just planning and luck. They move<br>through the city over passes and highways like ghosts on the winds. If detected by law enforcement, the receive an extra action at the start of the round make a run for it.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.dUy03epB4asSXmu6"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672225555247,"modifiedTime":1672355541073,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"lkhFJbwGI4H9235u"}
{"name":"Efficient compilation","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Hacker","requirements":"Programming 70%","xpcost":400,"cost":0,"description":"<p>All programs you create require 50% storage space on you cyber deck or computer.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.d4BMIAXxboaFuDfG"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672226049122,"modifiedTime":1672355493720,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"m3S03Bzxfy5uJGhV"}
{"name":"Enforcer","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":50,"description":"<p>The enforcer is a peace officer, security guard or professional investigator. The enforcer has<br>contacts, informants and generally is well connected in law enforcement of their city/region. Some enforcers work for governments and maybe have global connections.<br>Once per scene an Enforcer can perform an authoritative command, they could order a criminal to put their hands up and surrender, order a citizen out of a car so they can commandeer it, order other law enforcement officers to perform actions. Authoritative command requires the&nbsp; opponents of the enforcer to make self-control check, if they fail they will follow the command for the scene. The Enforcer makes a persuade check and receives a +10% to that check. For each degree of success, the opponents of the command will receive a -1 to their self-control check to resist the command. <br><br>40% in persuade skill</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.XBtssWAGShE0YDNx"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672220617908,"modifiedTime":1672355495000,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"nBFtWz9kn5tOfFu1"}
{"name":"Unnatural Health","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":40,"description":"<p>This perk provides resistance to disease and poison. The character suffers 50% less damage to Fatigue, Hit points, Humanity or Essence from poisons and diseases. They also receive -2 on any attribute checks to resist poisons or diseases.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.WrIziSiyUHTWtF9X"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672175817509,"modifiedTime":1672355591958,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"nBfZfXLJzJSl0vTX"}
{"name":"Fame","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":200,"cost":0,"description":"<p>This perk enables a character to gain national fame and/or notoriety. It provides +10% bonus<br>to all social rolls to anyone who cares about your fame. Game master discretion is to be used<br>to determine if the NPC does care.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.jYTfVXVeDzurjErd"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353312645,"modifiedTime":1672355498392,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"nTQTmsmC1J0UWynZ"}
{"name":"What, This? This Is Nothing!","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":40,"description":"<p>It takes a lot to kill you. You can literally keep fighting even with missing limbs. You suffer no ill effects (except not having that limb, and Movement penalties) from losing an arm or leg. Even if you lose two or more limbs, as long as you still have general Hit points, you&rsquo;re alive and active. You never fall unconscious for having zero Fatigue. General Hit points must be negative before you die. You also don&rsquo;t bleed out like normal people do.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.FVPt4J5wgnLZjKhm"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672176141140,"modifiedTime":1672355598360,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"nkKiYkpWTYXEX3iU"}
{"name":"Informants","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Enforcer","requirements":"50% Streetwise skill","xpcost":100,"cost":0,"description":"<p>The enforcer has a network of criminal informants, and these informants give them a detailed understanding of the criminal happenings within a city or other location. The informants provide information to the enforcer in exchange for the enforcer mostly looking the other way. If the enforcer fails on a street wise check, they automatically can re-roll with a +20% bonus by contacting an informant. If the enforcer wishes to question the informant and the informant has detailed information, they will automatically spill the beans to the enforcer.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.7nedTX53nCxj41ZE"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672351316602,"modifiedTime":1672355524440,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"nwJ7K5OLe5XdFt7R"}
{"name":"Villain","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":5,"description":"<p>You&rsquo;re scary as hell and twice as mean. People see you as a threat to their lives. Gain 10% bonus to Manipulation or Persuasion through fear and intimidation.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.vGF6R8KUUqGi5oNA"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672176105285,"modifiedTime":1672355594504,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"nyA0xQopfGDmpeeu"}
{"name":"Fanatical Fans","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Celebrity","requirements":"50% in one performance skill","xpcost":200,"cost":0,"description":"<p>The celebrity has a group of fanatical fans that will if contacted show up and help the celebrity. These fans will be armed with typical pistols and knives and may have armour. To convince the fans to help, including dangerous tasks the celebrity needs to make a persuade check, for each degree of success 1d6 fans will arrive within 1d3 hours to help.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.kfS6amLHeLHrXSEr"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672226394853,"modifiedTime":1672355502583,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"o3EOQk7C4YO5OTz8"}
{"name":"I've Seen Things...","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":30,"description":"<p>You have seen so much that you may have been hospitalised in the past but now you&rsquo;re better. You suffer half the normal detachment from traumatic events. You gain a 40% bonus on any EGO and Self-Control tests for fear or panic.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.zhmbb9zfMIPd1gvo"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672175544519,"modifiedTime":1672355521287,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"o7WzVc8el1urZYVs"}
{"name":"Last Word","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"Starting Initiative of 3 or less","xpcost":100,"cost":0,"description":"<p>A character with this perk will always get an action at the end of a combat round after all other characters have completed all their actions. If multiple characters in the scene have this ability then resolve them as per normal for characters acting in the same initiative rank. This essentially adds an initiative rank at zero after the round has counted down to rank 1. If a character with this perk increases their SI above 3, then they lose this ability until such time as their SI is once more 3 or less. This includes the SI penalty for wearing bulky armour. If as a result of the penalty their SI<br>is reduced to 3 or less then they can use this ability.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.yzy3qI0bvFPXr53K"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672354378556,"modifiedTime":1672355527536,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"okR24CxN7Z9LqBqv"}
{"name":"Akimbo","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Warrior Soldier","requirements":"","xpcost":200,"cost":0,"description":"<p>The character suffers only half penalties for firing weapons from both hands.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.FdYmBz0G5MWNFNCO"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672221053821,"modifiedTime":1672355476815,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"qVz6KUaJhgmgYm7l"}
{"name":"Insider Trading","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Head Stooge","requirements":"","xpcost":100,"cost":0,"description":"<p>On any given finance check the stooge has inside information. This could enable them to receive a re-roll on a failed finance check or stock market trade, have some extra information about a facility or even have someone on the inside of an opposing facility working for them. The gm must decide the outcome of using this perk. This perk can be used once per session.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.x1sHpg2NKY4T3QYW"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672351877786,"modifiedTime":1672355526384,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"qxGAX8oVXpINNNIk"}
{"name":"The Chinese Cyber Shark from Shanghai","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Hacker","requirements":"Computer use or Programming 60%","xpcost":200,"cost":0,"description":"<p>Somehow you have access to some hardcore military code, and if you use that code to make programs that attack other programs, they turn out way more dangerous. All kill type programmes built will receive +1d6 damage per degree of success, this damage is added to the normal damage the program does. To create the programme create it as per the normal rules.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.ga30zB8NBRP2iOqV"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672225755791,"modifiedTime":1672355581975,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"sV0veGRmmy59ntpp"}
{"name":"Hero","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":5,"description":"<p>You are a heroic character; people are inspired by you and will generally try to help you. If you behave like a villain, you lose this perk. Gain +10% to Persuasion checks with anyone you&rsquo;re trying to gain assistance from or inspire.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.goH5qlIVUfXxr7gW"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672175871988,"modifiedTime":1672355519152,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"tNSu6fcGDNYhvRYX"}
{"name":"Stringer","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":50,"description":"<p>This character works for some sort of media outfit or even a covert information gathering operation. They are skilled at finding information and presenting it to achieve a response. Reporters have informants and contacts, and generally can find people who don&rsquo;t want to be found.</p>\n<p>Once per session stringers can make an inquiry about a specific piece of information which is not generally known check using either persuade, computer use or street wise, the stringer will receive +20% on this check. For each degree of success, they receive an additional piece of information. Information flow, the stringer is also able to securely send that information to the right relevant people at the right time. This will give the group +20% on all social checks with that person. The Truth, if a Stringer tells the truth to a group of people through any means either<br>broadcast or simply speaking the stringer can influence those peoples actions. Its up to the GM how this can affect the viewers, either they rage or feel better or panic.&nbsp;</p>\n<p>Requires 40% in persuade skill and either language or art film</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.Ee5BbPKeiGexNNO3"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672220703420,"modifiedTime":1672355572159,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"tVl3m66PdpV68hhe"}
{"name":"Partner","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Enforcer","requirements":"","xpcost":200,"cost":0,"description":"<p>The enforcer has a side kick partner, this is another security guard or piece officer who will help them and stick with them through whatever trials. This partner cannot be another Enforcer.<br>The partner will improve with time aquiring new items and perks, GM should decide which upgrades the partner has aquired.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.GhfjxFVf5j6kwixH"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672351465378,"modifiedTime":1672355549152,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"tW4k6XEkieu0JqQd"}
{"name":"Toughness","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":10,"description":"<p>You are tougher than most, even if you are of small stature. Gain 10 HP. This perk may be taken twice.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.SG5pJ0poepiB6BSh"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672176011164,"modifiedTime":1672355588656,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"tlJreO61x21lnibw"}
{"name":"Hacker","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":50,"description":"<p>The hacker in dark stars is a computer technician, intrusion and security specialist. All hackers receive +10% on their hacking and programming checks. Hackers also suffer half EGO damage from all cyber attacks against their EGO. Once per session hackers can re-roll damage on a single programs damage. <br><br>Requires Computer Use 40%</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.zCs6BlwG6s75slhi"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672220486117,"modifiedTime":1672355516785,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"u09QIcbtcSF2mvFK"}
{"name":"Contact","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":50,"cost":0,"description":"<p>Contacts are game master-generated NPC characters that can be useful to you. They will try to help you with information and may, on a successful Persuasion roll, provide some assistance; however, this assistance is personal and cannot be organisation-based (that&rsquo;s Influence). Contacts can be of any type and are usually knowledgeable. The contact typically has a 50% skill rating in their field.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.v8YRvRWtrCsR2zV0"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353269828,"modifiedTime":1672355485135,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"u4AlTW262KRzzqhp"}
{"name":"Shield Master","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":1000,"cost":0,"description":"<p>Shield Masters are often the centre of any defence or attack, using the shield not only to deflect blows but also disable weapons. Shield Masters can parry two opponents per round instead of one, making them formidable solo combatants. Shields will have their special properties doubled.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.zIDpS9Bl4xlXTkWY"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353816021,"modifiedTime":1672355568192,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"uNgVai3tdLgGJDVe"}
{"name":"Axe Master","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":600,"cost":0,"description":"<p>Masters of the Axe know how to get the most out of the weapon and are so skilled that they can bypass armour better than their less skilled counterparts. Axes will have their special properties doubled. Add an additional +2 to penetration.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.4bWCIbqZNXq7F0Dc"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353672493,"modifiedTime":1672355480760,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"ugN44JQlrG4HWF1d"}
{"name":"Master Marksman","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":null,"cost":0,"description":"<p>With keen eyes and expert aim, Master Marksmen are deadly on the battlefield or especially in ambush. Halve the penalties from called shots using ranged weapons. +2 to damage and penetration using called shots.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.xtJw8aCdG0xj0oq5"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353709436,"modifiedTime":1672355537544,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"vjPDplg5oqjBgckC"}
{"name":"Extensive Contacts","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Fixer","requirements":"50% Persuade Skill","xpcost":100,"cost":0,"description":"<p>For each contact purchased with experience, a second contact is acquired for free. This simulates the fixers networking abilities who knows why the contacts help the fixer maybe they have some dirt on them but its never out of the goodness of the heart. This second contact may turn on them if treated badly.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.KihdnnjW02G7nwHc"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672352800510,"modifiedTime":1672355497264,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"xGDZGLXdLd30PKWK"}
{"name":"Rich","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":40,"description":"<p>You are wealthy, well connected and have a position in a corporation. This can never be taken away from you except in extreme circumstances. You have 1d100 x 1d10 credits per month. The credits will accumulate in a safe account.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.LHPDLu3nY5LJpde7"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672175964638,"modifiedTime":1672355563871,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"xPAhA5blFf1nw2xb"}
{"name":"I got friends","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Road Warrior","requirements":"Pilot/Driving and Persuade of 40%","xpcost":200,"cost":0,"description":"<p>The character can make a successful persuade check and can summon a group of other runners/drivers/pilots/gangers to help with some task. For each degree of success 1d6 additional<br>people will arrive and if only 1 success is achieved 1 person will arrive with their vehicle and weapons. These people are like family to the character and members of their vehicle clan/gang. For each degree of success, the friends will help for 1 week.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.MewvFhwQ3awq36va"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672225326901,"modifiedTime":1672355520225,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"xQBjSCMXfYPTn6gD"}
{"name":"Two-Fisted","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":20,"description":"<p>You have the natural ability to use both hands. This reduces the penalty for using two weapons or any task using both hands to -10% instead of -20%.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.And3B0fW4GUChqTq"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672176054637,"modifiedTime":1672355590929,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"xlZ0QCsNG9mB6i9d"}
{"name":"Sword Master","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":800,"cost":0,"description":"<p>Sword Masters have become adept at one handed and two-handed fighting with swords. They can consequently use these weapons better and get more benefit from special properties and receive a free parry action with the sword once per round. Swords will have their special properties doubled. +10% to parrying with the sword and one free parry per round.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.bBdVRclvy6rDbBgN"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672353919924,"modifiedTime":1672355574953,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"y340VAyWceyZfvHK"}
{"name":"Practiced Scavenger","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"advanced","role":"","requirements":"","xpcost":250,"cost":0,"description":"<p>The character knows about certain terrain types, i.e. where to find the best ammo, chips,<br>scrap, hiding places or resources and materials for their crafting skills. This perk may be taken<br>more than once. The following list of terrains can be learned by the character, although you<br>could expand this: Junk Yard, Wasteland, The Old World, Oceans, and Rad Zones, Wastes.<br>Whenever the character fails a Navigation, Survival or foraging related craft (Engineering,<br>Scavenging, Hacking) skill check once per session they can receive an automatic re-roll on the skill check. The character must take the result of this check.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.SG6YSWePxEmKoP2f"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672354543865,"modifiedTime":1672355551376,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"ydWo02hjIx4wm1mY"}
{"name":"Cyber Designer","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"role","role":"Technician","requirements":"Cybernetics Design or Cybernetics Engineering skill of 60%","xpcost":300,"cost":0,"description":"<p>An engineer who specialises in cybernetics, they can create new designs or modify cybernetics. Either reducing the humanity loss by 10% per degree of success with a minimum of 1 point per dice of humanity the component/upgrade requires. Or Improving the durability of the component by 10% (+10% to SP per degree of success). Or Extending its capability by combining two components for example combining the thermographic and targeting components allow that upgrade to a cybernetic eye to only take 1<br>option space.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.6JI8xTBNoTqcRSSD"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672224518971,"modifiedTime":1672355487280,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"zRE7pBw0rov4qwhA"}
{"name":"Celebrity","type":"perk","img":"systems/fvtt-dark-stars/images/icons/perk.webp","system":{"perktype":"normal","role":"","requirements":"","xpcost":0,"cost":50,"description":"<p>This character is a celebrity, either they perform music, create performance art of some kind, and inspire the masses. They probably already have a body of work. Inspire to action. Should the character wish to get their fands to perform a task, they can inspire their fans with a performance. The character receives a +10% to any performance where they wish to influence people. The<br>following persuade check will receive a bonus of 10% per degree of success the performance received. Celebrities also can receive a re-roll once per session which can be used on any failed roll.</p>"},"effects":[],"ownership":{"default":0,"LUaXSjYdxSzrwCtU":3},"flags":{"core":{"sourceId":"Item.IrI3xInQi7THinHw"}},"_stats":{"systemId":"fvtt-dark-stars","systemVersion":"10.0.9","coreVersion":"10.291","createdTime":1672220555574,"modifiedTime":1672355482968,"lastModifiedBy":"LUaXSjYdxSzrwCtU"},"folder":null,"sort":0,"_id":"zwZoHMkWYtMCNx9f"}

Binary file not shown.

View File

View File

@ -1 +0,0 @@
MANIFEST-000199

View File

View File

@ -1,8 +0,0 @@
2024/02/25-13:11:04.899830 7f0428e006c0 Recovering log #197
2024/02/25-13:11:04.909890 7f0428e006c0 Delete type=3 #195
2024/02/25-13:11:04.909976 7f0428e006c0 Delete type=0 #197
2024/02/25-13:14:07.614576 7f0421a006c0 Level-0 table #202: started
2024/02/25-13:14:07.614602 7f0421a006c0 Level-0 table #202: 0 bytes OK
2024/02/25-13:14:07.621467 7f0421a006c0 Delete type=0 #200
2024/02/25-13:14:07.628014 7f0421a006c0 Manual compaction at level-0 from '!items!0K3CVEKsq67oKiYE' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.628055 7f0421a006c0 Manual compaction at level-1 from '!items!0K3CVEKsq67oKiYE' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/02/25-13:04:05.318599 7f0423e006c0 Recovering log #193
2024/02/25-13:04:05.328529 7f0423e006c0 Delete type=3 #191
2024/02/25-13:04:05.328597 7f0423e006c0 Delete type=0 #193
2024/02/25-13:10:09.519595 7f0421a006c0 Level-0 table #198: started
2024/02/25-13:10:09.519645 7f0421a006c0 Level-0 table #198: 0 bytes OK
2024/02/25-13:10:09.526863 7f0421a006c0 Delete type=0 #196
2024/02/25-13:10:09.527031 7f0421a006c0 Manual compaction at level-0 from '!items!0K3CVEKsq67oKiYE' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.527062 7f0421a006c0 Manual compaction at level-1 from '!items!0K3CVEKsq67oKiYE' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000198

View File

View File

@ -1,7 +0,0 @@
2024/02/25-13:11:04.832847 7f0422a006c0 Recovering log #196
2024/02/25-13:11:04.844534 7f0422a006c0 Delete type=3 #194
2024/02/25-13:11:04.844584 7f0422a006c0 Delete type=0 #196
2024/02/25-13:14:07.539362 7f0421a006c0 Level-0 table #201: started
2024/02/25-13:14:07.539386 7f0421a006c0 Level-0 table #201: 0 bytes OK
2024/02/25-13:14:07.545589 7f0421a006c0 Delete type=0 #199
2024/02/25-13:14:07.565459 7f0421a006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

View File

@ -1,7 +0,0 @@
2024/02/25-13:04:05.255291 7f0428e006c0 Recovering log #192
2024/02/25-13:04:05.265834 7f0428e006c0 Delete type=3 #190
2024/02/25-13:04:05.265885 7f0428e006c0 Delete type=0 #192
2024/02/25-13:10:09.486767 7f0421a006c0 Level-0 table #197: started
2024/02/25-13:10:09.486786 7f0421a006c0 Level-0 table #197: 0 bytes OK
2024/02/25-13:10:09.493210 7f0421a006c0 Delete type=0 #195
2024/02/25-13:10:09.499919 7f0421a006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

23
packs/skills.db Normal file
View File

@ -0,0 +1,23 @@
{"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 &ndash; 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 &amp; 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&rsquo;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,&nbsp; 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&rsquo;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&rsquo;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&rsquo;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}}

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More