feat: companion system (named NPCs with passive bonuses and personality) #23

Closed
opened 2026-03-07 14:38:31 -08:00 by hikari · 0 comments
Owner

Overview

Companions are named NPC characters who join the player's guild hall and provide passive bonuses. Unlike adventurers (which are generic tiered hirelings), companions are unique individuals with names, portraits, backstories, and specific abilities. They add personality to the guild hall and give players collectibles to chase.

Design

Acquiring Companions

  • Unlocked through specific achievements, quest chains, boss milestones, or exploration discoveries
  • Each companion has a single unlock condition — they can't be purchased with gold
  • Once unlocked, they're permanent (not lost on prestige/transcendence/apotheosis)

Companion Bonuses (examples)

Each companion provides one passive bonus, e.g.:

  • +X% gold per click
  • +X% passive gold income
  • Reduced quest failure chance
  • +X% boss damage
  • Faster quest timers
  • +X% exploration success chance

Guild Hall Display

  • Active companions appear as cards in a dedicated Companions tab
  • Each card shows: portrait (art), name, title/role, short flavour bio, and their bonus
  • Locked companions show as silhouettes with a hint about how to unlock them

Data Structure

Companion {
  id: string
  name: string
  role: string           // e.g. "Court Mage", "Guild Treasurer"
  bio: string            // flavour text
  bonus: string          // description of passive bonus
  bonusValue: number     // the actual multiplier/modifier
  unlockCondition: string // human-readable hint
  portrait: string       // image URL or asset reference
}

GameState

  • unlockedCompanions: string[] — array of companion IDs

Task Checklist

  • Companion type in packages/types
  • companions.ts data file (suggest starting with ~10 companions)
  • Add unlockedCompanions: string[] to GameState
  • Unlock logic — check conditions server-side on save/boss/quest events
  • Apply companion bonuses in the tick engine and relevant calculations
  • CompanionPanel.tsx — tab showing unlocked + locked companions
  • Add Companions tab to GameLayout.tsx
  • Commission or source portrait art (ties into #15)
  • Update About panel How to Play

This issue was created with help from Hikari~ 🌸

## Overview **Companions** are named NPC characters who join the player's guild hall and provide passive bonuses. Unlike adventurers (which are generic tiered hirelings), companions are unique individuals with names, portraits, backstories, and specific abilities. They add personality to the guild hall and give players collectibles to chase. ## Design ### Acquiring Companions - Unlocked through specific achievements, quest chains, boss milestones, or exploration discoveries - Each companion has a single unlock condition — they can't be purchased with gold - Once unlocked, they're permanent (not lost on prestige/transcendence/apotheosis) ### Companion Bonuses (examples) Each companion provides one passive bonus, e.g.: - **+X% gold per click** - **+X% passive gold income** - **Reduced quest failure chance** - **+X% boss damage** - **Faster quest timers** - **+X% exploration success chance** ### Guild Hall Display - Active companions appear as cards in a dedicated **Companions** tab - Each card shows: portrait (art), name, title/role, short flavour bio, and their bonus - Locked companions show as silhouettes with a hint about how to unlock them ### Data Structure ``` Companion { id: string name: string role: string // e.g. "Court Mage", "Guild Treasurer" bio: string // flavour text bonus: string // description of passive bonus bonusValue: number // the actual multiplier/modifier unlockCondition: string // human-readable hint portrait: string // image URL or asset reference } ``` ### GameState - `unlockedCompanions: string[]` — array of companion IDs ## Task Checklist - [ ] `Companion` type in `packages/types` - [ ] `companions.ts` data file (suggest starting with ~10 companions) - [ ] Add `unlockedCompanions: string[]` to `GameState` - [ ] Unlock logic — check conditions server-side on save/boss/quest events - [ ] Apply companion bonuses in the tick engine and relevant calculations - [ ] `CompanionPanel.tsx` — tab showing unlocked + locked companions - [ ] Add Companions tab to `GameLayout.tsx` - [ ] Commission or source portrait art (ties into #15) - [ ] Update About panel How to Play --- ✨ This issue was created with help from Hikari~ 🌸
naomi closed this issue 2026-03-08 15:53:41 -07:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: nhcarrigan/elysium#23