diff --git a/tests/game-logic.test.mjs b/tests/game-logic.test.mjs index 369ac25..a445c6d 100644 --- a/tests/game-logic.test.mjs +++ b/tests/game-logic.test.mjs @@ -8,6 +8,7 @@ import { normalizePlayerDamage, processQueuedPlayerHits, reducePlayerHitQueue, + reducePlayerProjectileHits, reducePlayerVolleyHits, } from '../src/game-logic.js'; @@ -202,3 +203,40 @@ test('different pirate volleys can both damage even when processed together', () assert.equal(result.acceptedHits.length, 2); assert.equal(result.ignoredHits.length, 0); }); + +test('every new pirate projectile can damage once with no cross-shot suppression', () => { + const first = reducePlayerProjectileHits({ + hull: 100, + hits: [{ damage: 6 }], + }); + + assert.equal(first.hull, 94); + assert.equal(first.totalDamage, 6); + assert.equal(first.appliedHits, 1); + assert.equal(first.gameOver, false); + + const second = reducePlayerProjectileHits({ + hull: first.hull, + hits: [{ damage: 6 }], + }); + + assert.equal(second.hull, 88); + assert.equal(second.totalDamage, 6); + assert.equal(second.appliedHits, 1); + assert.equal(second.gameOver, false); +}); + +test('multiple distinct pirate projectiles in the same frame all apply damage', () => { + const result = reducePlayerProjectileHits({ + hull: 100, + hits: [ + { damage: 6 }, + { damage: 6 }, + { damage: 6 }, + ], + }); + + assert.equal(result.hull, 82); + assert.equal(result.totalDamage, 18); + assert.equal(result.appliedHits, 3); +});