Compare commits

...

5 Commits

68 changed files with 371 additions and 68 deletions

View File

@ -1,2 +1,18 @@
# fvtt-dark-stars
This is the official Hero System 6th Edition game system for FoundryVTT, based on the TTRPG from Hero Games and developed by Legendsmiths, LLC. For more information about Legendsmiths and their work, visit https://legendsmiths.com/.
The Hero System game system is not usable standalone. To play this game you need a copy of the core rulebook.
Installation
Manifest URL: https://github.com/Legendsmiths-LLC/
For manual installation, use the provided manifest URL in the "Install System" popup window while managing game systems.
Copyright (c) 2023 Legendsmiths, LLC
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
All content for the HERO System™® is DOJ, Inc.s trademark for its roleplaying system. HERO System Copyright ©1984, 1989, 2002, 2009 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Fantasy Hero ©2003, 2010 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Star Hero ©2003, 2011 by DOJ, Inc. d/b/a Hero Games. All rights reserved. All DOJ trademarks and copyrights used with permission and under license with Legendsmiths , LLC. For further information about Hero Games and the HERO System, visit www.herogames.com. All HERO System™® content is not be included to copy, modify, merge, publish, distribute, sublicense, and/or sell with copies of the Software with the exception of the current licensee Legendsmiths, LLC.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

View File

@ -179,14 +179,18 @@ export class Hero6ActorSheet extends ActorSheet {
const li = $(event.currentTarget).parents(".item");
let itemId = li.data("item-id")
this.actor.rollLiftDice(itemId);
});
});
html.find('.roll-weapon').click((event) => {
const li = $(event.currentTarget).parents(".item");
const skillId = li.data("item-id")
this.actor.rollWeapon(skillId)
});
html.find('.roll-maneuver').click((event) => {
const li = $(event.currentTarget).parents(".item");
const maneuverId = li.data("maneuver-id")
this.actor.rollManeuver(maneuverId)
});
html.find('.hold-action').click((event) => {
this.actor.holdAction()
});

View File

@ -41,8 +41,9 @@ export class Hero6Actor extends Actor {
}
if (data.type == 'character') {
//const skills = await Hero6Utility.loadCompendium("fvtt-hero-system-6.skills");
//data.items = skills.map(i => i.toObject())
const maneuvers = await Hero6Utility.loadCompendium("fvtt-hero-system-6.maneuvers")
let maneuversObj = maneuvers.map(i => i.toObject())
data.items = maneuversObj.filter(m => m.system.isstock)
}
if (data.type == 'npc') {
}
@ -69,6 +70,14 @@ export class Hero6Actor extends Actor {
}
}
/* -------------------------------------------- */
performMigration() {
// Fix OCV/OMCV rollable
if (!this.system.characteristics.ocv.hasroll) {
this.update({ 'system.characteristics.ocv.hasroll': true, 'system.characteristics.omcv.hasroll': true })
}
}
/* -------------------------------------------- */
computeDicesValue() {
this.system.biodata.presenceattack = Hero6Utility.getDerivatedDiceFormulas(this.system.characteristics.pre.value)
this.system.characteristics.str.strdice = Hero6LiftDice.getLiftDice(this.system.characteristics.str.value)
@ -204,6 +213,17 @@ export class Hero6Actor extends Actor {
skill.roll += skill.system.levels
}
}
/* -------------------------------------------- */
prepareManeuver(maneuver) {
maneuver.roll = 11 + this.system.characteristics.ocv.value
if ( Number(maneuver.system.ocv)) {
maneuver.roll += Number(maneuver.system.ocv)
} else {
maneuver.noOCV = true
}
}
/* -------------------------------------------- */
getSkills() {
@ -452,7 +472,7 @@ export class Hero6Actor extends Actor {
/* -------------------------------------------- */
getSegments() {
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
console.log("INDEX", index, __speed2Segments[index])
//console.log("INDEX", index, __speed2Segments[index])
return __speed2Segments[index]
}
getPhasesString() {
@ -463,7 +483,7 @@ export class Hero6Actor extends Actor {
getBaseInit(turn) {
if ( turn != this.turn) {
let r = new Roll("1d6").roll({ async: false })
this.currentInit = this.system.characteristics.dex.value + (r.total / 10)
this.currentInit = Number(this.system.characteristics.dex.initiative) + Number(((r.total / 10).toFixed(2)))
this.turn = turn
}
return this.currentInit
@ -647,6 +667,9 @@ export class Hero6Actor extends Actor {
if (item.type == "skill") {
this.prepareSkill(rollData.item)
}
if (item.type == "maneuver") {
this.prepareManeuver(rollData.item)
}
this.startRoll(rollData)
}
/* -------------------------------------------- */
@ -696,7 +719,28 @@ export class Hero6Actor extends Actor {
msg.setFlag("world", "rolldata", rollData)
console.log("Rolldata result", rollData)
}
/* -------------------------------------------- */
rollManeuver(maneuverId) {
let skill = this.items.get(skillId)
if (skill) {
if (skill.system.islore && skill.system.level == 0) {
ui.notifications.warn("You can't use Lore Skills with a SL of 0.")
return
}
skill = duplicate(skill)
Hero6Utility.updateSkill(skill)
let abilityKey = skill.system.ability
let rollData = this.getCommonRollData(abilityKey)
rollData.mode = "skill"
rollData.skill = skill
rollData.img = skill.img
if (rollData.target) {
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
return
}
this.startRoll(rollData)
}
}
/* -------------------------------------------- */
rollSkill(skillId) {
let skill = this.items.get(skillId)

View File

@ -44,7 +44,7 @@ export class Hero6Combat extends Combat {
/* -------------------------------------------- */
holdAction(combatantId) {
this.rebuildInitiative()
console.log("Rebuilding.....")
//console.log("Rebuilding.....")
}
/* -------------------------------------------- */
@ -77,19 +77,28 @@ export class Hero6Combat extends Combat {
}
/* -------------------------------------------- */
forceHold(actor, isHold) {
let updList = []
let c = this.combatants.find(c => c.actor._id == actor.id)
let name = actor.name + ((isHold) ? " (H)" : "")
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
this.updateEmbeddedDocuments("Combatant", updList)
if (game.user.isGM) {
let updList = []
let c = this.combatants.find(c => c.actor._id == actor.id)
let name = actor.name + ((isHold) ? " (H)" : "")
console.log("ForceHold!!", c, actor)
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
this.updateEmbeddedDocuments("Combatant", updList)
} else {
game.socket.emit("system.fvtt-hero-system-6", { name: "msg_force_hold", data: { actorId: actor.id, isHold: isHold } });
}
}
/* -------------------------------------------- */
forceAbort(actor, isAbort) {
let updList = []
let c = this.combatants.find(c => c.actor._id == actor.id)
let name = actor.name + ((isAbort) ? " (A)" : "")
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
this.updateEmbeddedDocuments("Combatant", updList)
if (game.user.isGM) {
let updList = []
let c = this.combatants.find(c => c.actor._id == actor.id)
let name = actor.name + ((isAbort) ? " (A)" : "")
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
this.updateEmbeddedDocuments("Combatant", updList)
} else {
game.socket.emit("system.fvtt-hero-system-6", { name: "msg_force_abort", data: { actorId: actor.id, isAbort: isAbort } });
}
}
/* -------------------------------------------- */
@ -110,7 +119,7 @@ export class Hero6Combat extends Combat {
}
if (isOnAbort) {
name = c.actor.name + " (A)"
if ( c.actor.incAbortActionCount() ) {
if (c.actor.incAbortActionCount()) {
c.actor.disableAbortAction()
}
}
@ -145,7 +154,7 @@ export class Hero6Combat extends Combat {
}
if (updList.length > 0) {
await this.updateEmbeddedDocuments("Combatant", updList);
console.log("Rebuild INIT", updList)
//console.log("Rebuild INIT", updList)
for (let c of updList) {
if (c.initiative != 0) {
return true
@ -159,7 +168,7 @@ export class Hero6Combat extends Combat {
nextTurn() {
let nbC = this.combatants.filter(c => c.initiative > 0).length
//console.log("Next turn called....", this.turn, nbC)
if (this.turn < nbC-1) {
if (this.turn < nbC - 1) {
super.nextTurn()
} else {
this.nextRound()
@ -172,7 +181,7 @@ export class Hero6Combat extends Combat {
let nextRound = this.round
let advanceTime = 0
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
let turnData = this.getFlag("world", "hero6-turn-data")
let turnData = this.getFlag("world", "turnData")
//console.log("Next round called....", nextRound, turnData)
while (!hasCombatants) {
@ -187,18 +196,21 @@ export class Hero6Combat extends Combat {
advanceTime += CONFIG.time.roundTime;
nextRound = nextRound + 1;
//console.log("Next round called....2", nextRound, turnData)
turnData = this.getFlag("world", "hero6-turn-data")
turnData = this.getFlag("world", "turnData")
if (!turnData) {
turnData = { turnNumber: 0, segmentNumber: 12 }
this.setFlag("world", "hero6-turn-data", turnData)
this.setFlag("world", "turnData", turnData)
}
turnData = duplicate(turnData)
turnData.segmentNumber += 1
if (turnData.segmentNumber > 12) {
turnData.segmentNumber = 1
turnData.turnNumber++
ChatMessage.create({
content: "Complete Post-Segment 12 Recoveries."
})
}
await this.setFlag("world", "hero6-turn-data", turnData)
await this.setFlag("world", "turnData", turnData)
this.turnNumber = turnData.turnNumber;
this.segmentNumber = turnData.segmentNumber;
//console.log("Next round called....3", nextRound, turnData)
@ -209,9 +221,10 @@ export class Hero6Combat extends Combat {
}
// Update the document, passing data through a hook first
const updateData = { round: nextRound, turn: turn, segmentNumber: turnData.segmentNumber, turnNumber: turnData.turnNumber };
const updateData = { round: nextRound, turn };
const updateOptions = { advanceTime, direction: 1 };
Hooks.callAll("combatRound", this, updateData, updateOptions);
console.log(this)
return this.update(updateData, updateOptions);
}

View File

@ -41,7 +41,7 @@ Hooks.once("init", async function () {
// Set an initiative formula for the system
CONFIG.Combat.initiative = {
formula: "1d6",
decimals: 3
decimals: 2
};
/* ------------------------------- ------------- */

View File

@ -124,6 +124,10 @@ export class Hero6Utility {
const rollTables = await Hero6Utility.loadCompendium("fvtt-hero-system-6.rolltables")
this.rollTables = rollTables.map(i => i.toObject())
for (let actor of game.actors) {
actor.performMigration()
}
}
/* -------------------------------------------- */
@ -230,12 +234,21 @@ export class Hero6Utility {
/* -------------------------------------------- */
static async onSocketMesssage(msg) {
console.log("SOCKET MESSAGE", msg.name)
console.log("SOCKET MESSAGE", msg.name, msg)
if (msg.name == "msg_update_roll") {
this.updateRollData(msg.data)
}
if (msg.name == "msg_gm_process_attack_defense") {
this.processSuccessResult(msg.data)
if (msg.name == "msg_force_hold") {
if (game.user.isGM) {
let actor = game.actors.get(msg.data.actorId)
game.combat.forceHold(actor, msg.data.isHold)
}
}
if (msg.name == "msg_force_abort") {
if (game.user.isGM) {
let actor = game.actors.get(msg.data.actorId)
game.combat.forceAbort(actor, msg.data.isAbort)
}
}
if (msg.name == "msg_gm_item_drop" && game.user.isGM) {
let actor = game.actors.get(msg.data.actorId)

Binary file not shown.

View File

@ -0,0 +1 @@
MANIFEST-000042

0
packs/complications/LOCK Normal file
View File

8
packs/complications/LOG Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:18:14.000526 7f5afddfa6c0 Recovering log #40
2023/08/07-22:18:14.012956 7f5afddfa6c0 Delete type=3 #38
2023/08/07-22:18:14.012989 7f5afddfa6c0 Delete type=0 #40
2023/08/07-23:27:51.013130 7f58677fe6c0 Level-0 table #45: started
2023/08/07-23:27:51.013173 7f58677fe6c0 Level-0 table #45: 0 bytes OK
2023/08/07-23:27:51.019258 7f58677fe6c0 Delete type=0 #43
2023/08/07-23:27:51.040432 7f58677fe6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
2023/08/07-23:27:51.040586 7f58677fe6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)

View File

@ -0,0 +1,8 @@
2023/08/07-22:00:56.735452 7f5afd5f96c0 Recovering log #36
2023/08/07-22:00:56.833916 7f5afd5f96c0 Delete type=3 #34
2023/08/07-22:00:56.833991 7f5afd5f96c0 Delete type=0 #36
2023/08/07-22:18:10.662583 7f58677fe6c0 Level-0 table #41: started
2023/08/07-22:18:10.662627 7f58677fe6c0 Level-0 table #41: 0 bytes OK
2023/08/07-22:18:10.668688 7f58677fe6c0 Delete type=0 #39
2023/08/07-22:18:10.668861 7f58677fe6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
2023/08/07-22:18:10.668891 7f58677fe6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

1
packs/equipment/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000042

0
packs/equipment/LOCK Normal file
View File

7
packs/equipment/LOG Normal file
View File

@ -0,0 +1,7 @@
2023/08/07-22:18:13.969369 7f5afd5f96c0 Recovering log #40
2023/08/07-22:18:13.978774 7f5afd5f96c0 Delete type=3 #38
2023/08/07-22:18:13.978872 7f5afd5f96c0 Delete type=0 #40
2023/08/07-23:27:50.976450 7f58677fe6c0 Level-0 table #45: started
2023/08/07-23:27:50.976502 7f58677fe6c0 Level-0 table #45: 0 bytes OK
2023/08/07-23:27:50.982719 7f58677fe6c0 Delete type=0 #43
2023/08/07-23:27:50.982828 7f58677fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

7
packs/equipment/LOG.old Normal file
View File

@ -0,0 +1,7 @@
2023/08/07-22:00:56.587410 7f5afd5f96c0 Recovering log #36
2023/08/07-22:00:56.639569 7f5afd5f96c0 Delete type=3 #34
2023/08/07-22:00:56.639645 7f5afd5f96c0 Delete type=0 #36
2023/08/07-22:18:10.624177 7f58677fe6c0 Level-0 table #41: started
2023/08/07-22:18:10.624214 7f58677fe6c0 Level-0 table #41: 0 bytes OK
2023/08/07-22:18:10.632567 7f58677fe6c0 Delete type=0 #39
2023/08/07-22:18:10.642835 7f58677fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/maneuvers/000005.ldb Normal file

Binary file not shown.

View File

1
packs/maneuvers/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000034

0
packs/maneuvers/LOCK Normal file
View File

8
packs/maneuvers/LOG Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:18:14.000527 7f5afd5f96c0 Recovering log #32
2023/08/07-22:18:14.012956 7f5afd5f96c0 Delete type=3 #30
2023/08/07-22:18:14.012992 7f5afd5f96c0 Delete type=0 #32
2023/08/07-23:27:51.026690 7f58677fe6c0 Level-0 table #37: started
2023/08/07-23:27:51.026730 7f58677fe6c0 Level-0 table #37: 0 bytes OK
2023/08/07-23:27:51.033892 7f58677fe6c0 Delete type=0 #35
2023/08/07-23:27:51.040520 7f58677fe6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
2023/08/07-23:27:51.040625 7f58677fe6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)

8
packs/maneuvers/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:00:56.752593 7f5afcdf86c0 Recovering log #28
2023/08/07-22:00:56.851595 7f5afcdf86c0 Delete type=3 #26
2023/08/07-22:00:56.851652 7f5afcdf86c0 Delete type=0 #28
2023/08/07-22:18:10.668942 7f58677fe6c0 Level-0 table #33: started
2023/08/07-22:18:10.668989 7f58677fe6c0 Level-0 table #33: 0 bytes OK
2023/08/07-22:18:10.675320 7f58677fe6c0 Delete type=0 #31
2023/08/07-22:18:10.691036 7f58677fe6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
2023/08/07-22:18:10.691069 7f58677fe6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/perks/000005.ldb Normal file

Binary file not shown.

0
packs/perks/000044.log Normal file
View File

1
packs/perks/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000042

0
packs/perks/LOCK Normal file
View File

8
packs/perks/LOG Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:18:14.015482 7f5afcdf86c0 Recovering log #40
2023/08/07-22:18:14.031405 7f5afcdf86c0 Delete type=3 #38
2023/08/07-22:18:14.031513 7f5afcdf86c0 Delete type=0 #40
2023/08/07-23:27:51.019445 7f58677fe6c0 Level-0 table #45: started
2023/08/07-23:27:51.019492 7f58677fe6c0 Level-0 table #45: 0 bytes OK
2023/08/07-23:27:51.026550 7f58677fe6c0 Delete type=0 #43
2023/08/07-23:27:51.040470 7f58677fe6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
2023/08/07-23:27:51.040607 7f58677fe6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)

8
packs/perks/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:00:56.836453 7f5afd5f96c0 Recovering log #36
2023/08/07-22:00:56.950488 7f5afd5f96c0 Delete type=3 #34
2023/08/07-22:00:56.950642 7f5afd5f96c0 Delete type=0 #36
2023/08/07-22:18:10.683235 7f58677fe6c0 Level-0 table #41: started
2023/08/07-22:18:10.683286 7f58677fe6c0 Level-0 table #41: 0 bytes OK
2023/08/07-22:18:10.690928 7f58677fe6c0 Delete type=0 #39
2023/08/07-22:18:10.691057 7f58677fe6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
2023/08/07-22:18:10.691082 7f58677fe6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)

BIN
packs/perks/MANIFEST-000042 Normal file

Binary file not shown.

BIN
packs/powers/000013.ldb Normal file

Binary file not shown.

0
packs/powers/000044.log Normal file
View File

1
packs/powers/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000042

0
packs/powers/LOCK Normal file
View File

8
packs/powers/LOG Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:18:13.982354 7f5afd5f96c0 Recovering log #40
2023/08/07-22:18:13.997957 7f5afd5f96c0 Delete type=3 #38
2023/08/07-22:18:13.998008 7f5afd5f96c0 Delete type=0 #40
2023/08/07-23:27:51.005564 7f58677fe6c0 Level-0 table #45: started
2023/08/07-23:27:51.005735 7f58677fe6c0 Level-0 table #45: 0 bytes OK
2023/08/07-23:27:51.012861 7f58677fe6c0 Delete type=0 #43
2023/08/07-23:27:51.013069 7f58677fe6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
2023/08/07-23:27:51.013100 7f58677fe6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)

8
packs/powers/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:00:56.642444 7f5afcdf86c0 Recovering log #36
2023/08/07-22:00:56.750892 7f5afcdf86c0 Delete type=3 #34
2023/08/07-22:00:56.750934 7f5afcdf86c0 Delete type=0 #36
2023/08/07-22:18:10.655429 7f58677fe6c0 Level-0 table #41: started
2023/08/07-22:18:10.655482 7f58677fe6c0 Level-0 table #41: 0 bytes OK
2023/08/07-22:18:10.662426 7f58677fe6c0 Delete type=0 #39
2023/08/07-22:18:10.668849 7f58677fe6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
2023/08/07-22:18:10.668882 7f58677fe6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/skills/000005.ldb Normal file

Binary file not shown.

0
packs/skills/000044.log Normal file
View File

1
packs/skills/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000042

0
packs/skills/LOCK Normal file
View File

8
packs/skills/LOG Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:18:13.982353 7f5afddfa6c0 Recovering log #40
2023/08/07-22:18:13.997971 7f5afddfa6c0 Delete type=3 #38
2023/08/07-22:18:13.998032 7f5afddfa6c0 Delete type=0 #40
2023/08/07-23:27:50.999438 7f58677fe6c0 Level-0 table #45: started
2023/08/07-23:27:50.999471 7f58677fe6c0 Level-0 table #45: 0 bytes OK
2023/08/07-23:27:51.005436 7f58677fe6c0 Delete type=0 #43
2023/08/07-23:27:51.013039 7f58677fe6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
2023/08/07-23:27:51.013085 7f58677fe6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)

8
packs/skills/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:00:56.642359 7f5afd5f96c0 Recovering log #36
2023/08/07-22:00:56.733205 7f5afd5f96c0 Delete type=3 #34
2023/08/07-22:00:56.733486 7f5afd5f96c0 Delete type=0 #36
2023/08/07-22:18:10.649211 7f58677fe6c0 Level-0 table #41: started
2023/08/07-22:18:10.649245 7f58677fe6c0 Level-0 table #41: 0 bytes OK
2023/08/07-22:18:10.655255 7f58677fe6c0 Delete type=0 #39
2023/08/07-22:18:10.668835 7f58677fe6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
2023/08/07-22:18:10.668872 7f58677fe6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/talents/000005.ldb Normal file

Binary file not shown.

0
packs/talents/000044.log Normal file
View File

1
packs/talents/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000042

0
packs/talents/LOCK Normal file
View File

8
packs/talents/LOG Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:18:14.015482 7f5afd5f96c0 Recovering log #40
2023/08/07-22:18:14.034395 7f5afd5f96c0 Delete type=3 #38
2023/08/07-22:18:14.034433 7f5afd5f96c0 Delete type=0 #40
2023/08/07-23:27:51.034000 7f58677fe6c0 Level-0 table #45: started
2023/08/07-23:27:51.034031 7f58677fe6c0 Level-0 table #45: 0 bytes OK
2023/08/07-23:27:51.040235 7f58677fe6c0 Delete type=0 #43
2023/08/07-23:27:51.040547 7f58677fe6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
2023/08/07-23:27:51.040656 7f58677fe6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)

8
packs/talents/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2023/08/07-22:00:56.853665 7f5afcdf86c0 Recovering log #36
2023/08/07-22:00:56.969522 7f5afcdf86c0 Delete type=3 #34
2023/08/07-22:00:56.969559 7f5afcdf86c0 Delete type=0 #36
2023/08/07-22:18:10.675457 7f58677fe6c0 Level-0 table #41: started
2023/08/07-22:18:10.675493 7f58677fe6c0 Level-0 table #41: 0 bytes OK
2023/08/07-22:18:10.683073 7f58677fe6c0 Delete type=0 #39
2023/08/07-22:18:10.691049 7f58677fe6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
2023/08/07-22:18:10.691077 7f58677fe6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)

Binary file not shown.

0
packs/weapons/000044.log Normal file
View File

1
packs/weapons/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000042

0
packs/weapons/LOCK Normal file
View File

7
packs/weapons/LOG Normal file
View File

@ -0,0 +1,7 @@
2023/08/07-22:18:13.969369 7f5afddfa6c0 Recovering log #40
2023/08/07-22:18:13.978774 7f5afddfa6c0 Delete type=3 #38
2023/08/07-22:18:13.978889 7f5afddfa6c0 Delete type=0 #40
2023/08/07-23:27:50.992870 7f58677fe6c0 Level-0 table #45: started
2023/08/07-23:27:50.992899 7f58677fe6c0 Level-0 table #45: 0 bytes OK
2023/08/07-23:27:50.999291 7f58677fe6c0 Delete type=0 #43
2023/08/07-23:27:51.013019 7f58677fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

7
packs/weapons/LOG.old Normal file
View File

@ -0,0 +1,7 @@
2023/08/07-22:00:56.587421 7f5afcdf86c0 Recovering log #36
2023/08/07-22:00:56.639569 7f5afcdf86c0 Delete type=3 #34
2023/08/07-22:00:56.639646 7f5afcdf86c0 Delete type=0 #36
2023/08/07-22:18:10.642928 7f58677fe6c0 Level-0 table #41: started
2023/08/07-22:18:10.642973 7f58677fe6c0 Level-0 table #41: 0 bytes OK
2023/08/07-22:18:10.649077 7f58677fe6c0 Delete type=0 #39
2023/08/07-22:18:10.668818 7f58677fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -63,6 +63,10 @@
}
.app.sidebar-popout .window-content {
color: rgba(4, 44, 44, 0.98);
}
.window-header{
background: rgba(0,0,0,0.75);
}
@ -70,13 +74,13 @@
color: rgba(224, 208, 197, 0.9);
}
.dialog-content, .dialog-buttons, .form-fields {
color: rgba(224, 208, 197, 0.9);
color: rgba(4, 44, 44, 0.98);
}
.dialog-buttons {
color: rgba(224, 208, 197, 0.9);
}
.dialog .dialog-buttons button.default {
color: rgba(224, 208, 197, 0.9);
color: rgba(4, 44, 44, 0.98);
}
.window-app.sheet .window-content {
margin: 0;
@ -1035,6 +1039,31 @@ ul, li {
opacity: 1;
}
.chat-card-small-button {
box-shadow: inset 0px 1px 0px 0px #a6827e;
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
background-color: #7d5d3b00;
border-radius: 3px;
border: 1px ridge #846109;
display: inline-block;
cursor: pointer;
color: #ffffff;
font-size: 0.8rem;
text-decoration: none;
text-shadow: 0px 1px 0px #4d3534;
position: relative;
margin:1px;
}
.chat-card-small-button:hover {
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
background-color: red;
}
.chat-card-small-button:active {
position:relative;
top:1px;
}
.chat-card-button {
box-shadow: inset 0px 1px 0px 0px #a6827e;
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
@ -1332,6 +1361,11 @@ Focus FOC: #ff0084
max-width: 8rem;
min-width: 8rem;
}
.item-field-text-long {
flex-grow:1;
max-width: 14rem;
min-width: 14rem;
}
.item-field-label-long-img {
flex-grow:1;
max-width: 10rem;
@ -1385,4 +1419,10 @@ Focus FOC: #ff0084
.textarea-full-height {
min-height: 100%;
height: 100%;
}
.margin-left-4 {
margin-left: 4px;
}
.margin-left-8 {
margin-left: 8px;
}

View File

@ -66,6 +66,15 @@
"private": false,
"flags": {}
},
{
"type": "Item",
"label": "Maneuvers",
"name": "maneuvers",
"path": "packs/maneuvers.db",
"system": "fvtt-hero-system-6",
"private": false,
"flags": {}
},
{
"type": "Item",
"label": "Perks",
@ -91,15 +100,15 @@
"styles": [
"styles/simple.css"
],
"version": "10.0.49",
"version": "11.0.2",
"compatibility": {
"minimum": "10",
"minimum": "11",
"verified": "11"
},
"title": "Hero System v6 for FoundrtVTT (Official)",
"manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/raw/branch/main/system.json",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/archive/fvtt-hero-system-6-v10.0.49.zip",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/archive/fvtt-hero-system-6-v11.0.1.zip",
"url": "https://www.uberwald.me/gitea/uberwald/",
"background": "images/ui/hero6_welcome_page.webp",
"background": "systems/fvtt-hero-system-6/images/ui/hero_foundry_cover.webp",
"id": "fvtt-hero-system-6"
}

View File

@ -72,7 +72,7 @@
"category": "main",
"value": 10,
"base": 10,
"perceptionroll": 10
"perceptionroll": 11
},
"ego": {
"label": "EGO",
@ -90,7 +90,7 @@
},
"ocv": {
"label": "OCV",
"hasroll": false,
"hasroll": true,
"base": 3,
"autoMod": "0",
"userMod": "0",
@ -108,7 +108,7 @@
},
"omcv": {
"label": "OMCV",
"hasroll": false,
"hasroll": true,
"base": 3,
"autoMod": "0",
"userMod": "0",
@ -205,6 +205,7 @@
"ismovement": true,
"hasroll": false,
"value": 12,
"ncvalue": 24,
"base": 12
},
"swimming": {
@ -212,6 +213,7 @@
"ismovement": true,
"hasroll": false,
"value": 4,
"ncvalue": 8,
"base": 4
},
"leaping": {
@ -219,6 +221,7 @@
"ismovement": true,
"hasroll": false,
"value": 4,
"ncvalue": 8,
"base": 4,
"leaping_horizontal_base": 0,
"leaping_horizontal_total": 0,
@ -231,25 +234,31 @@
"movements": {
"fly": {
"label": "Fly",
"value": 0
"value": 0,
"ncvalue": 0
},
"teleport": {
"label": "Teleport",
"value": 0
"value": 0,
"ncvalue": 0
},
"tunnel": {
"label": "Tunnel",
"value": 0
"value": 0,
"ncvalue": 0
},
"move1": {
"label": "N/A",
"iseditable": true,
"value": 0
"value": 0,
"ncvalue": 0
},
"move2": {
"label": "N/A",
"iseditable": true,
"value": 0
"value": 0,
"ncvalue": 0
}
}
},
@ -343,6 +352,8 @@
"haseffectroll": false,
"effectroll": "standard",
"effectrollformula": "",
"hascharges": false,
"nbcharges": 0,
"items": {}
}
},

View File

@ -147,10 +147,10 @@
<span class="item-field-label-very-short">
<label class="short-label">OCV</label>
</span>
<span class="item-field-label-short">
<span class="item-field-label-very-short">
<label class="short-label">DCV</label>
</span>
<span class="item-field-label-long">
<span class="item-field-text-long">
<label class="short-label">Effects</label>
</span>
</li>
@ -158,15 +158,23 @@
<li class="item flexrow list-item list-item-shadow" data-item-id="{{maneuver._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{maneuver.img}}" /></a>
<span class="item-field-label-long">{{maneuver.name}}</span>
<span class="item-field-label-long">{{maneuver.name}}
<a class="roll-item"><i class="fas fa-dice"></i></a>
</span>
<span class="item-field-label-very-short">{{maneuver.system.pha}}</span>
<span class="item-field-label-very-short">{{maneuver.system.ocv}}</span>
<span class="item-field-label-short">{{maneuver.system.dcv}}</span>
<span class="item-field-label-very-short">{{maneuver.system.dcv}}</span>
<span class="item-field-label-long">{{maneuver.system.effects}}</span>
<span class="item-field-text-long">{{maneuver.system.effects}}
{{#if maneuver.system.haseffectroll}}
<a class="roll-direct" data-roll-source="Maneuver {{maneuver.name}}" data-roll-formula="{{maneuver.system.effectrollformula}}">
<i class="fas fa-dice"></i>{{maneuver.system.effectrollformula}}
</a>
{{/if}}
</span>
<span class="item-field-label-short">&nbsp;</span>
<span class="">&nbsp;</span>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
@ -178,18 +186,18 @@
<div>
<ul class="item-list alternate-list">
<li class="flexrow item item-packed">
<li class="flexrow item">
<label class="">Initiative</label>
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.dex.initiative" value="{{characteristics.dex.initiative}}" data-dtype="Number" />
<label class="item-packed">Initiative</label>
<input type="text" class="margin-left-4item-packed item-field-label-very-short update-field" data-field-name="system.characteristics.dex.initiative" value="{{characteristics.dex.initiative}}" data-dtype="Number" />
<label class="items-title-text">SPD</label>
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.spd.value" value="{{characteristics.spd.value}}" data-dtype="Number" />
<label class="items-title-text item-packed margin-left-8">SPD</label>
<input type="text" class="item-field-label-very-short margin-left-4 update-field item-packed" data-field-name="system.characteristics.spd.value" value="{{characteristics.spd.value}}" data-dtype="Number" />
<button class="chat-card-button item-field-label-medium hold-action">{{#if isHold}}Unhold{{else}}Hold{{/if}}</button>
<button class="chat-card-button item-field-label-medium abort-action">{{#if isAbort}}Unabort{{else}}Abort{{/if}}</button>
<button class="chat-card-small-button item-field-label-short margin-left-8 hold-action item-packed">{{#if isHold}}Unhold{{else}}Hold{{/if}}</button>
<button class="chat-card-small-button item-field-label-short margin-left-4 abort-action item-packed">{{#if isAbort}}Unabort{{else}}Abort{{/if}}</button>
<label class="items-title-text">Presence attack</label>
<label class="items-title-text margin-left-8">Presence attack</label>
<a class="roll-direct" data-roll-source="Presence attack" data-roll-formula="{{system.biodata.presenceattack.rollFormula}}">
<i class="fas fa-dice"></i>{{system.biodata.presenceattack.displayFormula}}
</a>
@ -314,7 +322,7 @@
<label class="">Movement</label>
</span>
<span class="item-field-label-short">
<label class="short-label">C</label>
<label class="short-label">Combat</label>
</span>
<span class="item-field-label-short">
<label class="short-label">NC</label>
@ -325,7 +333,7 @@
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
<span class="item-field-label-long">{{char.label}}</span>
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" value="{{mul char.value 2}}" disabled data-dtype="Number" />
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.ncvalue" value="{{char.ncvalue}}" data-dtype="Number" />
</li>
{{/if}}
{{/each}}

View File

@ -32,9 +32,12 @@
</a>
{{/if}}
{{log combat.flags}}
{{#if combatCount}}
{{#if combat.round}}
<h3 class="encounter-title noborder">Turn {{combat.turnNumber}} Segment {{combat.segmentNumber}}</h3>
<!--<h3 class="encounter-title noborder">Turn {{combat.turnNumber}} Segment {{combat.segmentNumber}}</h3>-->
<h3 class="encounter-title noborder">Turn {{combat.flags.world.turnData.turnNumber}} Segment {{combat.flags.world.turnData.segmentNumber}}</h3>
{{else}}
<h3 class="encounter-title noborder">{{localize 'COMBAT.NotStarted'}}</h3>
{{/if}}

View File

@ -17,7 +17,7 @@
<ul>
<li class="flexrow"><label class="item-field-label-long">Type</label>
<select class="item-field-label-medium" type="text" name="system.skilltype" value="{{system.skilltype}}" data-dtype="String">
{{#select system.skilltype}}
{{#select (lower system.skilltype)}}
{{#each config.skillType as |char key|}}
<option value="{{key}}">{{char}}</option>
{{/each}}
@ -28,14 +28,14 @@
{{#if (isSkillCustom system.skilltype)}}
<li class="flexrow"><label class="item-field-label-long">Base characteristic</label>
<select class="item-field-label-medium" type="text" name="system.characteristic" value="{{system.characteristic}}" data-dtype="String">
{{#select system.characteristic}}
{{#select (lower system.characteristic)}}
{{#each config.rollCharac as |char key|}}
<option value="{{key}}">{{char}}</option>
{{/each}}
{{/select}}
</select>
</li>
{{#if (eq system.characteristic "manual")}}
{{#if (eq (lower system.characteristic) "manual")}}
<li class="flexrow"><label class="item-field-label-long">Base value</label>
<input type="text" class="item-field-label-medium" name="system.base" value="{{system.base}}" data-dtype="Number" {{#if (ne system.characteristic "manual")}}disabled{{/if}} />
</li>

View File

@ -1,6 +1,6 @@
<li class="flexrow"><label class="item-field-label-long">Type</label>
<select class="item-field-label-long" type="text" name="system.petype" value="{{system.petype}}" data-dtype="String">
{{#select system.petype}}
{{#select (lower system.petype)}}
{{#each config.powerEquipmentType as |name key|}}
<option value="{{key}}">{{name}}</option>
{{/each}}
@ -10,7 +10,7 @@
<li class="flexrow"><label class="item-field-label-long">Type Modifier</label>
<select class="item-field-label-long" type="text" name="system.typemodifier" value="{{system.typemodifier}}" data-dtype="String">
{{#select system.typemodifier}}
{{#select (lower system.typemodifier)}}
{{#each config.powerTypeModifiers as |name key|}}
<option value="{{key}}">{{name}}</option>
{{/each}}
@ -31,6 +31,16 @@
<li class="flexrow"><label class="item-field-label-long">Endurance</label>
<input type="text" class="item-field-label-short" name="system.endurance" value="{{system.endurance}}" data-dtype="Number"/>
</li>
<li class="flexrow"><label class="item-field-label-long">Has Charges ?</label>
<label class="item-field-label-medium"><input type="checkbox" name="system.hascharges" {{checked system.hascharges}}/></label>
</li>
{{#if system.hascharges}}
<li class="flexrow"><label class="item-field-label-long">Number of Charges</label>
<input type="text" class="item-field-label-short" name="system.nbcharges" value="{{system.nbcharges}}" data-dtype="Number"/>
</li>
{{/if}}
{{#if quantityDone}}
{{else}}
<li class="flexrow"><label class="item-field-label-long">Quantity</label>