# 🎣 피쉬코지 FISH COZY (가제/폴더: 낚멍 nakmeong)

- v35: **표시명 피쉬코지(FISH COZY)** + 라인아트 파비콘(L)

- v23: **게임 이름 피쉬레스트(FISHREST)로 변경 (가제: 낚멍)**, FPS 표시 토글, PC 로고 제거, 이벤트 시:분:초 + 관리자 UI 개편, 공지 × 수정, 대시보드 뒤로 가기, 관리자 이동 속도(🧪 테스트·디버그 탭), 핀 📌, 툴팁·NEW, 모바일 전체 화면·홈 화면 추가, 시안 → mockups-v23/index.html, docs/v23-보고서.html
- v22: 낚싯대 등급(일반~신화), 레벨 속도, 부적 교체 고정, LU3/RD3/HP1/HM2 기본+설정 전환, 핀치 줌, 관리자 모드 전면 개편, 시안 → mockups-v22/index.html, docs/v22-보고서.html
- v21: 레벨 시스템(Lv99), 모닥불 C2, 모바일 M3, G2/T2 알림, 동물 걷기, 입력·의자 버그 수정, 시안 → mockups-v21/index.html, docs/v21-보고서.html
- v20: 의자 앉기 낚시, 모닥불 개선, draw call 최적화, 시안 → mockups-v20/index.html, docs/v20-보고서.html

## v15 (2026-11-04)

- 도감 ???, 말풍선 위치, 상단 바 정리, 우클릭 차단, 톡시도 비속어 필터와 관리자 탭, 스크롤바 A, 25데크 기본
- 시안: mockups-v15/index.html · 보고서: docs/v15-보고서.md

## v14 (2026-11-04)

- 날씨 9종과 계절 한정 물고기, 1~3위 왕관 표시, 관리자 모드, 50명 서버 시뮬레이션, 연출·효과음 기본값 E/F/D/C/A
- 시안: mockups-v14/index.html · 보고서: docs/v14-보고서.md

## v13 (2026-11-04)
- 행운 상자 획득 팝업·가방 배지, 조합 패시브 접힘 유지, 어항 확대, 자동 낚시 중 클릭 무시, 이동 속도 조절, 1~3위 메달 닉네임, 데크 배치 A/B/C, 봇 50명, 144fps, 패널 스크롤 유지, 카드 B 위치, 합산 효과 순서, 기본 사운드, 도감 정렬·가격 재설정, 상인 200%
- 시안: mockups-v13/index.html · 보고서: docs/v13-보고서.md

## 실행
- **더블클릭**: `nakmeong.html` (three.js r147 로컬 번들 + 에셋 base64 내장 → 오프라인/file:// 동작)
- **Windows**: `실행.bat` (Python 있으면 로컬 서버 + 브라우저 자동 실행, 없으면 파일 직접 열기) / macOS·Linux: `run.sh`
- 데크 수: `game-data.js`의 `DECK_COUNT_DEFAULT`(기본 10) 또는 URL `nakmeong.html?decks=20` (최대 20, 원형 자동 배치)
- 조작: WASD/조이스틱 이동 · 드래그 카메라 · 휠 줌 · Space/탭 낚시 · **F 내 어항** · E 상점/남의 어항 · B 도감 · Esc 닫기
- 저장: localStorage `nakmeong_v2` (초기화: 개발자도구에서 `localStorage.removeItem('nakmeong_v2')`)

## 파일
| 경로 | 내용 |
|---|---|
| nakmeong.html / game-v2.js / ui-v2.css | 메인 게임 |
| game-data.js | **밸런스 데이터 전부** (어종·등급·낚싯대·미끼·어항·사운드 목록) |
| assets/kenney/*.glb, assets/assets-data.js | Kenney CC0 모델 81종 (텍스처 내장 GLB + base64 번들) |
| assets-catalog.html | 에셋 카탈로그(썸네일 렌더 · 출처 · 라이선스 · 원본/파스텔 비교) |
| dex-mockups/ | 도감 시안 A/B/C |
| sounds/ | 낮 4 · 밤 4 자연음 (ogg+mp3, 45초 심리스 루프), CREDITS.md |
| img/fish/ | 물고기 일러스트 7종 + 실루엣 (AI 생성) |
| a-3d-sunset.html, b-, c- | v1 시안 (보존) |

## 희귀 등급 기준 (cm) — 크기 분포: min + 지수분포(scale×낚싯대×미끼), 큰 개체일수록 드묾
| 어종 | 범위(cm) | 일반 | 고급 | 희귀 | 전설 | 신화 | 기본가 | 근거 |
|---|---|---|---|---|---|---|---|---|
| 붕어 | 8~64 | 8~20 | 20~30.3 | 30.3~40 | 40~50 | 50~64 | 10 | FishBase Carassius auratus: 보통 10cm·최대 48cm / 낚시춘추 국내 최대 64cm(1988 송악지) / 월척=30.3cm, 4짜=40cm(영남일보) |
| 잉어 | 20~111 | 20~40 | 40~60 | 60~80 | 80~100 | 100~111 | 15 | FishBase Cyprinus carpio: 보통 31cm·최대 129cm / 낚시춘추 국내 최대 111cm(1997 의암호) |
| 향어 | 25~101 | 25~40 | 40~50 | 50~70 | 70~90 | 90~101 | 14 | 향어(이스라엘잉어) 보통 약 50cm(어식백세/램프쿡) / 국내 낚시 최대 101cm(나무위키, 낚시 기록) |
| 블루길 | 6~41 | 6~15 | 15~20 | 20~25 | 25~30 | 30~41 | 6 | FishBase Lepomis macrochirus: 보통 19.1cm·최대 41cm |
| 배스 | 15~64 | 15~30 | 30~40 | 40~50 | 50~58 | 58~64 | 18 | FishBase Micropterus salmoides: 보통 40cm·최대 97cm / 국내 최대 63.5~63.9cm(전주 아중지) / 50cm 이상 런커 |
| 가물치 | 30~100 | 30~50 | 50~70 | 70~85 | 85~95 | 95~100 | 30 | FishBase Channa argus: 최대 100cm, 최대 체중 9.5kg |
| 쏘가리 | 15~68 | 15~25 | 25~35 | 35~45 | 45~55 | 55~68 | 40 | 국립생물자원관: 보통 20cm 내외 / 경북 민물고기연구센터: 보통 20~30cm·최대 60cm 가까이 / 낚시춘추 국내 최대 67.6cm(2010 북한강) |


기본 장비 기준 등급 확률(시뮬레이션 20만 회): 일반 71~84% · 고급 10~20% · 희귀 3~10% · 전설 0.8~1.9% · 신화 0.25~0.83%

가격 = 기본가 × (크기/최소크기)^1.5 × 등급배수(일반1·고급2·희귀4·전설10·신화30). 상점 즉시판매 60%. 봇은 판매가/가치 ≤1 → 85%, ≤1.5 → 45%, ≤2.5 → 12% 확률로 구매(20~45초마다 1명 방문).

## 상점 밸런스
| 낚싯대 | 가격 | 크기배수 | 입질대기 | 희귀어종(향어·가물치·쏘가리) 가중 |
|---|---|---|---|---|
| 대나무 | 0 | ×1.00 | ×1.00 | ×1.0 |
| 카본 | 300 | ×1.15 | ×0.92 | ×1.0 |
| 은빛 릴 | 1,500 | ×1.30 | ×0.85 | ×1.3 |
| 황금 | 6,000 | ×1.50 | ×0.78 | ×1.6 |
| 용왕의 | 20,000 | ×1.75 | ×0.70 | ×2.0 |

| 미끼 | 가격 | 수량 | 입질 | 크기 | 어종 보너스 |
|---|---|---|---|---|---|
| 지렁이 | 0 | ∞ | ×1.0 | ×1.0 | - |
| 떡밥 | 100 | 20 | ×0.7 | ×1.0 | 붕어·잉어·향어 ×2 |
| 민물새우 | 150 | 20 | ×0.85 | ×1.05 | 쏘가리 ×2.5, 배스·가물치 ×2 |
| 스푼 루어 | 800 | 영구 | ×0.9 | ×1.1 | 배스·가물치 ×3, 쏘가리 ×2, 블루길 ×0.5 |
| 황금 떡밥 | 600 | 10 | ×0.5 | ×1.2 | - |

| 어항 | 가격 | 수용 |
|---|---|---|
| 기본 | 0 | 5 |
| 중형 | 400 | 12 |
| 대형 | 1,500 | 25 |
| 파노라마 수족관 | 5,000 | 50 |

## 에셋·라이선스
- 3D: Kenney (kenney.nl) Nature Kit, Survival Kit, Fantasy Town Kit, Holiday Kit, Furniture Kit, Mini Characters, Food Kit — **CC0** (assets/licenses/)
- 톤 통일: 모든 머티리얼/공용 colormap 텍스처에 동일 파스텔 변환 적용 (game-v2.js `pastelMat/pastelTex`)
- 사운드: Wikimedia Commons (CC0 / Public domain / CC BY / CC BY-SA 1건) → sounds/CREDITS.md
- 물고기 일러스트·컨셉아트: AI 생성 이미지
- 낚싯대, 데크 판자, 어항 유리, 물 셰이더, 지형은 코드로 직접 제작

## 다음 단계
- 실제 멀티플레이: Colyseus(Node) 룸(10~20명) + 위치 10~15Hz 보간, 거래/코인은 서버 권한 처리
- 드로우콜 추가 절감: 정적 소품을 Kenney 공용 colormap 기준으로 BufferGeometryUtils 머지 → 40~50 콜 목표, 이름표를 단일 캔버스 아틀라스로

---
## v3 변경점 (2026-11-03)
- 어항: 카메라 자동회전 제거(드래그만) · 물고기 조향(머리 방향 진행)/벽 회피/꼬리 흔들림/속도 변화/가끔 멈춤
- 가물치 이미지 재제작(잘림 수정) · 전 어종 이미지 여백 패딩 + object-fit:contain
- 🔒 물고기 잠금(판매·판매등록·봇구매·자동판매 불가)
- 🎁 행운 상자(낚시 성공 0.5%) · 개봉 연출 · 디버그 지급 버튼(가방/설정)
- 🧿 행운 부적(최대 3개 장착, 9개 옵션) · ⚒ 낚싯대 강화(+0~+10)
- ⚙ 자동판매(기준가 미만, 신규 도감 제외 옵션, 잠금 항상 제외)
- 💾 수동 저장 · 30초 자동 저장 · JSON 내보내기/불러오기 · 로컬 닉네임 프로필 (실제 로그인은 서버 단계)
- 물가 흰 회전 거품 제거 · 그래픽 테스트(나무/풀/꽃 토글 + FPS/draw call 표시)
- 새 파일: `game-data-v3.js`, `systems.js`(순수 로직), `sim-result.js`, `tools/sim-balance.js`, `mockups-v3/`, `fish-candidates.html`, `img/fish-candidates/`

### 행운 상자 (물고기 등급과 별개 6단계)
| 등급 | 일반 | 고급 | 희귀 | 영웅 | 전설 | 신화 |
|---|---|---|---|---|---|---|
| 확률 | 60% | 25% | 10% | 4% | 0.9% | 0.1% |
| 부적 옵션 수 | 1 | 1 | 2 | 2 | 3 | 3 |
| 옵션 상한 배수 | 25% | 40% | 55% | 70% | 85% | 100% |
| 강화석 (30%) | 1 | 2 | 3 | 5 | 8 | 12 |
| 동봉 코인 | 50 | 120 | 300 | 800 | 2000 | 5000 |
보상: 70% 같은 등급 부적 / 30% 강화석+코인. 옵션은 상한의 40~100%(신화 75~100%)에서 굴림.

### 부적 옵션 상한 (부적 1개 신화 기준 / 3개 합산 상한)
| 옵션 | 효과 | 1개 상한 | 3개 합산 |
|---|---|---|---|
| 행운 | 희귀 어종 가중치 + | 25% | 40% |
| 보물탐지 | 상자 확률 +(상대) | 60% | 100% (최대 1.0%) |
| 빠른입질 | 입질 대기 − | 20% | 35% |
| 대물사냥꾼 | 크기 분포 + | 12% | 15% |
| 어종전문가 | 배스·가물치·쏘가리 가중치 + | 20% | 30% |
| 미끼전문가 | 미끼 미소모 확률 | 30% | 50% |
| 상인 | 상점 판매가 + | 15% | 20% |
| 보물감정 | 상자 추가 보상 확률 | 25% | 40% |
| 감정의달인 | 상자 희귀+ 가중치 + | 50% | 80% |

### 낚싯대 강화
| 시도 | +0→1 | 1→2 | 2→3 | 3→4 | 4→5 | 5→6 | 6→7 | 7→8 | 8→9 | 9→10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 성공률 | 100 | 95 | 90 | 80 | 70 | 60 | 50 | 40 | 30 | 20 |
| 강화석 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 코인 | 100 | 400 | 900 | 1,600 | 2,500 | 3,600 | 4,900 | 6,400 | 8,100 | 10,000 |
| 실패 | 유지 | 유지 | 유지 | 유지 | 유지 | 50% 하락 | 50% 하락 | 50% 하락 | 50% 하락 | 50% 하락 |
단계당 크기 +1.5%, 입질 대기 −2% (+10 = 크기 +15%, 대기 −20%). 파괴 없음. 강화석 상점가 400코인.
+10 기대 비용(2만 회 시뮬): 시도 약 48회, 강화석 약 350개, 코인 약 27.6만 (+강화석을 구매하면 약 14만 추가).

### 인플레이션 시뮬레이션 (`node tools/sim-balance.js`, 각 20만 회)
| 구성 | 코인/회 | 기본 대비(시간당) |
|---|---|---|
| 기본 (대나무·지렁이) | 50 | ×1.0 |
| 카본+3·일반부적 | 89 | ×2.0 |
| 은빛+5·희귀부적 | 157 | ×4.3 |
| 황금+7·영웅부적 | 338 | ×9.1 |
| 용+10·전설부적 | 624 | ×18.0 |
| 용+10·신화부적 (최종) | 631 | ×18.4 |
| [분리] 용+0·부적 없음 | 281 | ×7.1 |
1차 시안에서는 부적+강화가 용 낚싯대 위에 ×4.3을 얹어서 대물·상인·행운·어종 상한과 강화 크기 보너스를 낮췄습니다. 지금은 최종 장비가 용 낚싯대 대비 ×2.6입니다. 전설·신화 부적은 합산 상한에 막혀 차이가 거의 없습니다. 이 구간은 소유·수집 가치 위주로 설계했습니다.

---
## v4 변경점 (2026-11-03)
- 전설·신화 알림: 내가 낚으면 중앙 컷인 띠(v3 시안2), 다른 유저(봇)는 상단 리본(시안1). 봇은 40~110초마다 전설 6% / 신화 0.6% 확률로 낚음. ⚙ 설정 › 디버그에 테스트 버튼 4개
- 낚시 시작·낚아올리기의 노이즈 "팡팡" 효과음 제거 (부드러운 사인 차임만 남김)
- 행운 상자 1개 / 10개 열기 (10개는 결과 그리드 + 합계)
- 데크 기본 20개 (`?decks=10`으로 줄일 수 있음)
- 이모지 깨짐 수정: `emoji.js`가 화면의 이모지를 로컬 SVG(`icons/emoji/`, Twemoji CC-BY 4.0)로 바꾸고, 캔버스 말풍선도 이미지로 그림. ★☆✦▶는 기본 한글 폰트에 있어 텍스트로 유지. ✕는 ×로 변경. `tools/fetch-emoji.py`로 새 이모지 SVG를 받음
- 행운 부적 6개 장착, 부적 잠금, 등급 이하 일괄 분해(확인창, 장착·잠금 제외, 코인+강화석 획득)
- 우클릭 메뉴 비활성
- 장비 시스템: 낚싯대를 개별 장비로 관리 (기본옵션 품질 92~108% + 랜덤 추가옵션). 상점 구매·상자 획득 때마다 새로 굴림. 같은 낚싯대 2개 → ★ 합성 (최대 ★5)
- 행운 상자 보상: 부적 55% / 낚싯대 10% / 미끼 묶음 15% / 강화석+코인 20%
- 어종 19종 (신규 12종). 도감은 흔한 → 희귀 순. 밤 전용(뱀장어)·밤 출현 증가(메기 ×2, 동자개·송어 ×1.5). 미끼 선호 반영

### 강화(+)와 합성(★)의 관계
| | 강화석 강화 (+0~+10) | 합성 (★0~★5) |
|---|---|---|
| 재료 | 강화석 + 코인 | 같은 낚싯대 1개 + 코인 |
| 효과 | 단계당 크기 +1.5%, 입질 −2% | ★당 기본옵션 +4%, 품질 +2%(최대 115%), 추가옵션 ×1.1, ★2·★4에서 슬롯 +1 |
| 실패 | +5 이상 실패 시 50% 확률로 하락 | 실패 없음 |
| 귀속 | 장비 1개 (합성 시 높은 쪽을 이어받음) | 장비 1개 |
두 축은 곱으로 적용됩니다. 추가옵션 풀은 행운·빠른입질·어종전문가·미끼전문가·보물탐지이고, 부적과 합산 상한을 함께 씁니다. 대물(크기) 옵션은 인플레이션 때문에 장비 추가옵션에서 뺐습니다.

### 장비 추가옵션
| 낚싯대 | 기본 슬롯 | ★4 최대 | 옵션 크기 (부적 신화 상한 대비) |
|---|---|---|---|
| 대나무 | 0 | 2 | 10% |
| 카본 | 1 | 3 | 12% |
| 은빛 | 1 | 3 | 18% |
| 황금 | 2 | 4 | 24% |
| 용왕 | 2 | 4 | 30% |
합성 비용은 150 × (낚싯대 순번+1) × (★+1) 코인입니다. 대나무는 무료라 추가 구매를 막았습니다.

### 부적 합산 상한 (부적 6개 + 장비, v3 → v4)
행운 40→40 · 보물탐지 100→120 · 빠른입질 35→35 · 대물 15→15 · 어종 30→30 · 미끼 50→60 · 상인 20→20 · 보물감정 40→50 · 감정의달인 80→100.
분해 보상(일반~신화): 코인 25/60/150/400/1000/2500, 강화석 0/1/1/2/3/5.

### 시뮬레이션 (`node tools/sim-balance.js`, 19종, 낮·밤 반반, 각 20만 회)
| 구성 | 코인/회 | 기본 대비 (시간당) |
|---|---|---|
| 기본 | 45 | ×1.0 |
| 카본+3·일반부적3 | 77 | ×1.8 |
| 은빛+5★1·희귀부적6 | 186 | ×5.8 |
| 황금+7★2·영웅부적6 | 407 | ×13.1 |
| 용+10★3·전설부적6 | 691 | ×24.2 |
| 용+10★5·신화부적6 (최종) | 745 | ×26.4 |
| [분리] 용+0, 부적·합성 없음 | 243 | ×6.8 |
| [v3 비교] 용+10·신화부적3 | 523 | ×16.7 |
최종 장비는 v3 최종(용+10·신화3) 대비 약 1.58배입니다. 부적 3개가 늘고 장비 옵션이 생긴 몫이고, 합산 상한이 위를 막습니다. 용왕 ★5를 만들려면 용왕 6개(구매가 12만)와 합성비 1.1만이 듭니다.

## v5 (2026-11-03)
- 부적 옵션 툴팁(마우스 오버 / 모바일 탭): 옵션 설명 + 해당 등급 범위·최대치 + 합산/패시브 상한
- 부적 분해·장착 시 스크롤 위치 유지 (가방 부분 재렌더 시 scrollTop 보존)
- 부적 프리셋 3개 (전환 시 현재 장착 자동 저장), 부적 합성(같은 등급 5개→다음 등급 / 신화 3개→다른 신화, 장착·잠금·프리셋 제외, 흡수 애니메이션)
- 도감 업적 20개 + 어항 조합 8개 패시브 (부적 상한과 별도, 옵션별 패시브 상한) · 도감 › 🏆 업적·패시브 탭, 어항 사이드 조합 패널, 봇이 조합용 어종 판매(🧩)
- 상자 등급별 옵션 밴드(부적 band / 낚싯대 qBand·xBand), 상점 > 밸런스 탭에 표
- 부적 이미지 세트C(img/charms, 크기 정규화), 상자 아이콘 디자인1 등급별(img/box/t0~5) + 설정에서 디자인 2~4(색조 필터) 테스트
- 낚싯대 8종(코랄·벚꽃·별빛 추가; 황금·별빛·용왕은 상자 전용) + 장착 시 3D 외형(rod-3d.js), 미끼 3종 추가(옥수수·야광 루어(밤 전용)·개구리 루어)
- 어항 6티어 외관(tank-ext.js: 디자인 3→6→1→4→2→5) 데크·어항 뷰 모두 적용
- 자연 사운드 전량 CC0/PD 재구성 (sounds/CREDITS.md)
- ⏯ 자동 → 🕒 시간 흐름 ON/OFF (낮→노을→밤 자동 순환, 한 바퀴 약 150초)
- 시안: mockups-v5/ (가방 UI 3종, 강화 연출 3시퀀스, 물 4종, 낚싯대 측면, 물고기 에셋 비교)

## v6 (2026-11-03)
- 어항 잠금 아이콘 확대, 자동판매 버그 수정(+기존 물고기 일괄 처리), 도감 1·10·12번 방향 수정, 채팅 말풍선(IME) 수정, 상자 개봉 스크롤바 제거, 전설↑ 상자 서버 알림, 부적 옵션 검색/필터, 분해 보상 표시, 합성 잠금 제외 확인, 상자 이미지 재생성, 낚싯대/미끼 2D 아이콘 전면 적용.
- 시안: mockups-v6/ (초월 등급, 낚싯대 3D, 가방 UI A+/D/E), sounds/sfx-candidates/ (자체 합성 CC0 효과음 18종).

## v7 (2026-11-03)
- 초월 등급(6번째): 독립 굴림 0.0066%(≈1/15,152), 행운 보정 최대 ×1.8, 크기 = 어종 최대 × 1.15~1.35, 가치 ×150. 기본 핑크 테두리, 설정에서 무지개 회전으로 변경. 데이터: game-data-v7.js, 시뮬: node tools/sim-balance.js
- 가방 부적 탭 E안: 슬롯 + 합산 패널(▲▼ 변화), 분리된 스크롤 리스트, 교체 비교 카드.
- 찌 착수 효과음 sounds/sfx/splash-drop.wav (자체 합성, CC0). 입질·기타 현행 유지.
- 말풍선: 5초 후 자동 사라짐(페이드), 감정표현은 원형 이모지 말풍선, 봇 채팅/감정도 머리 위 표시, 거리 따라 크기 보정.
- Enter = 채팅 포커스, 입력 중 Enter 전송(한글 IME 처리), 빈 입력 Enter/Esc = 포커스 해제.
- 전설·신화·초월을 내가 낚으면 컷인만 표시(획득 토스트 생략), 다른 유저는 리본.

## v8 (2026-11-03)
- 밤 사운드: night3에서 n_edible(식용개구리 저음 울음) 제거, 밤 생물음 레이어 350Hz 하이패스로 저음 그르렁 성분 제거.
- 가방 부적 드래그(마우스 즉시/터치 길게 누르기): 리스트→슬롯 장착·교체, 슬롯→리스트 해제, 슬롯↔슬롯 위치 교체.
- 합산 효과 옵션 hover/포커스 툴팁: 설명 + 어느 슬롯 부적/낚싯대 옵션/패시브에서 오는지 + 상한.
- 상자 개봉 컷인 클릭/터치 시 즉시 닫힘.
- 밸런스: 진행도 게이트(game-data-v8.js D.GATE) — 기본가 28↑ 어종 초반 가중치 ×0.25, 14~27 ×0.6, 진행도(낚싯대 등급·강화·누적 낚시)에 따라 원래대로.
- 물고기 이미지 프리로드(카드 이미지 지연 해결), 낚시 시작 시 컷인·카드 즉시 제거.
- 시안: mockups-v8/ (상단 메뉴 A~D, 낚시 성공 카드 A~D).

## v9 (2026-11-03)
- 이모트 말풍선: 캐릭터 머리(head 노드) 바로 위 중앙 정렬, 크기 80%로 축소, 머리와의 간격 축소
- 이모트 이모지 미표시 수정: Safari/Firefox는 width/height 없는 SVG를 canvas `drawImage`로 그리지 못함 → `icons/emoji-png/*.png`(래스터) 사용, SVG에도 크기 명시
- 영구 루어 가격 상향(`game-data-v9.js`): 스푼 800→8,000 / 야광 미노우 1,200→6,000 / 개구리 1,500→12,000 (`tools/sim-bait.js` 근거, 초반 회수 약 55~70분)
- 상단 메뉴: B(상단 상태바 + 우상단 미니 아이콘 + 하단 독) 기본, 설정 → "상단 메뉴 레이아웃"에서 A/C/D 전환
- 낚시 성공 카드: D(메달형) 기본, 설정 → "낚시 성공 카드"에서 C/B/A 전환 + 미리보기
- 사운드: 모든 소리를 WebAudio GainNode 경유(iOS Safari 볼륨 무시 문제 대응, http/https에서 동작), 첫 접속 볼륨 30%
- `tools/sim-time.js`: 플레이 시간별(10분/30분/1시간/24시간) 기대 획득량 표 → `tools/sim-time-result.json`

## v10 (2026-11-03)
- 낚시 자세: 낚싯대를 캐릭터 루트(손 위치)에 고정하고 오른팔을 앞으로 들어 그립을 잡도록 매 프레임 보정. 캐스팅(뒤로 젖혔다 던짐)·입질(떨림)·릴링(들어올림) 동작 (`ROD_POSE`, `poseRod`)
- 말풍선: Canvas 텍스처 → **HTML 오버레이**(머리 위치를 화면 좌표로 투영). 폰트/이미지 로드 타이밍·WebKit 캔버스 문제와 무관하게 내용 표시
- 자동 낚시(🤖 하단 독): 캐스팅→입질→릴링 자동, 자동판매 설정 연동. 효율 약 80% (`D.AUTO`: 대기 ×1.25, 희귀·고가 ×0.8, 상자 ×0.8). `D.AUTO.gate='sub'`로 바꾸면 구독자(`S.sub`)만 사용
- 밸런스(`game-data-v10.js`): 상자 낚싯대 지급 확률(`rodKeep`)로 황금 ≈7h·별빛 ≈33h·용왕 ≈115h(중앙값) / 상점가 은빛 2,000·산호 6,000·벚꽃 12,000 / 신화 기준 상향(최대치 점근 압축 + 추가 판정) → 신화 약 1/5 / 낚시 10회마다 보상 상자(낮은 등급 분포·강화석 비중 축소)
- 수집 목표(도감 → 🎯 탭): 세트 8종×3단계(모두 낚기→전설→신화), 어종·누적·등급 목표, 보상으로 코인·강화석·상자·어항 테마 6종
- `tools/sim-time.js`: 10분/30분/1시간/8시간/24시간/120시간 표 + 낚싯대 최초 획득 시간 + 목표 달성 시간 (`AUTO=1` 자동 낚시)
- 시안: `mockups-v10/ranking.html?v=a|b|c|d` (랭킹, 게임 미적용)

## v11 (2026-11-03)
- 도감 어종별 최대 크기 랭킹(서버/전체, 3위까지 n cm) · 어항 정렬 · 선물 상자 100회/하루 10개
- 낚싯대 개성 재설계 · 강화 +20 + 돌파 보너스 · 강화석 구매 제거
- 자동 낚시 깜빡임 수정 / 메뉴 중에도 진행 / 카드 2.5초 · 채팅 탭 · 도감 초월 · 수집목표 닫기 버그 수정
- 입질 11~23초 + 가짜 입질 · 시안: mockups-v11/ · 자세한 내용 docs/v11-보고서.md

## v12 (2026-11-04)
- 어종별 주간 랭킹(트로피 카드형, 월 0시 초기화, 지난주 기록) · 어항 배경 테마 확정 6종
- 어항 조합 보관함(조합 물고기 분리 보관·교체) · 어항 크기 수용량 비례 + 크게 보기/휠·핀치 줌
- 낚싯대 옵션 사용자 지정값(빠른입질·대어·희귀어종, 용왕 랜덤 1) · 시안: mockups-v12/ · docs/v12-보고서.md

## v16
- 날씨 카드 D, 관리자 라이트/다크, 설정 탭+미리보기, 빙어 B, 밀짚모자 캐릭터. 자세히: docs/v16-보고서.md

## v17
- v16 점검 7건 수정, 닉네임 위치, 상자 확률 계산, 물 에셋 조사, 시안 v17. 자세히: docs/v17-보고서.md, docs/v17-레벨-기획.md

## v18
- 부적 비교·교체 대상, 상자 1.8%, 강화 하락표, 물·밝기·어항 설정, 캐릭터 27종(chars-v18.js). 자세히: docs/v18-보고서.html

## v19
- 캐릭터 사라짐 버그 수정(봇 재접속 시 안 보이던 문제), 낮·밤 사운드 통일, 시작 화면 B/D, 데크 모양 W1~W4. 자세히: docs/v19-보고서.html
- v24: 레벨 테스트·만렙 속도·C1/A5/X1·이벤트 E2/E3·P4 게시판·AI 봇 설정·캐릭터 17종 · [시안](mockups-v24/) · [보고서](docs/v24-보고서.html)
- v25: 컷인 흔들림·다른 데크 낚시 수정, 날씨 카드 정렬, 전체 화면, 자동낚시 Lv1, XP A2/A4, 튜토리얼 D2/D4, 칭호 선택·특별 칭호, UI 편집 모드 1차 · [시안](mockups-v25/) · [보고서](docs/v25-보고서.html)
- v26: 러버덕(JDSherbert, 크레딧 표기), 날씨 카드 v24 크기 복원, 이름표 중복·칭호 수정, 낚싯대 은하수·심해·천룡·화룡 + 단계 올리기, UI 편집 2차 · [시안](mockups-v26/) · [보고서](docs/v26-보고서.html)
- v27: 이름표 이탈 근본 수정, 천룡·화룡 1만 개당 1개, 러버덕 크기·속도, 모바일 화질 저/중/고, 하단 메뉴(상자·도감·후원), 합성 S1, 모바일 UI 편집 패널 · [시안](mockups-v27/) · [보고서](docs/v27-보고서.html)
- v28: 러버덕 5종(JDSherbert 원본 에셋 기반 · **작가 허락 받음: 출처 표기 시 자유 사용** · 크레딧 유지), 가방 B1-A(장착 칸·효과 합계), 모바일 남 알림 2줄 정리, 낚시 카드 자동판매 표시 · [시안](mockups-v28/) · [보고서](docs/v28-보고서.html)

## 크레딧
- 러버덕 3D 모델: JDSherbert — “3D Rubber Duck Asset Pack” (https://jdsherbert.itch.io/3d-rubber-duck-pack) · 상업 이용 가능, 작가 표기 필수
