generated from nhcarrigan/template
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:
@@ -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 };
|
||||
Reference in New Issue
Block a user