diff --git a/apps/web/src/components/game/aboutPanel.tsx b/apps/web/src/components/game/aboutPanel.tsx index 1c5caf1..3164466 100644 --- a/apps/web/src/components/game/aboutPanel.tsx +++ b/apps/web/src/components/game/aboutPanel.tsx @@ -44,7 +44,11 @@ const howToPlay = [ body: "Send your guild on quests that complete over time and reward gold," + " essence, crystals, equipment, and upgrades. Multiple quests can run" - + " simultaneously. Completing quests also unlocks new zones.", + + " simultaneously. Completing quests also unlocks new zones." + + " Each quest has a failure chance that increases in later zones" + + " (from 10% in the starting zone up to 40% in the hardest zones)." + + " If a quest fails, no rewards are granted and the quest resets —" + + " your party must be sent again to retry it.", title: "📜 Quests", }, { diff --git a/apps/web/src/components/game/questPanel.tsx b/apps/web/src/components/game/questPanel.tsx index 213f541..b81c2dc 100644 --- a/apps/web/src/components/game/questPanel.tsx +++ b/apps/web/src/components/game/questPanel.tsx @@ -10,6 +10,7 @@ /* eslint-disable max-statements -- Many local variables needed for quest state */ import { useState, type JSX } from "react"; import { useGame } from "../../context/gameContext.js"; +import { zoneFailureChance } from "../../engine/tick.js"; import { cdnImage } from "../../utils/cdn.js"; import { LockToggle } from "../ui/lockToggle.js"; import { ZoneSelector } from "./zoneSelector.js"; @@ -143,8 +144,18 @@ const QuestCard = ({ : null} > } + {quest.status === "available" + &&
+ {"🎲 "} + {String(Math.round((zoneFailureChance[quest.zoneId] ?? 0) * 100))} + {"% failure chance — if failed, the quest resets"} + {" and must be retried."} +
+ } {quest.status === "available" && quest.lastFailedAt !== undefined - &&{"⚠️ Last attempt failed"}
+ &&+ {"⚠️ Last attempt failed — no rewards were granted."} +
} {quest.status === "available" &&