리뷰용 설계안구현 전 · 승인 대기
콘셉트는 그대로. 지금 게임의 틀 안에서, "진짜 게임"처럼 보이고 플레이되는 첫 회차(1회차) 빌드로 다듬는 작업.
형의 개선점 ①무기 다양성 · ②시작 무기 부족 · ③D20 과다는 사실 서로 다른 세 문제가 아니라 한 가지 변경으로 동시에 풀린다:
D20 주사위 → 10면 "크레이지 슬롯"(D10, 0–9)으로 줄이고, 그 10면을 전부 서로 다른 아키타입의 무기로 채운다.
+ ④ 타이틀 정리 & 설명 메뉴 분리, ⑤ 리롤 Q키, + 유사 장르에서 가져올 "1회차 완성감" 폴리시.
형 말 그대로 — 게임 내용을 바꾸는 게 아니라, 지금 룰렛-액션 로그라이크의 정체성을 유지한 채 "그럴듯하게" 완성도를 끌어올린다. 큰 규모 리팩터 없이, src/main.ts 단일 파일 안에서 만들고-고치는 기존 방식으로 충분히 효율적. 각 변경은 typecheck→build→헤드리스 검증→배포 루틴을 그대로 탄다.
전투 코드는 meleeSweep()(호 그리기)와 fireProj()(직선 투사체) 딱 두 함수로 수렴. 관통·폭발·부메랑·부채꼴은 그 위의 변주일 뿐.
main.ts:482 meleeSweep · 513 fireProj · 634 performAttack switch
시작 덱(D20)엔 낫·둔기·권총·창·쌍단검·꽝·잭팟만 있음. 활·화염·부메랑·수류탄·사슬낫·레일건 6종은 레벨업에 잠겨 1회차 초반엔 안 나옴 → "공격이 단조롭다"의 진짜 원인.
main.ts:148 DECK (20면) · 135 ALL_WEAPONS
타이틀에 덱 구성 4줄 + 메커니즘 3줄 + 무기13종 + 조작 한 줄이 전부 박혀 있음. 호스트 index.html 하단도 설명 문단 6개. "프로토타입" 인상.
main.ts:2618 renderTitle · public/index.html:96–145
레벨업 리롤이 R 키. WASD 손에서 멀고, 재시작도 R이라 의미 겹침.
main.ts:2941 rerollOffer · 2037 '리롤 (R)'
즉 "원작과 같은 종류"의 정답은 20면 주사위가 아니라 ~10면 룰렛이다. 형의 직감(20면은 무리수)이 원작과도 맞아떨어진다. 그리고 장르 리서치의 결론 — "무기의 구분감은 그림이 아니라 히트박스가 공간/시간에서 움직이는 방식에서 나온다" — 우리는 그 아키타입들을 이미 코드로 갖고 있다. 잠금만 풀고 큐레이션하면 된다.
D20 덱을 10면 슬롯(0–9)으로 바꾸고, 각 면을 겹치지 않는 아키타입의 무기 1종으로 채운다. 면마다 1개씩(중복 없음) → 카이토식 "10 중 1" 룰렛이라 매 굴림이 진짜로 다르고, 시작부터 풀 툴킷이 손에 들어온다. 기존 전투 코드를 거의 그대로 재사용하므로 리스크가 낮다.
| # | 무기 | 아키타입 (느낌) | 비고 |
|---|---|---|---|
| 0 | 잭팟 | 특수 · 초고속 난사 | 원작 히든번호 기존 |
| 1 | 권총 / 카빈 | 원거리 단일 연사 | 카이토 #4 기존 |
| 2 | 대낫 | 광역 호 스윕 | 카이토 #2 기존 |
| 3 | 둔기 / 로드 | 강타 + 충격파 노바 | 카이토 #3 기존 |
| 4 | 레일건 | 즉시 관통 라인 | 기존(레벨업→시작) |
| 5 | 수류탄 | 포물선 광역 폭발 | 기존(레벨업→시작) |
| 6 | 화염방사 | 근접 부채꼴 지속 | 기존(레벨업→시작) |
| 7 | 부메랑 | 던지고 회귀 | 기존(레벨업→시작) |
| 8 | 사슬낫 / 플레일 | 전방위 회전 | 기존(레벨업→시작) |
| 9 | 꽝 (맨손) | 무기없음 · 패링/약탈 | 코어 필러 기존 |
→ 아키타입 10갈래가 전부 다름: 단일연사 · 광역스윕 · 노바 · 관통라인 · 포물선AoE · 부채꼴 · 회귀 · 회전 · 특수난사 · 방어/약탈. 꽝과 잭팟은 코어 필러라 유지(꽝=패링·적무기 약탈 / 잭팟=원작 히든번호 오마주).
시작 룰렛에서 빠지는 창·쌍단검·활은 버리지 않고 레벨업 "면 교체" 풀로 남긴다(기존 성장 시스템 그대로). 레벨업은 이제 "기본 무기 해금"이 아니라 면 강화(Lv2) · 면 교체 · 덱 룰로 룰렛을 조각하는 역할에 집중.
레일건 — 관통, 수류탄 — 폭발. 이게 강제-랜덤 툴킷의 거의 유일하고 충분한 튜토리얼. (현재 이름만 띄움 → 태그 한 줄 추가)
손댈 곳: DECK(148) 10면 재구성 · finishRoll(809) · 정보화면 그리드 INFO_COLS 5×4→5×2(195, 2079, 2082) · 타이틀/도움말/README/design.md의 "D20·20면" 표기 전부 D10·10면으로.
구현은 기존 정보 오버레이(renderInfoScreen, INFO 패널, roundRect) 인프라를 재사용해 renderHelp() + 타이틀의 titleHelpBtn로 추가. 호스트 index.html 하단 설명 벽도 한 줄("조작은 게임 내 HOW TO PLAY")로 슬림화 — 게임답게 보이는 마무리.
손댈 곳: renderTitle(2618) 슬림화 + 버튼 추가 · 신규 renderHelp() · 버튼 rect(367 근처) · 입력 분기(2793,2833) · public/index.html 정리
레벨업 리롤을 Q로. WASD 왼손에서 바로 닿고, 재시작(R)과 의미가 안 겹침. 저위험 변경.
손댈 곳: keydown k==='r'→'q'(2941) · 버튼 라벨 '리롤 (R)'→'(Q)'(2037) · index.html 조작표(106) · 도움말 텍스트. 재시작 R(2942)은 유지.
리서치가 꼽은, "초기 빌드에 흔히 빠져 있고 효율 대비 효과가 큰" 항목들. 대부분 가시성/예측 가능성(임팩트가 아니라)에 관한 것.
서바이벌은 현재 무한(엔딩 없음)이라 "1회차를 깼다"는 감각이 안 난다. 아레나는 이미 방3 + 보스 + CLEAR 구조가 있음. 리서치 권장 = 보이는 구조(방 X/N) → 텔레그래프된 보스 1 → 진짜 승리화면.
추천: 아레나를 정식 1회차 캠페인으로 승격(이미 구조 있음 → 저위험: 방 수/보스/승리 리캡만 다듬기). 서바이벌은 "무한 스코어 모드"로 유지.
대안: 서바이벌에 피날레(시간/웨이브 목표 → 보스 → 승리) 추가.
D20→D10 10면 룰렛 + 큐레이션 로스터 + 모든 "20면/D20" 표기 정리 + 정보화면 10면 그리드 + 장착 시 아키타입 태그. (점 ①②③ + 온보딩)
타이틀 리디자인 + HOW TO PLAY 메뉴 + 리롤 Q + index.html 슬림화. (점 ④⑤)
무기-스왑 연출 + 승리 리캡 화면 + 텔레그래프/히트플래시 + 주스 캘리브레이션. (유사 장르 추가점 + 완결 구조)
각 페이즈 끝에 typecheck → esbuild build → 헤드리스(playwright) 검증 → npm run deploy → 커밋/푸시. 기존 루틴 그대로.
추천: D10 (0–9, 10면) — 형 "10종" 직감 + 실제 주사위(D10 존재) + 카이토 9면에 근접. 대안: 카이토 정통 9면 / 다른 수.
추천: 위 표의 10종(전부 기존 코드 재사용 = 빠르고 안전). 창·쌍단검·활은 레벨업 면교체로 잔존.
+ 완전 새 아키타입(오비탈 자동공전 · 호밍 · 지속 빔 · 대시 찌르기)을 1~2개 넣을까? (넣으면 신규 코드 → 약간 더 작업)
추천: 아레나 승격 vs 서바이벌 피날레 추가. (위 ◆ 참고)
HP 위급할 때만 뜨는 히든 면(원작 충실 + 극적). 넣을지 / 잭팟으로 충분한지.
Phase 1·2·3 전부 진행? 아니면 1·2만 먼저 보고 3은 플레이 후 결정?
카이토 크레이지 슬롯 (원작 충실성):
무기 아키타입 · 1회차 게임필 (유사 장르):