Add per-broadside player damage reducer

This commit is contained in:
Admin 2026-09-18 01:10:42 +00:00
parent f5b35fd87f
commit 2dc9bba7f9

View File

@ -67,3 +67,47 @@ export const processQueuedPlayerHits = ({
maxHull, maxHull,
}); });
}; };
export const reducePlayerVolleyHits = ({
hull,
hits,
seenVolleyIds = [],
maxHull = PLAYER_MAX_HULL,
fallbackDamage = DEFAULT_PIRATE_SHOT_DAMAGE,
maxSeenVolleys = 128,
}) => {
const seen = new Set(seenVolleyIds);
const acceptedHits = [];
const ignoredHits = [];
let totalDamage = 0;
for (const hit of hits) {
const volleyId = hit?.volleyId ?? null;
if (volleyId !== null && seen.has(volleyId)) {
ignoredHits.push(hit);
continue;
}
if (volleyId !== null) seen.add(volleyId);
acceptedHits.push(hit);
totalDamage += normalizePlayerDamage(hit?.damage, fallbackDamage);
}
while (seen.size > maxSeenVolleys) {
const oldest = seen.values().next().value;
seen.delete(oldest);
}
const currentHull = Number.isFinite(hull) ? hull : maxHull;
const nextHull = Math.max(0, currentHull - totalDamage);
return {
hull: nextHull,
totalDamage,
acceptedHits,
ignoredHits,
seenVolleyIds: seen,
gameOver: nextHull <= 0,
};
};