# 분쇄기·전동톱·망치 6판 설계 작성: 2026-10-30. 상태: **사용자 설계 승인**. 사용자가 설계대로 구현 계획 작성 후 개발을 승인했다. 현재 구현·검증 결과는 [구현 계획의 실행 기록](../plans/2026-10-30-destruction-six.md)을 따른다. 운영 배포는 이번 범위에 포함하지 않는다. ## 목적과 확정 요구 - 기존 게임에 젤리 분쇄기·전동톱·거대 망치를 각각 2판씩, 총 6판 추가한다. - 생각해서 공략하는 퍼즐보다 손가락으로 누르고 움직이는 즉각적인 파괴의 만족을 우선한다. 가이드 일치, 균등 분할, 보호물 회피, 붕괴 방향 계산을 추가하지 않는다. - 전동톱의 접촉·절단·단면·조각 분리와 망치의 눌림·충격 전달·파손이 설득력 있게 이어지는 것이 핵심 요구다. 도구 모양과 장식 입자만 바꾸는 구현으로 완료 판정하지 않는다. - 전동톱·망치는 제거 대상 젤리를 완전히 없애야 클리어하고 완료 시간으로 1~3별을 평가한다. 제한 시간 내 미완료는 FAIL이다. - 사용자 선택: **Superpowers 전체 시각 검수**. 모바일 390×844·데스크톱 1280×800, 동작 확인·반복 수정·독립 리뷰를 수행한다. - 젤리 샌드백·철거와 앞서 논의한 벗기기·짜서 채우기는 이번 6판 범위가 아니다. ## 접근 방식과 작성자 결정 사용자는 세 도구와 각 2판 제작, 완전 제거·시간별 별, 전체 시각 검수를 선택했다. 아래 배치·수치·분쇄기 채점·구현 구성은 이번 초안의 작성자 제안이며 사용자 선택과 구분한다. 1. **권장: 프로젝트 안의 실제 플레이 가능한 6판.** 기존 200판 뒤 201~206에 추가하고 진행·History·별 저장·Retry·Home·다음 판에 연결한다. 모드 전용 제거 상태와 렌더링을 두어 기존 단순 다각형 절단 불변식을 유지한다. 대표 톱·망치 동작부터 확인한 뒤 각 2판으로 확장한다. 2. 독립 실험 페이지: 연출 실험은 빠르지만 별·진행과 실제 스테이지 연결을 따로 해야 한다. 사용자가 요청한 게임 내 6판을 직접 충족하지 못하므로 채택하지 않는다. 3. 기존 압착·칼 연출에 파편만 추가: 재사용 범위는 크지만 영구 손상·실제 분리·완전 제거 요구를 충족하지 못하므로 채택하지 않는다. 권장 접근으로 설계하며, 본 문서 승인 후 구현 계획을 작성한다. 현재 main의 작업 트리는 깨끗했고 기준 커밋은 `fe48244`다. 앱의 관리형 작업 공간 `/Users/radiogaga/.codex/worktrees/jelly-destruction-six/JellyKnife`를 생성했다. 구현 전 기존 의존성을 활용해 기준 검사를 수행한다. main 푸시·운영 배포는 범위에 포함하지 않는다. ## 6판 구성 | 표시 번호 | 모드 | 젤리와 변주 | 첫 동작으로 이해할 목표 | | --- | --- | --- | --- | | 201 | 분쇄기 | 단색의 두꺼운 둥근 직사각형 | 누른 채 젤리를 롤러에 밀어 넣어 전량 분쇄 | | 202 | 분쇄기 | 폭이 달라지는 2색 층 젤리 | 같은 조작으로 다른 두께·단면의 분쇄를 경험 | | 203 | 전동톱 | 넓은 단색 젤리 블록 | 누른 채 톱을 움직여 남은 젤리를 전부 잘라 제거 | | 204 | 전동톱 | 두께와 안쪽 색층이 다른 둥근 젤리 | 새 규칙 없이 접촉·단면·분리 차이를 경험 | | 205 | 망치 | 커다란 둥근 돔 젤리 | 누른 위치를 때리고 계속 누르면 자동 연타, 이동해서 전부 제거 | | 206 | 망치 | 더 두껍고 색층이 있는 젤리 블록 | 같은 조작으로 반복 타격의 손상 누적을 경험 | 제거 대상의 최종 치수·색·그리드 해상도·두께·재질 파라미터는 구현자가 정한다. 2판은 1판보다 시간이 약간 더 필요해도 되지만 별도의 조작 규칙이나 생각해야 할 함정을 추가하지 않는다. 제품 문구는 영어다. 기존 200판의 번호·ID·규칙·기록은 보존하고 신규 고유 ID를 발급한다. 순서 변경은 `stage-order.json`에서만 한다. ## 조작과 형상의 계약 ### 공통 - 마우스와 실제 터치의 첫 포인터만 받아 누르기·끌기·손 떼기를 일관되게 처리한다. UI 위 입력과 추가 포인터는 파괴로 전달하지 않는다. - 카메라는 고정된 사선 시점이며 플레이어의 회전·줌 조작을 요구하지 않는다. 모든 잔여 제거 대상에 화면 안에서 도구가 닿아야 한다. 입력 평면과 시각 변형의 차이로 도구가 뜨거나 엉뚱한 자리를 공격하면 결함이다. - 화면에 보이는 남은 본체와 공격 대상으로 남긴 큰 조각은 제거 상태에서 살아 있다. 도구 접촉으로 실제 분리되어 배출되는 양은 제거로 기록한다. 배출 뒤 날아가 사라지는 장식 파편은 추가 공격 대상이 아니다. 사용자에게 공중의 작은 입자를 추격하게 하지 않는다. - 어느 부분을 먼저 공격해도 진행할 수 있다. 빈 자리 공격은 제거량을 늘리지 않는다. 마지막 일부가 남았다고 전체를 자동 폭발시키거나 제거하지 않는다. - 제거 상태의 최소 단위는 정해진 공간 해상도에 따른다. 그 단위에서 남은 대상이 0일 때만 완료한다. 접근 불가능한 내부·가려진 뒤편·화면 밖에 필수 제거 대상을 남기지 않는다. 미세 자투리의 크기와 도구 접촉 범위를 맞춰 쉽게 마무리할 수 있게 한다. - 제거량·남은 형상·도구 충돌은 같은 원본 상태를 소비한다. 입자 개수·프레임 수·포인터 이벤트 수를 별 점수로 쓰지 않는다. 원본 제거량은 중복 가산하지 않는다. - 손 뗌·pointercancel·캡처 손실·숨김·Home·Retry·레벨 교체·컨텍스트 손실 시 도구의 연속 동작·소리·진동을 정리한다. 게임 시간은 `GameClock`으로 관리한다. ### 분쇄기 - 손가락으로 젤리를 잡고 입구 쪽으로 밀면 롤러가 물어 끌어당긴다. 손을 떼면 플레이어의 밀어 넣기가 멈춘다. - 접촉 직전까지 멀쩡한 젤리가 롤러 사이에서 눌리고 좁아지며 안으로 들어간다. 들어간 부분만 실제로 줄어들고 배출구에서 조각이 나온다. 본체를 통째로 축소하는 것만으로 대체하지 않는다. - 투입 압력을 보여주고 과도한 투입은 일시적으로 처리 속도를 낮추거나 막히게 할 수 있다. 정확한 압력 반응·복구값은 구현자가 정하되, 원인을 화면에서 예측할 수 있어야 한다. 랜덤 막힘과 별도 보호물 퍼즐은 없다. 분쇄기 첫 판에서 조절이 번거롭다면 압력 난도를 낮춰 기본 조작을 유지한다. - 분쇄기도 전량 처리 후 완료 시간으로 별을 평가하는 것을 제안한다. 막힘은 처리 지연이라는 결과만 만들고 별도 감점을 중복 적용하지 않는다. ### 전동톱 - 누른 채 움직이는 도구와 젤리 접촉에서 절단이 시작된다. 공중이나 빈 자리에서는 절단·파괴 효과가 발생하지 않는다. - 접촉 부위의 작은 눌림·떨림, 톱날 진행을 따라 누적되는 절단 자국, 드러난 내부 단면, 남은 연결부의 분리와 떨어진 조각의 출렁임을 이어서 표현한다. - 도구 이동과 관계없는 정해진 위치에서 파편을 내거나, 파편만 내고 본체를 유지하거나, 표면 무늬를 지우는 것으로 절단을 대체하지 않는다. 눈에 띄는 분리 조각은 접촉 위치와 제거 형상에 맞아야 한다. - 최초 구현에서 사방으로 관통하는 동굴·임의로 늘어지는 가는 줄기까지 재현하는 것은 필수 범위가 아니다. 다만 이 제한을 핑계로 누적되는 손상·절단면·실제 분리·완전 제거를 생략할 수 없다. ### 망치 - 누른 위치를 타격한다. 길게 누르면 정해진 게임 시간 간격으로 자동 연타하며, 누른 채 이동하면 다음 타격 지점이 따라간다. 빠른 탭 연타로 자동 연타 속도 상한을 우회하지 못한다. - 접촉 부위 눌림 → 주변 부풀음·몸체 출렁임 → 파손·조각 분리 → 남은 몸체의 복원 순서를 표현한다. 한 번의 타격에 단단한 돌처럼 깨지는 장면만 보이는 것을 피한다. - 같은 자리를 다시 공격하면 이전 손상이 유지된다. 시각 변형이 원상복구돼도 이미 제거한 부피는 돌아오지 않는다. ## 채점과 시간 - 준비·홈·결과 카드 시간은 평가에 포함하지 않는다. 준비 완료 후 플레이에서 첫 유효한 도구 접촉부터 게임 시간이 흐른다. 접촉이 시작된 뒤 손을 떼고 쉬는 시간은 포함하며 앱 숨김은 기존 생명주기 정책대로 멈춘다. - 제거율을 HUD에 계속 표시한다. 제거 대상 0이면 완료 시간으로 별을 정하고 결과에 제거율·완료 시간·별을 표시한다. 미완료 제한 시간 만료는 제거율과 관계없이 FAIL이다. - 초안의 1판 기준: 20초 이하 3별, 30초 이하 2별, 45초 이하 1별, 45초 시점에도 미완료면 FAIL. 각 모드 2판 기준: 25/40/60초. 완료 판정과 제한 시간 경계가 같은 시각이면 완료를 우선한다. - 위 시간은 **검증 전 작성자 초기값**이다. 실제 손 입력과 자동화의 대표 경로를 확인해 조정하고 최종 값을 계획의 실행 기록에 남긴다. 별 구간이 실제로 도달 가능해야 하며, 일반적인 누르기·끌기로 1별 완료가 가능하고 익숙해지면 3별을 노릴 수 있게 한다. 3별을 위해 공략이나 과도한 손가락 속도를 요구하지 않는다. - 손가락·화면 해상도·프레임률에 따른 유효 접촉량 차이를 검사한다. 동등한 시간·경로의 제거량이 프레임 수에 비례해서 달라지면 안 된다. - Retry는 원본 젤리·도구·시계·파편·사운드를 모두 초기화한다. 최고 별 저장, 별 잔액, 이어하기, 206판 전체완료와 History 재진입은 기존 서비스에 연결한다. ## 아키텍처와 성능 경계 - 독립 모드와 순수 세션을 `GameMode`·`ModeRegistry`·`ModeHost`에 연결한다. 공통 초기 조립 외에 `Game`에 모드별 프레임 분기·규칙을 넣지 않는다. 공통 제거·타이머·채점 로직은 구체적 재사용 이점이 있는 범위에서만 공유한다. - 기존 `PieceData.polygon`과 조각의 단순 다각형 불변식은 유지한다. 필요한 구멍·깊이·손상은 새 모드의 전용 형상 상태로 다룬다. 폴리곤 절단과 다른 렌더 경로를 기존 `PieceSplitter`에 억지로 통합하지 않는다. - 새로운 제거 형상 표현과 표면 생성 기법은 구현 계획에서 확정한다. 핵심은 입체 흔적과 제거 상태의 일치다. 높이 지도만으로 톱의 실제 절단·분리가 성립하지 않으면 그 방식을 고집하지 않는다. - 몸체 접촉 반응은 매 프레임 반영하고, 무거운 메시 갱신은 국소화·프레임 분할·버퍼 재사용을 적용한다. 이벤트 처리에서 많은 새 메시를 동기 생성하지 않는다. 파편은 개수와 수명을 제한하며 개별 파편 모두에 기존 고비용 젤리 재질을 붙이지 않는다. - 기존 WebGL2·품질 등급과 움직임 줄이기·Sound·진동 설정을 유지한다. 새 외부 음원은 추가하지 않고 승인된 WAV를 사용한다. 전용 톱·망치 음색을 확보한 것으로 보고하지 않는다. - 비활성 모드의 대형 렌더 자원이 상시 업데이트되거나 등급 교체·컨텍스트 복구·레벨 전환 후 누수되지 않아야 한다. 기존 디버그 API는 유지하고 필요한 새 모드 상태를 명시적으로 추가한다. ## 검증·시각 검수·다음 확인 지점 1. 순수 테스트: 접촉·중복 제거 방지·시간·완전 제거·모든 별과 FAIL·경계값·입력 취소·재시작. 프레임률·경로 표본 수 차이를 검사한다. 2. **대표 장면 선행 확인:** 203판의 느린 절단과 한 번의 덩어리 분리, 205판의 한 번 타격과 같은 자리 재타격을 실제 런타임에서 캡처·동작 확인한다. 정지 이미지만으로 통과 판정하지 않는다. 부족하면 이 단계에서 연출과 형상 방식을 수정한 뒤 6판으로 확장한다. 3. 6판 실제 마우스·터치로 완료, 타이밍별 1/2/3별·FAIL, Retry·Home·즉시 다음 판·숨김·pointercancel·컨텍스트 복구·품질 변경·저장 복원·마지막 판 완료를 검사한다. 정답을 직접 주입하는 디버그 완료만으로 실제 입력 검증을 대체하지 않는다. 4. 시각 범위: 6판 × 시작·접촉·변형/분리·완료 × 2해상도 = 기본 48장. 대표 톱·망치는 연속 캡처 또는 동영상으로 손상 누적·공간 연속성·반복 타격을 추가 확인한다. FAIL·Retry·전환·대표 low/high 등급은 영향 범위에서 추가하며 크게 늘면 사전 안내한다. 산출물은 `.playwright-mcp/destruction-six/`에 둔다. 5. 검수 주체: 구현 세션이 실제 화면과 동작을 확인하고 수정·재검토한다. 독립 리뷰어가 설계 준수·코드·대표 원본 이미지와 연속 동작 근거를 확인한다. 외부 참조 영상은 없는 상태이며 본 문서의 접촉·변형·분리 계약을 기준으로 삼는다. 사용자의 최종 손맛 평가는 에이전트의 검수와 구분해 남긴다. 6. 빌드·단위·신규 E2E와 변경 영향 회귀, 대표 파괴 중 프레임 비용·자원 누수 확인. 기존 품질 임계값을 낮춰 통과시키지 않는다. 브라우저 결과를 모바일 실기기 성능·촉감 검증으로 보고하지 않는다. Android 실기기를 사용할 때는 ADB 승인 상태를 먼저 확인하며 에뮬레이터는 쓰지 않는다. 7. 게임 구현 후 관련 DocsSite 목록·모드 설명·검증 상태도 갱신한다. 문서 작업은 현재 작업 공간과 브랜치를 유지하며 기존 기록을 삭제하지 않는다. 8. 최종 독립 리뷰는 **`gpt-6.1-sol` / `medium`**을 명시한다. 성공·미완료·한계와 명령·산출물을 구현 계획의 실행 기록에 남긴다. 다음 확인 지점은 독립 설계 검토와 사용자 설계 승인이다. 승인 후 구현 계획을 작성하고, 대표 톱·망치 장면 → 6판 연결 → 회귀·전체 시각 검수·최종 독립 리뷰 순서로 진행한다. ## 독립 설계 검토 `gpt-6.1-sol` / `medium`의 새 컨텍스트 검토 결과, 구현 계획을 막는 중요한 미결정은 없었다. 201~206 배치와 분쇄기의 시간 채점은 작성자 제안이며 사용자 설계 승인에서 함께 확인한다. 이 검토는 실제 연출·성능·손맛 검증을 대신하지 않는다. ## 구현 전 기준 검사 기준 커밋 `fe48244`에서 `npm run build` 통과, `npm test` 185파일·3,055개 통과(60.50초). 빌드의 기존 번들 크기 경고는 남아 있다. 이 결과는 신규 6판 구현·연출·성능 검증이 아니다. 게임 소스는 아직 변경하지 않았다.