commit 84d305b74b2b7b1b74141c2b1f525d8e9b425db0 Author: tolelom <98kimsungmin@naver.com> Date: Mon Mar 23 22:44:10 2026 +0900 Add Catacombs game design spec Co-op roguelike terminal game over SSH using Go + Charm stack. Co-Authored-By: Claude Opus 4.6 (1M context) diff --git a/docs/superpowers/specs/2026-03-23-catacombs-design.md b/docs/superpowers/specs/2026-03-23-catacombs-design.md new file mode 100644 index 0000000..d3ea47d --- /dev/null +++ b/docs/superpowers/specs/2026-03-23-catacombs-design.md @@ -0,0 +1,196 @@ +# Catacombs — Design Spec + +SSH 멀티플레이어 협동 로그라이크 터미널 게임 + +## Overview + +Go + Charm 스택 기반의 SSH 접속 멀티플레이어 협동 로그라이크. 2~4인 파티가 절차적 생성 던전을 탐험하며, 반실시간 턴제 전투와 클래스 기반 역할 분담으로 20층 던전을 클리어하는 게임. + +- **접속:** SSH 메인 (`ssh catacombs.tolelom.xyz`), 웹 터미널 추후 추가 +- **한 판:** 30~45분, 10~20층 +- **인원:** 2~4인 협동 +- **시각:** 박스 드로잉 + ANSI 컬러 + +## Architecture + +단일 Go 바이너리 모놀리스, Docker 컨테이너 하나로 배포. + +``` +┌─────────────────────────────────────────┐ +│ Docker Container │ +│ │ +│ ┌─────────────┐ ┌────────────────┐ │ +│ │ Wish SSH │──▶│ Bubble Tea │ │ +│ │ Server │ │ TUI Engine │ │ +│ │ :2222 │ └───────┬────────┘ │ +│ └─────────────┘ │ │ +│ ┌───────▼────────┐ │ +│ │ Game Engine │ │ +│ │ - Lobby │ │ +│ │ - Dungeon │ │ +│ │ - Combat │ │ +│ │ - Turn Timer │ │ +│ └───────┬────────┘ │ +│ ┌───────▼────────┐ │ +│ │ BoltDB │ │ +│ │ (랭킹, 통계) │ │ +│ └────────────────┘ │ +└─────────────────────────────────────────┘ +``` + +### Dependencies + +- `charmbracelet/wish` — SSH 서버 +- `charmbracelet/bubbletea` — TUI 프레임워크 +- `charmbracelet/lipgloss` — 스타일링 (색상, 박스 드로잉) +- `go.etcd.io/bbolt` — 경량 임베디드 DB (랭킹/통계) + +### Deployment + +- Docker 이미지 빌드, Mac Mini에서 `docker compose up` +- Caddy에서 SSH 포트(2222) TCP 패스스루 +- `ssh catacombs.tolelom.xyz` 또는 `ssh -p 2222 tolelom.xyz` + +## Game Flow + +``` +SSH 접속 → 타이틀 → 로비 (방 생성/참가) → 클래스 선택 → 던전 탐험 + → 이벤트 (전투/상점/보물) → 다음 층 or 사망 → 결과 화면 → 랭킹 +``` + +### Turn System (반실시간) + +1. 서버가 "행동 입력 대기" 상태 시작, 5초 타이머 +2. 각 플레이어가 이동/공격/스킬/아이템 중 선택 +3. 타이머 종료 시 미입력 플레이어는 대기(방어 자세) +4. 모든 입력 수집 → 동시 실행 → 결과 렌더링 +5. 적 턴 자동 실행 → 다음 턴 + +## Classes + +| 클래스 | HP | ATK | 역할 | 특수 스킬 | +|--------|-----|-----|------|-----------| +| 전사 | 높음 | 중간 | 탱커 | 도발 (적 어그로 집중) | +| 마법사 | 낮음 | 높음 | 딜러 | 화염구 (범위 공격) | +| 힐러 | 중간 | 낮음 | 서포터 | 치유 (아군 HP 회복) | +| 도적 | 중간 | 중간 | 유틸 | 정찰 (다음 방 미리보기) | + +## Combat System + +- 파티 vs 몬스터 그룹 (1~5마리) +- 행동 선택: `[이동] [공격] [스킬] [아이템] [대기]` +- 타겟 지정: 방향키/번호로 적 선택 +- 데미지 계산: `ATK × 스킬배율 - DEF + 랜덤(±15%)` +- 협동 보너스: 같은 적을 2명 이상 공격 시 10% 추가 데미지 + +### Progression + +- 레벨업 없음 (로그라이크) +- 성장은 아이템 의존 — 무기, 방어구, 소모품, 특수 유물 +- 층마다 상점 등장 확률 30%, 골드로 아이템 구매 +- 유물은 패시브 효과 (예: "적 처치 시 HP 5 회복") + +## Dungeon Generation + +- BSP(Binary Space Partitioning)로 층마다 맵 생성 +- 한 층: 5~8개 방 + 복도로 연결 +- 맵 크기: 약 60×30 타일 + +### Room Types + +| 타입 | 확률 | 내용 | +|------|------|------| +| 일반 전투 | 40% | 몬스터 조우 | +| 보물방 | 15% | 아이템 획득 | +| 상점 | 10% | 골드로 아이템 구매 | +| 이벤트 | 15% | 랜덤 이벤트 (함정, 축복 등) | +| 빈 방 | 10% | 안전지대 | +| 보스방 | 층당 1개 | 보스 처치 시 다음 층 개방 | + +### Field of View + +- 전장의 안개(Fog of War) — 파티 주변만 보임 +- 도적의 정찰 스킬로 시야 확장 가능 +- 방문한 방은 희미하게 표시 + +## Rendering + +``` +┌─ Catacombs B3 ──────────── Party: 4/4 ─┐ +│ │ +│ ┌─────┐ ┌─────┐ │ +│ │.....│───│..$..│ │ +│ │..@..│ │.....│ ░░░░░ │ +│ │..♦..│ └─────┘ ░░░░░ │ +│ └──┬──┘ ░░░░░ │ +│ │ │ +│ ┌──┴──┐ ┌─────┐ │ +│ │..D..│───│.....│ │ +│ │.....│ │..?..│ │ +│ └─────┘ └─────┘ │ +│ │ +├─────────────────────────────────────────┤ +│ HP ██████░░ 65/100 │ 골드: 120 │ +│ [1]이동 [2]공격 [3]스킬 [4]아이템 │ +│ ⏱ 4.2s │ +└─────────────────────────────────────────┘ +``` + +`@` 플레이어 `♦` 아군 `D` 몬스터 `$` 아이템 `?` 이벤트 `░` 미탐사 + +## Difficulty & Balance + +### Floor Scaling + +- 몬스터 HP/ATK가 층마다 ~15% 증가 +- 5층, 10층, 15층, 20층에 보스 등장 +- 보스 처치 시 유물 확정 드랍 + +### Difficulty Curve + +| 구간 | 층 | 특징 | +|------|-----|------| +| 초반 | 1~5 | 튜토리얼 느낌, 쉬운 적, 기본 아이템 수급 | +| 중반 | 6~12 | 역할 분담 중요해짐, 자원 관리 시작 | +| 후반 | 13~18 | 강적 등장, 유물 시너지로 승부 | +| 최종 | 19~20 | 최종 보스, 파티 연계 필수 | + +### Death + +- 개인 사망 → 해당 턴 부활 불가, 다음 층 시작 시 HP 30%로 부활 +- 전멸 → 게임 오버, 결과 화면 +- 세이브 없음 (로그라이크) + +## Project Structure + +``` +catacombs/ +├── main.go # 진입점, SSH 서버 시작 +├── server/ +│ └── ssh.go # Wish SSH 설정, 세션 관리 +├── game/ +│ ├── lobby.go # 로비, 방 생성/참가 +│ ├── session.go # 게임 세션 (파티 상태 관리) +│ ├── turn.go # 턴 타이머, 입력 수집, 실행 +│ └── event.go # 이벤트 처리 (전투, 상점, 보물 등) +├── dungeon/ +│ ├── generator.go # BSP 던전 생성 +│ ├── room.go # 방 타입, 내용물 배치 +│ └── fov.go # 시야 계산 +├── entity/ +│ ├── player.go # 플레이어, 클래스, 인벤토리 +│ ├── monster.go # 몬스터 정의, AI +│ └── item.go # 아이템, 유물 +├── combat/ +│ └── combat.go # 데미지 계산, 전투 로직 +├── ui/ +│ ├── model.go # Bubble Tea 메인 모델 +│ ├── title.go # 타이틀 화면 +│ ├── lobby_view.go # 로비 뷰 +│ ├── game_view.go # 던전/전투 뷰 +│ └── result_view.go # 결과 화면 +├── store/ +│ └── db.go # BoltDB 랭킹/통계 +├── Dockerfile +└── docker-compose.yml +```