feat: vampire mode chunk 3 - sync/sanitize and initial state

Add initialVampireState() and vampireSpread validation to mirror the
goddess mode pattern. Also lint-fix pre-existing style issues across
all Chunk 2 vampire data and type files.
This commit is contained in:
2026-04-16 09:26:29 -07:00
committed by Naomi Carrigan
parent 53a026da62
commit 7f43dc725e
18 changed files with 2221 additions and 1973 deletions
+1 -1
View File
@@ -14,7 +14,6 @@ import type { DailyChallengeState } from "./dailyChallenge.js";
import type { Equipment } from "./equipment.js";
import type { ExplorationState } from "./exploration.js";
import type { GoddessState } from "./goddessState.js";
import type { VampireState } from "./vampireState.js";
import type { Player } from "./player.js";
import type { PrestigeData } from "./prestige.js";
import type { Quest } from "./quest.js";
@@ -22,6 +21,7 @@ import type { Resource } from "./resource.js";
import type { StoryState } from "./story.js";
import type { TranscendenceData } from "./transcendence.js";
import type { Upgrade } from "./upgrade.js";
import type { VampireState } from "./vampireState.js";
import type { Zone } from "./zone.js";
interface GameState {
@@ -54,9 +54,9 @@ const computeVampireSetBonuses = (
for (const threshold of [ 2, 3 ] as const) {
if (count >= threshold) {
const bonus = set.bonuses[threshold];
bloodMultiplier = bloodMultiplier * (bonus.bloodMultiplier ?? 1);
bloodMultiplier = bloodMultiplier * (bonus.bloodMultiplier ?? 1);
combatMultiplier = combatMultiplier * (bonus.combatMultiplier ?? 1);
ichorMultiplier = ichorMultiplier * (bonus.ichorMultiplier ?? 1);
ichorMultiplier = ichorMultiplier * (bonus.ichorMultiplier ?? 1);
}
}
}
@@ -13,11 +13,11 @@ type SiringUpgradeCategory =
| "utility";
interface SiringUpgrade {
id: string;
name: string;
id: string;
name: string;
description: string;
category: SiringUpgradeCategory;
ichorCost: number;
category: SiringUpgradeCategory;
ichorCost: number;
/**
* Multiplier applied when this upgrade is purchased.
@@ -4,8 +4,8 @@
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { AwakeningData } from "./vampireAwakening.js";
import type { VampireAchievement } from "./vampireAchievement.js";
import type { AwakeningData } from "./vampireAwakening.js";
import type { VampireBoss } from "./vampireBoss.js";
import type { VampireEquipment } from "./vampireEquipment.js";
import type { VampireExplorationState } from "./vampireExploration.js";
@@ -26,12 +26,12 @@ interface VampireUpgrade {
/**
* Multiplier applied to the target's output.
*/
multiplier: number;
costBlood: number;
costIchor: number;
multiplier: number;
costBlood: number;
costIchor: number;
costSoulShards: number;
purchased: boolean;
unlocked: boolean;
purchased: boolean;
unlocked: boolean;
}
export type { VampireUpgrade, VampireUpgradeTarget };