Release Healer Man 0.1.40

This commit is contained in:
phenom committed 2026-09-13 13:21:27 -04:00
1 parent ed0d2fea3d
commit 197a64117c
215 files changed
+5131 -181

No files matched your search

+14 -7
View File
@@ -45,7 +45,8 @@ import {
} from "../game/mobRuntimeRegistry";
import { combatHasLineOfSight } from "../game/combatSpatial";
import { registerDungeonRuntimeReset } from "../game/dungeonRuntimeReset";
import { dungeonEnemyHealthBaseline, scaledDungeonEnemyLevel } from "../game/dungeonLevelScaling";
import { scaledDungeonEnemyLevel } from "../game/dungeonLevelScaling";
import { dungeonEnemyScaling } from "../game/dungeonBossScaling";
import { requireDungeonDefinition } from "../game/dungeonRegistry";
import { stepFearedMobAway } from "../game/mobMotion";
import {
@@ -886,6 +887,9 @@ function ProxyMob({
const showAggroRanges = useCombatStore((state) => state.settings.showMobAggroRanges);
const gameMode = useGameStore((state) => state.gameMode);
const dungeonExpansion = useGameStore((state) => requireDungeonDefinition(state.activeDungeonId).expansion);
const dungeon = useGameStore((state) => requireDungeonDefinition(state.activeDungeonId));
const difficultyId = useGameStore((state) => state.activeDifficultyId);
const bossDifficulty = useGameStore((state) => state.activeBossDifficulty);
const characterLevel = useCombatStore((state) => state.level);
const manastormLevel = useManastormStore((state) => state.level);
const manastormPartySize = useManastormStore((state) => state.partySize);
@@ -928,20 +932,20 @@ function ProxyMob({
const level = gameMode === "manastorm"
? definition.combat?.level
: scaledDungeonEnemyLevel(characterLevel, boss);
const healthMultiplier = baseHealthMultiplier * (manastormModifiers?.enemyStatMultiplier ?? 1);
const healthBaseline = gameMode === "dungeon"
? dungeonEnemyHealthBaseline(level ?? characterLevel, dungeonExpansion)
: undefined;
const scaling = gameMode === "dungeon"
? dungeonEnemyScaling(dungeon, definition, instanceId, characterLevel, difficultyId, bossDifficulty)
: null;
const healthMultiplier = scaling?.healthMultiplier ?? baseHealthMultiplier * (manastormModifiers?.enemyStatMultiplier ?? 1);
useCombatStore.getState().registerMob(instanceId, {
name: definition.name,
serverEntry: definition.combat?.serverEntry,
boss,
level,
maxHealth: healthBaseline === undefined ? undefined : healthBaseline * healthMultiplier,
maxHealth: scaling?.maxHealth,
hasLoot: Boolean((boss && bossHasLoot(definition.id)) || definition.hasLoot),
lootSourceId: boss ? definition.id : undefined,
healthMultiplier,
damageMultiplier: baseDamageMultiplier * (manastormModifiers?.enemyStatMultiplier ?? 1),
damageMultiplier: scaling?.damageMultiplier ?? baseDamageMultiplier * (manastormModifiers?.enemyStatMultiplier ?? 1),
bonusLootChance: manastormModifiers?.bonusLootChance,
moveSpeed: definition.combat?.moveSpeed,
aggroRange: definition.combat?.aggroRange,
@@ -968,6 +972,9 @@ function ProxyMob({
instanceId,
gameMode,
dungeonExpansion,
dungeon,
difficultyId,
bossDifficulty,
manastormLevel,
manastormMapRewardMultiplier,
manastormModeId,
+5 -2
View File
@@ -15,7 +15,7 @@ import {
type ReactNode,
} from "react";
import { type Group } from "three";
import { classById, raceById, type GenderId, type RaceId } from "../app/characterCatalog";
import { classById, isRomClassId, raceById, type GenderId, type RaceId } from "../app/characterCatalog";
import { CharacterModel } from "../avatar/CharacterModel";
import { ProceduralAvatar } from "../avatar/ProceduralAvatar";
import { useCombatStore } from "../game/combatStore";
@@ -1412,6 +1412,9 @@ function PartyActors({
{members.map((member, index) => {
const characterClass = classById(member.classId);
const race = raceById(member.raceId);
const subtitle = isRomClassId(member.classId)
? `${characterClass.name}${member.secondaryClassId ? `/${classById(member.secondaryClassId).name}` : ""}`
: `${race.name} · ${member.specialization}`;
const avatarMetrics = PARTY_AVATAR_METRICS[`${member.raceId}:${member.gender}`]
?? DEFAULT_PARTY_AVATAR_METRICS;
const position = positionsRef.current.get(member.id) ?? initialMemberPosition(index);
@@ -1471,7 +1474,7 @@ function PartyActors({
...partyLabelStyle,
opacity: member.health > 0 ? 1 : 0.55,
}}>
<div>{member.name}<br /><small>{race.name} · {member.specialization}</small></div>
<div>{member.name}<br /><small>{subtitle}</small></div>
</Html>
) : null}
</group>