웹 기반 ASCII 리미널 호러 팬게임 (사양서 v0.2 구현).
방송자가 사라진 채 계속 켜져 있는 라이브 페이지에 접속한다. 채팅은 계속 올라오고, 중앙의 형상은 채팅과 반죽 기록에 맞춰 흔들린다. 어떤 선택을 하더라도 원본은 발견되지 않는다.
빌드 과정 없음. 정적 파일이므로 아무 웹 서버로 열면 된다.
cd unnie-horror
python3 -m http.server 8000
# 브라우저에서 http://localhost:8000(음성/사운드는 브라우저 자동재생 정책 때문에 첫 클릭 — [ 라이브 페이지 접속 ] — 이후에 시작된다.)
| 파일 | 역할 |
|---|---|
index.html |
화면 구조 (부팅/라이브/PC탐색/기록/아카이브/퍼즐/루틴/복원/메뉴/엔딩) |
style.css |
ASCII·CRT 분위기 스타일 |
data.js |
채팅 풀, 이상 현상, 파일 시스템, 파싱 퍼즐 10종, 루틴 큐, 기록, 엔딩 텍스트 |
audio.js |
Web Audio 합성 룸톤·글리치·음성 파편 (assets 파일 우선) |
game.js |
7블록 진행, 해금 체인, 목표 바, 단서 노트, 형상 렌더러, NG+, 엔딩 분기 |
test/chain-test.js |
헤드리스 전체 진행 검증 (npm i jsdom@22 후 node test/chain-test.js) |
- 방송 관찰 — 이상 현상 6종 중 3개를 클릭해 발견 → filesystem 해금
- filesystem 탐색 — 잠긴 폴더마다 해금 조건이 힌트로 표시됨
- 채팅 파싱 복원 —
parser_recovery.exe, 필수 6 + 선택 4 퍼즐 - routine_queue 해제 —
rest_refusal.log의 거절 순서를 거꾸로 (잠→다음 방송→나중에). 틀리면 새 작업이 생성되고 실패 카운트가 쌓임 - 반죽이 기록 대조 — original/displayed 비교 → 왜곡 규칙 추론 퀴즈
- recordings/ 클립 검토 — 잘려나간 다시보기 3개를 재생하고 어긋난 점을 찾는다 (전부 '끝'이 잘려 있다)
- 복원 소스 실험 — 4개 소스 선택. routine_queue를 넣으면 rest가 영구 거부됨
- SYSTEM MENU — 최종 선택. rest의 잠금 사유가 메뉴에 그대로 표시됨
힌트 체인: 모든 화면 하단의 ▸ 목표 바가 항상 다음 한 걸음을 가리키고,
발견한 단서는 traces에 쌓이며 각 단서의 → 줄이 다음 목적지를 가리킨다.
do_not_restore.txt가 휴식 엔딩의 조건표 역할을 한다.
| 키 | 조건 |
|---|---|
| A. 방송 종료 | 방송 종료 버튼 / 메뉴 [2] end_stream.exe |
| C. 전송됨 | phase 2 이후 마지막 메시지 남기기 → 채팅 전송 |
| D. 복원 | 복원 실행 후 메뉴 [1] restore_source.exe (voice 소스 포함 시 "고마워" 연출) |
| E. 보존됨 | current.log 열람 후 현재 기록 보존 / 메뉴 [3] |
| F. 방치 | phase 3에서 120초 무입력, 또는 메뉴 [4] keep_watching 후 45초 |
| R. 휴식 | 루틴 해제 + rest_refusal.log + 왜곡 규칙 + do_not_restore.txt 확인 + routine_queue를 복원 소스로 쓰지 않음 → 메뉴 [5] rest |
엔딩 도달 시 localStorage에 기록된다.
2회차: returning_viewer.log 등장, current.log에 이전 회차 흔적, 오염 채팅 추가.
3회차: do_not_restore.txt가 처음부터 보이고 routine_queue에 skip 권한이 생긴다.
assets/에는 쿠로네 언니 본인 허가 범위 내에서 채널 영상으로부터 추출·재가공한
실제 소재가 포함되어 있다. 출처와 가공 내역은 assets/SOURCES.md 참조.
assets/
├─ bg_live.png # 방송 캡처 프레임 (캐릭터 영역 마스킹 + 탈색 처리됨)
├─ roomtone.mp3 # 방송 음성 기반 재합성 드론 (원형 인식 불가)
├─ SOURCES.md # 사용 소재 목록 (사양서 2.2)
└─ voice/ # 실제 발화를 잘라 글리치 가공한 음성 조각
├─ 고.mp3 고마.mp3 고마워.mp3 # 복원 엔딩 "고마워" 시퀀스
├─ 아.mp3 아직.mp3 보고.mp3 기다려.mp3
├─ 언니.mp3 # 플레이어가 "언니"를 부르면 재생됨
└─ 내가뭘보고있는거지.mp3 # 3단계 ARCHIVE 첫 열람 시
파일명 = 게임 내 출력 텍스트(말줄임표 제외). 파일을 지우면 코드가 자동으로
Web Audio 합성 글리치 사운드로 대체하므로, 소재 없이도 전체 플레이가 가능하다.
ML 보이스 클로닝(새 발화 생성)은 사용하지 않았다 — 실제 발화 조각의 DSP 재가공만 사용.
work/에 추출 원본(wav)과 자막이 보존되어 있어 컷을 다시 딸 수 있다.
- 짧고 불완전한 조각만 사용한다 — 긴 자연스러운 문장 금지.
- 실제 발언처럼 오해될 수 있는 내용, 모욕적·성적 맥락 금지.
- 음성 출력 직후 시스템 로그를 병기해 생성 출력임을 암시한다 (코드에 이미 구현됨).
- 영상 내 제3자 저작권 음악은 샘플링하지 않는다.
- 공개 배포 전 최종 빌드에 사용된 음성·이미지·음원 샘플 목록을 정리한다.
본 게임은 쿠로네 언니님의 허가를 받아 제작된 팬게임입니다. 일부 배경 이미지와 음성 기반 연출은 쿠로네 언니님의 방송 영상을 바탕으로 재가공 및 AI 합성되었습니다. 게임 내 합성 음성은 실제 발언이 아닌 공포 연출용 생성 음성입니다.