Release Healer Man 0.1.45

This commit is contained in:
phenom committed 2026-09-15 14:43:15 -04:00
1 parent 756ee4f64a
commit f82daf1c13
242 files changed
+1440 -101

No files matched your search

+24 -6
View File
@@ -54,6 +54,7 @@ import {
partyAbilityAmount,
} from "./partyAbilityAi";
import { normalizeActorResourcePool } from "./combatActors";
import { enemyControlPreventsActions } from "./enemyAttacks";
import { advanceCombatResourcePool } from "./combatResources";
import { channelAmountEffects } from "./combatChannelAmounts";
import { healingAbilityCanAidOthers, healingAbilityHasPendingHot, healingRecipientIds } from "./healingAbilityRules";
@@ -405,7 +406,10 @@ export function applyHealerSupport(
.map((member, index) => ({ member, index, ability: partyResurrectionAbility(member) }))
.filter((candidate): candidate is typeof candidate & { ability: AbilityDefinition } => (
candidate.member.health > 0
&& candidate.member.controlledUntil <= now
&& (
candidate.member.controlledUntil <= now
|| !enemyControlPreventsActions(candidate.member.controlMechanic)
)
&& candidate.member.nextActionAt <= now
&& candidate.ability !== null
))
@@ -1175,7 +1179,15 @@ export function advanceDungeonPartyCombat(now = Date.now()): void {
if (shouldRegen) nextRegenAt = now + 1_000;
if (!targetId) {
members = members.map((member) => {
if (member.health <= 0 || member.controlledUntil > now || !shouldRegen || deltaSeconds <= 0) return member;
if (
member.health <= 0
|| (
member.controlledUntil > now
&& enemyControlPreventsActions(member.controlMechanic)
)
|| !shouldRegen
|| deltaSeconds <= 0
) return member;
return {
...member,
health: Math.min(
@@ -1200,7 +1212,10 @@ export function advanceDungeonPartyCombat(now = Date.now()): void {
nextMembers[index] = { ...member, status: "advancing", activeCast: null, activeCastTargetId: null };
continue;
}
if (member.controlledUntil > now) {
if (
member.controlledUntil > now
&& enemyControlPreventsActions(member.controlMechanic)
) {
nextMembers[index] = member.status === "holding"
? member
: { ...member, status: "holding" };
@@ -1210,7 +1225,7 @@ export function advanceDungeonPartyCombat(now = Date.now()): void {
nextMembers[index] = member.status === "holding" ? member : { ...member, status: "holding" };
continue;
}
const activeMember = member.controlMechanic
const activeMember = member.controlMechanic && member.controlledUntil <= now
? { ...member, controlledUntil: 0, controlMechanic: null }
: member;
member = activeMember;
@@ -1465,10 +1480,13 @@ export function advanceDungeonPartyCombat(now = Date.now()): void {
: "ready" as const;
members = members.map((member) => {
if (member.health <= 0) return member.status === "down" ? member : { ...member, status: "down" };
if (member.controlledUntil > now) {
if (
member.controlledUntil > now
&& enemyControlPreventsActions(member.controlMechanic)
) {
return member.status === "holding" ? member : { ...member, status: "holding" };
}
const activeMember = member.controlMechanic
const activeMember = member.controlMechanic && member.controlledUntil <= now
? { ...member, controlledUntil: 0, controlMechanic: null }
: member;
const recovered = activeMember.health;