Remove unused nuzlocke rules, reorganize into core and playstyle
All checks were successful
CI / backend-lint (push) Successful in 9s
CI / actions-lint (push) Successful in 15s
CI / frontend-lint (push) Successful in 21s

Remove firstEncounterOnly, permadeath, nicknameRequired, and
postGameCompletion from the rules system — they are either implicit
(it's a nuzlocke tracker) or not enforced. Move levelCaps to core
(it's displayed in the sticky bar). Create a new "playstyle" category
for hardcoreMode and setModeOnly — informational rules useful for
stats but not enforced by the tracker. Remove the completion category
entirely. Add sub-task beans for the rules overhaul epic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-20 21:20:23 +01:00
parent 4fbfcf9b29
commit e25d1cf24c
11 changed files with 204 additions and 124 deletions

View File

@@ -21,9 +21,7 @@ export function RuleBadges({ rules }: RuleBadgesProps) {
className={`px-2 py-0.5 rounded-full text-xs font-medium ${
def.category === 'core'
? 'bg-blue-900/40 text-blue-300 light:bg-blue-100 light:text-blue-700'
: def.category === 'completion'
? 'bg-green-900/40 text-green-300 light:bg-green-100 light:text-green-700'
: 'bg-amber-900/40 text-amber-300 light:bg-amber-100 light:text-amber-800'
: 'bg-purple-900/40 text-purple-300 light:bg-purple-100 light:text-purple-700'
}`}
>
{def.name}

View File

@@ -19,8 +19,7 @@ export function RulesConfiguration({
? RULE_DEFINITIONS.filter((r) => !hiddenRules.has(r.key))
: RULE_DEFINITIONS
const coreRules = visibleRules.filter((r) => r.category === 'core')
const difficultyRules = visibleRules.filter((r) => r.category === 'difficulty')
const completionRules = visibleRules.filter((r) => r.category === 'completion')
const playstyleRules = visibleRules.filter((r) => r.category === 'playstyle')
const handleRuleChange = (key: keyof NuzlockeRules, value: boolean) => {
onChange({ ...rules, [key]: value })
@@ -74,11 +73,13 @@ export function RulesConfiguration({
<div className="bg-surface-1 rounded-lg shadow">
<div className="px-4 py-3 border-b border-border-default">
<h3 className="text-lg font-medium text-text-primary">Difficulty Modifiers</h3>
<p className="text-sm text-text-tertiary">Optional rules to increase the challenge</p>
<h3 className="text-lg font-medium text-text-primary">Playstyle</h3>
<p className="text-sm text-text-tertiary">
Describe how you're playing — doesn't affect tracker behavior
</p>
</div>
<div className="px-4">
{difficultyRules.map((rule) => (
{playstyleRules.map((rule) => (
<RuleToggle
key={rule.key}
name={rule.name}
@@ -89,26 +90,6 @@ export function RulesConfiguration({
))}
</div>
</div>
{completionRules.length > 0 && (
<div className="bg-surface-1 rounded-lg shadow">
<div className="px-4 py-3 border-b border-border-default">
<h3 className="text-lg font-medium text-text-primary">Completion</h3>
<p className="text-sm text-text-tertiary">When is the run considered complete</p>
</div>
<div className="px-4">
{completionRules.map((rule) => (
<RuleToggle
key={rule.key}
name={rule.name}
description={rule.description}
enabled={rules[rule.key]}
onChange={(value) => handleRuleChange(rule.key, value)}
/>
))}
</div>
</div>
)}
</div>
)
}