규약 세부화(유형D·13석 표결·툴팁) + 밸런스 피드백 5건 반영

같은 날 두 차례 플레이테스트에서 나온 이슈를 이어서 처리했다.

**의회 세부화**
- 유형 D(이득 규약) 5종 신설 — 토큰 지급/게이지 완화/지출 가산 완화/
  주목도 한도 증가/실적 요구치 하향. 내부 명분("강제 상정")이 여태 불리한
  유형 A만 올릴 수 있어 실속 없던 문제를 해결 — 상정 풀에 D가 포함되는 게
  내부 명분이 존재하는 이유
- 13석 표결을 실제 표 수로 구현(tallyVotes, 최대잔여법 + 결정적 해시).
  혼합 명분이 "직접 통과 지정" 자리표시자에서 §7.3 스펙대로 실제 1표
  이동으로 교체 — 동점은 스윙 전 득표가 많던 쪽이 이겨 1표 차에서만 뒤집힘.
  의회 화면에 후보별 예상 득표·표 차·뒤집기 가능 여부를 미리 노출
- 공보 축 오염 선택지 1→7개로 보강(서사 기준 6개 재배정), 축 분포 균형화

**툴팁 신설 (InfoTooltip·ProtocolChip)**
- 규약·징벌·명분을 클릭하면 정확히 무엇이 막혔는지 설명이 뜬다. 문구는
  UI가 추측하지 않고 council.js의 protocolEffectDetail·justificationDetail이
  카탈로그에서 생성. 모바일 대상이라 hover가 아닌 클릭으로 연다

**크리티컬 버그: 주목도 미초기화**
- 라운드 종료 후 한도 판정에 총 주목도(이월 포함)를 쓰고 있어, 2라운드가
  시작하자마자 이미 한도를 넘어 버스트가 무한 반복되고 있었다. 한도 판정은
  "이번 라운드에 받은 카드"만 세도록 분리(roundAttention), 게이지·토큰
  가산은 기존대로 총계(이월 포함) 기준 유지

**밸런스 피드백 5건**
- 결재 카드가 고정으로 보인다는 지적 → 실제 버그였다. cardIndex를 그냥
  +1씩 돌려 CSV 순서 그대로 결정론적으로 반복되고 있었다. Fisher–Yates
  셔플 큐로 교체(큐 소진 시 재셔플)
- 위협 축도 거의 안 나온다 → 위 셔플 버그가 원인의 상당 부분. 명백한
  오배정 1건도 발견해 수정(id11 "군사 개입 지시": 고대 신 소환 저지가
  인사 축으로 잘못 들어가 있었음 → 위협 축)
- 게이지 상승이 너무 낮음 → 등급 합계(주목도) 단독 기준이 실제 카드
  등급 분포(대부분 1~4급)와 맞지 않아 3~4장을 쌓아도 최하 구간을 못
  벗어났다. 카드 장수를 1차 기준으로 되돌리고 등급 배율(평균등급/5)을
  곱하는 방식으로 재설계 — 3~4장 구간에서 6배 점프(0.5%→3.0%)
- 좌우 모두 오염 없는 완전 무행동 카드 1건(id15) 수정 — 좌측에 대외/6급
  부여(기존 tag_corruption과 정합)
- 오염 카드 한쪽만 있어 안전 선택 메리트가 없다는 지적은 카드 데이터가
  아니라 게이지 곡선 문제로 판단, 위 재설계로 해결(카드 재배분 안 함)

**문서**
- 결정 노트 2건: 2026-09-17-주목도-라운드-분리,
  2026-09-17-게이지상승-장수기준-복원(기각한 대안 포함)
- 기획서 §4.2-A/B, §7.3, §9.2, §17 갱신. DEVLOG 2건 기록

Playwright로 전 구간 검증: 셔플(3회 재접속 시 다른 카드, 15연속 무반복),
게이지 상승률 표시, 13석 표결 예상치, 규약/명분 툴팁, 2라운드 진입 시
주목도 0으로 리셋 확인. 콘솔 에러 0건, 빌드 클린.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
kyoung5seo
2026-09-17 23:00:42 +09:00
co-authored by Claude Sonnet 5
parent 0a065068c1
commit 6398599199
18 changed files with 1113 additions and 214 deletions
+36 -16
View File
@@ -147,33 +147,45 @@
> 카드 등급이 1~10으로 확장되며, 페널티 기준을 **장수**가 아니라 **등급 합계**로 삼는다. 이 등급 합계를 **주목도**라 부른다 — 처리하지 않은 사안이 무거울수록 조직 안팎의 시선이 쏠린다는 관료제적 의미다.
```
주목도(축별) = 해당 축에 적재된 카드들의 등급 합
주목도(총계) = 책상 전체 카드들의 등급 합
주목도(축별) = 해당 축에 적재된 카드들의 등급 합 → A. 게이지 상승
주목도(총계) = 책상 전체 카드들의 등급 합 (이월 포함) → C. 토큰 지출 가산
주목도(이번 라운드) = 이번 라운드에 받은 카드들의 등급 합 → B. 라운드 한도 판정
```
**A. 게이지 상시 상승** — 축별 주목도에 따라 매 결재마다 대응 게이지 상승 (가안, 플레이 후 조정)
> **2026-09-17 결정**: 한도 판정만 "이번 라운드분"으로 분리한다. 한도 판정에 총계를 쓰면 이월 카드(§4.1) 때문에 라운드가 시작하자마자 이미 한도를 넘어 있어 **버스트가 무한 반복**된다(실제 플레이에서 라운드가 계속 자동으로 넘어가는 버그로 드러남). 블랙잭에서 각 핸드가 0부터 시작하듯, 한도는 "이번 판에 새로 떠안은 무게"만 센다. 이월된 카드의 압박은 사라지지 않고 총계 기준인 게이지 상승·토큰 가산으로 계속 작용한다. 결정 노트: `2026-09-17-주목도-라운드-분리`.
| 해당 축 주목도 | 결재당 상승 |
**A. 게이지 상시 상승** — 축별 **카드 장수**를 1차 기준으로, 등급 배율을 곱해 매 결재마다 대응 게이지 상승 (가안, 플레이 후 조정)
```
결재당 상승(%) = 장수 구간 기본값 × (해당 축 평균 등급 / 5)
```
| 해당 축 카드 장수 | 기본값 |
|---|---|
| 1~15 | +0.5% |
| 16~30 | +1.5% |
| 31~40 | +3.0% |
| 41 이상 | +5.0%, 이후 초과분 10당 +1.0%씩 추가 누진 |
| 1~2장 | 0.5% |
| 3~4장 | **3.0%** |
| 5~6장 | 6.0% |
| 7~9장 | 10.0% |
| 10장 이상 | 15.0%, 이후 1장마다 +2.0%씩 추가 누진 |
> **2026-09-17 결정 (재설계, 주목도 단독 기준 폐기)**: 등급 합계(주목도)만으로 상승률을 정하면 실제 카드 등급 분포(대부분 1~4급에 몰림)에서 같은 축 카드를 여러 장 쌓아도 낮은 구간에 계속 머물러 위협이 전혀 느껴지지 않았다(플레이 피드백: "누적 카드 3장 이상부터 증가값이 커졌으면 함"). 그래서 1차 기준을 장수로 되돌리되, 등급이 여전히 의미를 갖도록 평균 등급 배율(÷5, 등급 5가 기준점)을 곱한다 — 저등급만 쌓이면 완만하고 고등급이 섞이면 같은 장수에서도 훨씬 아프다. 결정 노트: `2026-09-17-게이지상승-장수기준-복원`.
**B. 라운드 종료 판단 (블랙잭식 하드 캡, 2026-09-16 재도입)**
플레이어는 매 카드 선택 직후 총 주목도를 이번 라운드의 한도와 비교해 계속 받을지 정산할지 스스로 판단한다. 한도를 넘기면 그 자리에서 즉시 라운드가 강제 종료된다 — §2.2 참고.
플레이어는 매 카드 선택 직후 **이번 라운드 주목도**를 한도와 비교해 계속 받을지 정산할지 스스로 판단한다. 한도를 넘기면 그 자리에서 즉시 라운드가 강제 종료된다 — §2.2 참고.
```
한도(라운드) = 21 + (라운드 번호 − 1) × 5 (가안, §20.1 튜닝 대상)
한도(라운드) = 21 + (라운드 번호 − 1) × 5 + 이득 규약 보너스 (가안, §20.1 튜닝 대상)
```
| 총 주목도 (한도 대비) | 상태 |
| 이번 라운드 주목도 (한도 대비) | 상태 |
|---|---|
| 한도 − 5 미만 | 자동 진행. 별도 경고 없음 |
| 한도 − 5 ~ 한도 | **경고 구간** — 곧 넘긴다는 시각 경고, 정산할지 고려 |
| 한도 초과 | **버스트** — 그 즉시 라운드 강제 종료. 합본 기회 없이 카드는 이월(§4.1) |
> **UI 필수**: 이번 라운드 주목도와 이월분을 구분해 보여줄 것. 이월분이 안 보이면 게이지가 왜 계속 오르는지 알 수 없고, 합쳐 보이면 한도까지 얼마 남았는지 오독한다. "정산하기" 버튼은 결재 카드 바로 아래에 둔다 — 툴바 구석에 있으면 핵심 결정 버튼인 줄 모른다(플레이테스트 확인).
> **결정 이력**: 최초엔 "주목도 21 초과 시 즉시 강제 종료"안을 로그라이크 초반에 과하다는 이유로 기각하고 초과분 누진 페널티(소프트 오버런)로 대체했었다. 그런데 하드 캡이 없으니 "지금 정리할까 더 모을까"의 실제 리스크가 사라져 핵심 재미(§1.1)가 실종됐다 — 그래서 하드 캡을 되살리되, 한도 자체가 라운드마다 커지는 성장 곡선을 더해 초반 가혹함 문제만 따로 해결했다. 상세 근거는 결정 노트 `2026-09-16-라운드-주목도-하드캡-복원` 참고.
**C. 토큰 지출 가산** — 총 주목도에 따라 모든 토큰 지출에 가산
@@ -309,7 +321,9 @@
| **여론 명분** (공보) | 후보 1개 **강제 탈락** + 새 후보 1개 무작위 교체 |
| **위기 명분** (위협) | 누적된 **징벌 규약 1개 조기 해제** |
| **내부 명분** (인사) | 후보 1개 **강제 상정** (표결 자체는 그대로. 원하는 이득 규약을 올릴 때 사용) |
| **혼합 명분** | 표결 결과 1표 뒤집기 |
| **혼합 명분** | 표결 결과 1표 뒤집기 (지정 후보 +1, 선두 −1) |
> **혼합 명분은 1표만 움직인다.** +1/−1이라 표 차를 2 좁히지만, 동점은 원래 표가 많던 쪽이 이기므로 **실제로 뒤집히는 건 1표 차 승부일 때뿐**이다. 그래서 의회 화면은 후보별 예상 득표와 1·2위 표 차를 미리 보여줘야 한다 — 표 차를 모르면 쓸지 말지 판단할 수 없다. (§9.2 13석 표결)
**② 정보 획득**
@@ -430,6 +444,10 @@
**유형 D. 이득 규약** — 드물게 통과. 자산 지급, 족보 완화, 토큰 지급.
구현된 5종(가안): 토큰 즉시 지급 / 결재당 게이지 상승 완화 / 토큰 지출 가산 완화 / **주목도 한도 증가** / 실적 요구치 하향. 후보 3개 중 하나가 D일 확률은 30% — §9.2의 "드물게 통과"를 확률로 옮긴 값이다. 자산 지급형은 자산 시스템(§10, 3차)이 생긴 뒤 추가한다.
> **내부 명분과의 연결**: 유형 D가 없으면 §7.3의 내부 명분("후보 강제 상정")이 불리한 규약만 올릴 수 있어 쓸 이유가 없다. 상정 가능 목록에 이득 규약이 포함되는 것이 내부 명분의 존재 이유다.
### 9.3. 실적 감사
> **라운드당 합본 횟수를 강제하지 않는다.** 처리 장수나 합본 횟수를 요구하면 플레이어 선택이 감소하고 전략성이 떨어진다. **다중 통화 결산**으로 여러 경로를 허용한다.
@@ -760,11 +778,13 @@
5. [~] **상점** (§8.3) — "오염 카드 직접 처리"만 구현. 자산 구매·소모품·전례 매입은 3차가
먼저 있어야 성립해서 아직 없음
6. [x] **규약 시스템 — 유형 A 족보표 변경 우선** (§9.2) — 유형 A 7종 + 감사 실패용 유형 C 2종
(5개 초과 시 목록 압축 표시 포함). 유형 B·D는 범위 밖(§20.2 소량 배치 콘텐츠 작업 대상)
(5개 초과 시 목록 압축 표시 포함) + 이득 유형 D 5종. 13석 표결을 실제 표 수로 구현하고
예상 득표를 의회 화면에 공개한다. 유형 B(금리형)만 범위 밖(§20.2)
7. [x] **실적 감사 + 다중 통화 결산** (§9.3)
8. [~] **명분 산출 및 규약 개입** (§7) — 절차·여론·위기·내부 4갈래 구현. 혼합 명분("표결 1표
뒤집기")은 실제 위원회 표가 없어 "직접 통과 지정"으로 대체한 자리표시자 — 4차에서 13인
위원회가 생기면 재설계 필요. §7.3 ②정보 획득·③임원 직접 관리는 위원회가 없어 미구현
8. [~] **명분 산출 및 규약 개입** (§7) — 절차·여론·위기·내부·혼합 5갈래 전부 구현. 혼합 명분은
더 이상 자리표시자가 아니라 §7.3 스펙대로 **실제 1표 이동**이다(1표 차에서만 뒤집힘).
다만 §7.3 ②정보 획득·③임원 직접 관리는 임원 개개인이 없어 미구현 — 4차에서 13인 위원회의
우호도·이중첩자(§9.5)가 생기면 지금의 무작위 표 배분도 "임원별 투표"로 교체한다
### 3차 — 빌드 및 리플레이성
9. [ ] **자산 시스템 + 발동 로그** (§10)