generated from nhcarrigan/template
feat: goddess expansion chunks 6–9 — UI panels, tick engine, CSS theme, about page
- Add 11 goddess panels (zones, bosses, quests, disciples, equipment, upgrades, consecration, enlightenment, crafting, exploration, achievements) - Wire all panels into gameLayout via mode/tab routing - Add goddess passive income, disciple tick, quest timers, zone/quest unlock logic, and achievement checking to the tick engine - Add goddess CSS variables, .goddess-mode overrides, 300ms fade transition, and full panel stylesheet coverage - Add 13 Goddess expansion entries to the How to Play guide - Add web-side data files for crafting recipes, exploration areas, materials
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
/* eslint-disable max-lines -- API client grows with each new endpoint group */
|
||||
import type {
|
||||
AboutResponse,
|
||||
ApotheosisRequest,
|
||||
@@ -11,18 +12,37 @@ import type {
|
||||
AuthResponse,
|
||||
BossChallengeRequest,
|
||||
BossChallengeResponse,
|
||||
BuyConsecrationUpgradeRequest,
|
||||
BuyConsecrationUpgradeResponse,
|
||||
BuyEchoUpgradeRequest,
|
||||
BuyEchoUpgradeResponse,
|
||||
BuyEnlightenmentUpgradeRequest,
|
||||
BuyEnlightenmentUpgradeResponse,
|
||||
BuyGoddessUpgradeRequest,
|
||||
BuyGoddessUpgradeResponse,
|
||||
BuyPrestigeUpgradeRequest,
|
||||
BuyPrestigeUpgradeResponse,
|
||||
ConsecrationRequest,
|
||||
ConsecrationResponse,
|
||||
CraftRecipeRequest,
|
||||
CraftRecipeResponse,
|
||||
EnlightenmentRequest,
|
||||
EnlightenmentResponse,
|
||||
ExploreClaimableResponse,
|
||||
ExploreCollectRequest,
|
||||
ExploreCollectResponse,
|
||||
ExploreStartRequest,
|
||||
ExploreStartResponse,
|
||||
ForceUnlocksResponse,
|
||||
GoddessBossChallengeRequest,
|
||||
GoddessBossChallengeResponse,
|
||||
GoddessCraftRequest,
|
||||
GoddessCraftResponse,
|
||||
GoddessExploreClaimableResponse,
|
||||
GoddessExploreCollectRequest,
|
||||
GoddessExploreCollectResponse,
|
||||
GoddessExploreStartRequest,
|
||||
GoddessExploreStartResponse,
|
||||
LoadResponse,
|
||||
PrestigeRequest,
|
||||
PrestigeResponse,
|
||||
@@ -328,6 +348,145 @@ const debugHardReset = async(): Promise<LoadResponse> => {
|
||||
return await fetchJson<LoadResponse>("/debug/hard-reset", { method: "POST" });
|
||||
};
|
||||
|
||||
/**
|
||||
* Challenges a goddess boss.
|
||||
* @param body - The goddess boss challenge request payload.
|
||||
* @returns The goddess boss challenge response data.
|
||||
*/
|
||||
const challengeGoddessBoss = async(
|
||||
body: GoddessBossChallengeRequest,
|
||||
): Promise<GoddessBossChallengeResponse> => {
|
||||
return await fetchJson<GoddessBossChallengeResponse>("/goddess/boss", {
|
||||
body: JSON.stringify(body),
|
||||
method: "POST",
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Triggers a consecration reset on the server.
|
||||
* @param body - The consecration request payload.
|
||||
* @returns The consecration response data.
|
||||
*/
|
||||
const consecrate = async(
|
||||
body: ConsecrationRequest,
|
||||
): Promise<ConsecrationResponse> => {
|
||||
return await fetchJson<ConsecrationResponse>("/consecration", {
|
||||
body: JSON.stringify(body),
|
||||
method: "POST",
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Purchases a consecration upgrade on the server.
|
||||
* @param body - The buy consecration upgrade request payload.
|
||||
* @returns The buy consecration upgrade response data.
|
||||
*/
|
||||
const buyConsecrationUpgrade = async(
|
||||
body: BuyConsecrationUpgradeRequest,
|
||||
): Promise<BuyConsecrationUpgradeResponse> => {
|
||||
return await fetchJson<BuyConsecrationUpgradeResponse>(
|
||||
"/consecration/buy-upgrade",
|
||||
{ body: JSON.stringify(body), method: "POST" },
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Triggers an enlightenment reset on the server.
|
||||
* @param body - The enlightenment request payload.
|
||||
* @returns The enlightenment response data.
|
||||
*/
|
||||
const enlighten = async(
|
||||
body: EnlightenmentRequest,
|
||||
): Promise<EnlightenmentResponse> => {
|
||||
return await fetchJson<EnlightenmentResponse>("/enlightenment", {
|
||||
body: JSON.stringify(body),
|
||||
method: "POST",
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Purchases an enlightenment upgrade on the server.
|
||||
* @param body - The buy enlightenment upgrade request payload.
|
||||
* @returns The buy enlightenment upgrade response data.
|
||||
*/
|
||||
const buyEnlightenmentUpgrade = async(
|
||||
body: BuyEnlightenmentUpgradeRequest,
|
||||
): Promise<BuyEnlightenmentUpgradeResponse> => {
|
||||
return await fetchJson<BuyEnlightenmentUpgradeResponse>(
|
||||
"/enlightenment/buy-upgrade",
|
||||
{ body: JSON.stringify(body), method: "POST" },
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Purchases a goddess upgrade on the server.
|
||||
* @param body - The buy goddess upgrade request payload.
|
||||
* @returns The buy goddess upgrade response data.
|
||||
*/
|
||||
const buyGoddessUpgrade = async(
|
||||
body: BuyGoddessUpgradeRequest,
|
||||
): Promise<BuyGoddessUpgradeResponse> => {
|
||||
return await fetchJson<BuyGoddessUpgradeResponse>("/goddess/upgrade", {
|
||||
body: JSON.stringify(body),
|
||||
method: "POST",
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Crafts a goddess recipe on the server.
|
||||
* @param body - The goddess craft request payload.
|
||||
* @returns The goddess craft response data.
|
||||
*/
|
||||
const craftGoddessRecipe = async(
|
||||
body: GoddessCraftRequest,
|
||||
): Promise<GoddessCraftResponse> => {
|
||||
return await fetchJson<GoddessCraftResponse>("/goddess/craft", {
|
||||
body: JSON.stringify(body),
|
||||
method: "POST",
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Starts a goddess exploration in a given area.
|
||||
* @param body - The goddess exploration start request payload.
|
||||
* @returns The goddess exploration start response data.
|
||||
*/
|
||||
const startGoddessExploration = async(
|
||||
body: GoddessExploreStartRequest,
|
||||
): Promise<GoddessExploreStartResponse> => {
|
||||
return await fetchJson<GoddessExploreStartResponse>("/goddess/explore", {
|
||||
body: JSON.stringify(body),
|
||||
method: "POST",
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Collects the rewards from a completed goddess exploration.
|
||||
* @param body - The goddess exploration collect request payload.
|
||||
* @returns The goddess exploration collect response data.
|
||||
*/
|
||||
const collectGoddessExploration = async(
|
||||
body: GoddessExploreCollectRequest,
|
||||
): Promise<GoddessExploreCollectResponse> => {
|
||||
return await fetchJson<GoddessExploreCollectResponse>("/goddess/explore", {
|
||||
body: JSON.stringify(body),
|
||||
method: "PUT",
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks whether a given goddess exploration area is ready to claim on the server.
|
||||
* @param areaId - The area ID to check.
|
||||
* @returns Whether the goddess exploration is claimable.
|
||||
*/
|
||||
const checkGoddessExplorationClaimable = async(
|
||||
areaId: string,
|
||||
): Promise<GoddessExploreClaimableResponse> => {
|
||||
return await fetchJson<GoddessExploreClaimableResponse>(
|
||||
`/goddess/explore/claimable?areaId=${encodeURIComponent(areaId)}`,
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Fetches a public player profile by Discord ID.
|
||||
* @param discordId - The Discord ID of the player to look up.
|
||||
@@ -356,13 +515,22 @@ const updateProfile = async(
|
||||
export {
|
||||
ValidationError,
|
||||
achieveApotheosis,
|
||||
buyConsecrationUpgrade,
|
||||
buyEchoUpgrade,
|
||||
buyEnlightenmentUpgrade,
|
||||
buyGoddessUpgrade,
|
||||
buyPrestigeUpgrade,
|
||||
challengeBoss,
|
||||
challengeGoddessBoss,
|
||||
checkExplorationClaimable,
|
||||
checkGoddessExplorationClaimable,
|
||||
collectExploration,
|
||||
collectGoddessExploration,
|
||||
consecrate,
|
||||
craftGoddessRecipe,
|
||||
craftRecipe,
|
||||
debugHardReset,
|
||||
enlighten,
|
||||
forceUnlocks,
|
||||
syncNewContent,
|
||||
getAbout,
|
||||
@@ -374,6 +542,7 @@ export {
|
||||
resetProgress,
|
||||
saveGame,
|
||||
startExploration,
|
||||
startGoddessExploration,
|
||||
transcend,
|
||||
updateProfile,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user