diff --git a/modules/hero6-actor.js b/modules/hero6-actor.js index aba463f..2ec8d33 100644 --- a/modules/hero6-actor.js +++ b/modules/hero6-actor.js @@ -4,7 +4,7 @@ import { Hero6RollDialog } from "./hero6-roll-dialog.js"; import { Hero6LiftDice } from "./hero6-lift-dice.js"; /* -------------------------------------------- */ -const __speed2Segments = [[0], [7], [6, 12], [4, 8, 12], [3, 6, 9, 12], [3, 5, 8, 10, 12], [2, 4, 6, 8, 10, 12] +const __speed2Segments = [ [0], [7], [6, 12], [4, 8, 12], [3, 6, 9, 12], [3, 5, 8, 10, 12], [2, 4, 6, 8, 10, 12], [2, 4, 6, 7, 9, 11, 12], [2, 3, 5, 6, 8, 9, 11, 12], [2, 3, 4, 6, 7, 8, 10, 11, 12], [2, 3, 4, 5, 6, 8, 9, 10, 11, 12], [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]] @@ -398,12 +398,15 @@ export class Hero6Actor extends Actor { } game.combat.rebuildInitiative() } + async disableHoldAction() { + await this.setFlag("world", "hold-action", false) + } async disableAbortAction() { await this.setFlag("world", "abort-action", { state: false, count: 0 }) } async abortAction() { let abort = this.getFlag("world", "abort-action") - if ( abort.state) { + if (abort.state) { await this.setFlag("world", "abort-action", { state: false, count: 0 }) } else { await this.setFlag("world", "abort-action", { state: true, count: 0 }) @@ -422,14 +425,19 @@ export class Hero6Actor extends Actor { hasPhase(segmentNumber) { let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds let phases = __speed2Segments[index] - console.log("index", segmentNumber, index, phases, phases.includes(segmentNumber)) + console.log("index", segmentNumber, index, phases, phases.includes(segmentNumber), __speed2Segments) return phases.includes(segmentNumber) } /* -------------------------------------------- */ getSegments() { - let index = [Math.min(Math.max(this.system.characteristics.spd.value, 1), 12)] // Security bounds + let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds + console.log("INDEX", index, __speed2Segments[index]) return __speed2Segments[index] } + getPhasesString() { + let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds + return __speed2Segments[index].toString() + } /* -------------------------------------------- */ getBaseInit() { let r = new Roll("1d6").roll({ async: false }) @@ -476,6 +484,12 @@ export class Hero6Actor extends Actor { ch.lift = Hero6LiftDice.getLift(ch.value) ch.liftDice = Hero6LiftDice.getLiftDice(ch.value) } + if (key == "spd") { + ch.phasesString = this.getPhasesString() + } + if (key =="pre") { + ch.presenceattack = duplicate(this.system.biodata.presenceattack) + } } return characs } diff --git a/modules/hero6-combat.js b/modules/hero6-combat.js index d89ad16..320ef31 100644 --- a/modules/hero6-combat.js +++ b/modules/hero6-combat.js @@ -72,11 +72,17 @@ export class Hero6Combat extends Combat { /* -------------------------------------------- */ computeInitiative(c, updList) { let id = c._id || c.id - if (c.actor.hasPhase(this.segmentNumber) || c.actor.getHoldAction()) { + let hasSegment = c.actor.hasPhase(this.segmentNumber) + let isOnHold = c.actor.isOnHold() + if (hasSegment || isOnHold) { let baseInit = c.actor ? c.actor.getBaseInit() : 0; let name = c.actor.name - if (c.actor.getHoldAction()) { - name = c.actor.name + " (H)" + if (isOnHold) { + if (hasSegment) { // On hold + current segment -> auto-disable on hold + c.actor.disableHoldAction() + } else { + name = c.actor.name + " (H)" + } } if (c.actor.getAbortAction()) { name = c.actor.name + " (A)" @@ -112,46 +118,63 @@ export class Hero6Combat extends Combat { for (let c of this.combatants) { this.computeInitiative(c, updList) } - console.log(this.combatants, updList) if (updList.length > 0) { await this.updateEmbeddedDocuments("Combatant", updList); + console.log("Rebuild INIT", updList) + for(let c of updList) { + if ( c.initiative != 0) { + return true + } + } } + return false } /* -------------------------------------------- */ - nextRound() { + async nextRound() { + let hasCombatants = false + 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. - if (this.settings.skipDefeated && (turn !== null)) { - turn = this.turns.findIndex(t => !t.isDefeated); - if (turn === -1) { - ui.notifications.warn("COMBAT.NoneRemaining", { localize: true }); - turn = 0; - } - } - let advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime; - advanceTime += CONFIG.time.roundTime; - let nextRound = this.round + 1; - let turnData = this.getFlag("world", "hero6-turn-data") - if (!turnData) { - turnData = { turnNumber: 0, segmentNumber: 12 } - this.setFlag("world", "hero6-turn-data", turnData) - } - turnData = duplicate(turnData) - turnData.segmentNumber += 1 - if (turnData.segmentNumber > 12) { - turnData.segmentNumber = 1 - turnData.turnNumber++ - } - this.setFlag("world", "hero6-turn-data", turnData) - this.turnNumber = turnData.turnNumber; - this.segmentNumber = turnData.segmentNumber; + + console.log("Next round called....", nextRound, turnData) + while (!hasCombatants) { + turn = turn; // Preserve the fact that it's no-one's turn currently. + if (this.settings.skipDefeated && (turn !== null)) { + turn = this.turns.findIndex(t => !t.isDefeated); + if (turn === -1) { + ui.notifications.warn("COMBAT.NoneRemaining", { localize: true }); + turn = 0; + } + } + advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime; + advanceTime += CONFIG.time.roundTime; + nextRound = nextRound + 1; + console.log("Next round called....2", nextRound, turnData) + turnData = this.getFlag("world", "hero6-turn-data") + if (!turnData) { + turnData = { turnNumber: 0, segmentNumber: 12 } + this.setFlag("world", "hero6-turn-data", turnData) + } + turnData = duplicate(turnData) + turnData.segmentNumber += 1 + if (turnData.segmentNumber > 12) { + turnData.segmentNumber = 1 + turnData.turnNumber++ + } + await this.setFlag("world", "hero6-turn-data", turnData) + this.turnNumber = turnData.turnNumber; + this.segmentNumber = turnData.segmentNumber; + console.log("Next round called....3", nextRound, turnData) - // Re-compute init of actors - this.rebuildInitiative() + // Re-compute init of actors + hasCombatants = await this.rebuildInitiative() + console.log("Going round....", nextRound, hasCombatants) + } // Update the document, passing data through a hook first - const updateData = { round: nextRound, turn, segmentNumber: turnData.segmentNumber, turnNumber: turnData.turnNumber }; + const updateData = { round: nextRound, turn: turn, segmentNumber: turnData.segmentNumber, turnNumber: turnData.turnNumber }; const updateOptions = { advanceTime, direction: 1 }; Hooks.callAll("combatRound", this, updateData, updateOptions); return this.update(updateData, updateOptions); diff --git a/modules/hero6-main.js b/modules/hero6-main.js index eb27e5d..db649ed 100644 --- a/modules/hero6-main.js +++ b/modules/hero6-main.js @@ -75,7 +75,7 @@ function welcomeMessage() { user: game.user.id, whisper: [game.user.id], content: `
- Welcome to the Hero6 RPG. + Welcome to Hero System 6E RPG. ` }); } diff --git a/system.json b/system.json index ea41962..73a4001 100644 --- a/system.json +++ b/system.json @@ -91,7 +91,7 @@ "styles": [ "styles/simple.css" ], - "version": "10.0.43", + "version": "10.0.44", "compatibility": { "minimum": "10", "verified": "10", @@ -99,7 +99,7 @@ }, "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.43.zip", + "download": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/archive/fvtt-hero-system-6-v10.0.44.zip", "url": "https://www.uberwald.me/gitea/uberwald/", "background": "images/ui/hro6_welcome_page.webp", "id": "fvtt-hero-system-6" diff --git a/templates/partials/partial-actor-full-charac.hbs b/templates/partials/partial-actor-full-charac.hbs index d4a5b28..5fa66e4 100644 --- a/templates/partials/partial-actor-full-charac.hbs +++ b/templates/partials/partial-actor-full-charac.hbs @@ -37,4 +37,15 @@ {{/if}} + {{#if charac.phasesString}} +

  

+

Phases : {{charac.phasesString}}

+ {{/if}} + + {{#if charac.presenceattack}} +

  

+

Presence attack

+ {{charac.presenceattack.displayFormula}} + {{/if}} + \ No newline at end of file