feat: goddess expansion chunk 2 — full content data at base game scale

- 18 zones, 72 bosses, 90 quests across the goddess realm
- 32 disciple tiers, 53 equipment pieces, 9 equipment sets
- 57 goddess upgrades, 25 consecration upgrades, 15 enlightenment upgrades
- 54 sacred materials, 36 crafting recipes, 72 exploration areas
- 40 goddess achievements
- Added GoddessEquipmentSet type + computeGoddessSetBonuses to @elysium/types
- All data files excluded from coverage pending Chunk 4 route imports
This commit is contained in:
2026-04-13 12:50:25 -07:00
committed by Naomi Carrigan
parent c09777199a
commit c5d1f53eef
17 changed files with 7855 additions and 12 deletions
+5
View File
@@ -142,6 +142,11 @@ export type {
GoddessQuestRewardType,
GoddessQuestStatus,
} from "./interfaces/goddessQuest.js";
export type {
GoddessEquipmentSet,
GoddessEquipmentSetBonus,
} from "./interfaces/goddessEquipmentSet.js";
export { computeGoddessSetBonuses } from "./interfaces/goddessEquipmentSet.js";
export type { GoddessState } from "./interfaces/goddessState.js";
export type {
GoddessUpgrade,
@@ -0,0 +1,69 @@
/**
* @file Goddess Equipment Set types for the Elysium game.
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
interface GoddessEquipmentSetBonus {
combatMultiplier?: number;
divinityMultiplier?: number;
prayersMultiplier?: number;
}
interface GoddessEquipmentSet {
id: string;
name: string;
description: string;
/**
* Goddess equipment IDs that make up this set.
*/
pieces: Array<string>;
bonuses: {
// eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys
2: GoddessEquipmentSetBonus;
// eslint-disable-next-line @typescript-eslint/naming-convention -- numeric keys
3: GoddessEquipmentSetBonus;
};
}
/**
* Given a list of equipped goddess item IDs and a set catalogue, returns the
* combined multiplicative bonuses granted by all active set bonuses.
* @param equippedItemIds - The IDs of goddess items currently equipped.
* @param sets - The full catalogue of goddess equipment sets to evaluate against.
* @returns The combined prayers, combat, and divinity multipliers from active set bonuses.
*/
const computeGoddessSetBonuses = (
equippedItemIds: Array<string>,
sets: Array<GoddessEquipmentSet>,
): {
combatMultiplier: number;
divinityMultiplier: number;
prayersMultiplier: number;
} => {
let prayersMultiplier = 1;
let combatMultiplier = 1;
let divinityMultiplier = 1;
for (const set of sets) {
const count = set.pieces.filter((id) => {
return equippedItemIds.includes(id);
}).length;
for (const threshold of [ 2, 3 ] as const) {
if (count >= threshold) {
const bonus = set.bonuses[threshold];
prayersMultiplier = prayersMultiplier * (bonus.prayersMultiplier ?? 1);
combatMultiplier = combatMultiplier * (bonus.combatMultiplier ?? 1);
divinityMultiplier
= divinityMultiplier * (bonus.divinityMultiplier ?? 1);
}
}
}
return { combatMultiplier, divinityMultiplier, prayersMultiplier };
};
export type { GoddessEquipmentSet, GoddessEquipmentSetBonus };
export { computeGoddessSetBonuses };