- Hollowcrown: The Rift Between Worlds as its own seed (npm run seed:hollowcrown), built from the campaign book: pools, 58 monsters, 57 NPCs, 28 locations, 72 encounters with rewards, and DM notes. Shared seeding logic moved to prisma/seedCampaign.js. - What players can see: only encounters their own character is in; only the pool entries their character holds (plus starting options while building); only locations their character has been to; no invite code; no gold, inventory or money log of other players' characters. Socket events carry ids only and campaign rooms are members-only. - Encounters have a location; while one is in progress its characters are there, and visits are remembered. - Campaign setting to show players a health bar only for monsters and NPCs. - Initiative is entered as the d20 roll (1-20) and the bonus is added; players can enter their own character's roll. - Number fields enforce their limits when typing, and the API enforces the same limits. - Temp HP shows on HP bars and absorbs damage before real HP. - All packages at version 1.3.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 lines
632 B
JavaScript
13 lines
632 B
JavaScript
// Temporary hit points are a buffer: damage comes off them first, and only
|
|
// what is left over reaches real HP. Takes the character's HP and temp HP as
|
|
// they are and the HP a damage/heal asked for (which may be below zero), and
|
|
// returns what both should become. Healing never touches temp HP.
|
|
function absorbDamage(currentHp, tempHp, requestedHp) {
|
|
const damage = currentHp - requestedHp;
|
|
if (damage <= 0 || tempHp <= 0) return { currentHp: requestedHp, tempHp };
|
|
const absorbed = Math.min(tempHp, damage);
|
|
return { currentHp: requestedHp + absorbed, tempHp: tempHp - absorbed };
|
|
}
|
|
|
|
module.exports = { absorbDamage };
|