카페 망해요는 세로형 모바일 카페 운영 게임입니다. 플레이어는 파산 직전의 카페를 하루 단위로 운영하며 손님의 애매하거나 과장된 주문을 해석하고, 장비를 사서 메뉴 폭을 넓히고, 정해진 상환일마다 대출을 갚습니다. 실패하면 런은 끝나지만 메타 재화를 얻어 다음 런의 시작 조건을 개선합니다.
톤은 따뜻한 힐링보다 코미디와 생존 압박에 가깝습니다. 손님은 기억하기 쉬운 말투와 주문 버릇을 가진 캐릭터로 설계하고, 플레이어의 재미는 "무슨 말을 원하는 주문으로 번역해야 하지?"와 "오늘 돈이 모자라지 않을까?" 사이에서 생깁니다.
-
주문 해석이 핵심 플레이
손님은 레시피명을 그대로 말하기도 하지만, 날씨 핑계, 허세, 불평, 수수께끼, 취향 표현으로 주문을 숨깁니다. -
하루 단위 생존 압박
5명의 손님을 받고 하루를 마감합니다. 매출, 재료비, 힌트 비용, 장비 구매, 대출 상환이 한 화면 안에서 체감되어야 합니다. -
장비가 콘텐츠를 연다
장비는 단순 보너스가 아니라 재료와 레시피, 손님 풀을 함께 확장합니다. 새 장비를 사면 다음 날 받을 수 있는 주문의 성격이 달라집니다. -
손맛 있는 제조
재료 선택만으로 끝나지 않습니다. 베이스 리듬, 우유 스팀, 타이밍, 매치 퍼즐, 라떼아트가 품질과 팁에 반영됩니다. -
세로형 모바일 우선
모든 UI는 400x711 기준의 9:16 포트레이트 화면을 우선합니다. Pixi 캔버스와 React DOM 오버레이가 같은 모바일 프레임 안에서 작동합니다.
타이틀
↓
난이도 선택 또는 이어하기
↓
오프닝 / 일차 시작 / 날씨 예보 확인
↓
손님 5명 응대
↓
하루 정산
↓
상환일이면 대출 납부
↓
상점에서 장비와 운 아이템 구매
↓
다음 날 진행
파산 또는 상환 실패 시 런오버 화면으로 이동합니다. 런 중 구매한 장비와 현금성 상태는 초기화되지만, 파산 보상으로 얻은 메타 재화와 영구 퍽은 남습니다.
- 3일 날씨 예보를 보여줍니다. 오늘 날씨는 고정이고 다음 2일은 계획 정보입니다.
- 날씨, 일차, 난이도, 장비 보유 상태를 기준으로 등장 가능한 손님을 고릅니다.
- 손님이 입장하고 대사로 주문을 전달합니다.
- 플레이어는 단계별로 재료를 선택합니다.
- 필요한 경우 미니게임이 실행됩니다.
- 라떼아트가 필요한 레시피는 별도 라떼아트 단계로 이동합니다.
- 평가 결과에 따라 메뉴 가격, 팁, 재료비가 계산됩니다.
- 결과 모달과 손님 반응을 확인한 뒤 다음 손님으로 넘어갑니다.
- 5명 완료 후 하루 정산과 상점으로 이동합니다.
주문은 OrderPolicy로 처리합니다.
exact: 특정 레시피를 목표로 합니다. 피해야 할 재료와 아이스 플래그를 가질 수 있습니다.vibe: 태그 기반 주문입니다. 달콤한, 향긋한, 차가운 같은 감각을 맞춥니다.surprise: 정답보다 다양성과 개성이 중요합니다.- 맛 프로필 주문:
sweetness,sour,aroma,bold,temp축을 기준으로 적합한 레시피가 선택됩니다.
주문 라인은 customerOrders.ts에서 관리합니다. 각 라인은 날씨, 최소/최대 일차, 가중치, 난이도, 스타일 태그를 가질 수 있습니다. 난이도는 등장 가능한 주문 복잡도를 제한합니다.
장비가 늘어난 런에서는 기본 커피 4종(에스프레소, 아메리카노, 드립, 콜드브루)의 주문 가중치를 낮춥니다. 또한 같은 날 이미 나온 레시피와 최근 서빙 기록에 있는 레시피는 soft penalty를 받아 새 장비로 열린 메뉴가 더 자주 보이게 합니다.
제조는 항상 아래 순서로 진행됩니다.
base → dairy → sweetener → spice → extra → confirm
잠긴 단계는 보유 장비에 따라 비활성화됩니다. 첫날 기본 상태에서는 커피 베이스만 사용할 수 있고, 우유/감미료/향신료/추가 단계는 장비 구매로 열립니다.
현재 재료 수는 24개입니다.
- Base: 에스프레소, 아메리카노, 드립 커피, 콜드브루, 시트러스, 차, 초코 베이스
- Dairy: 우유, 스팀 우유, 폼, 오트밀크
- Sweetener: 설탕, 꿀, 바닐라, 카라멜
- Spice: 시나몬, 코코아, 넛멕
- Extra: 얼음, 휘핑크림, 레몬 트위스트
재료는 태그, 비용, 색, 밀도, 액체 여부, 컵 부피, 맛 기여도를 가집니다. 재료비는 재료별로 $1~$3이며 같은 재료를 여러 번 넣으면 비용도 누적됩니다.
재료 종류에 따라 제조 미니게임이 붙습니다.
- 베이스: 리듬 노트 타이밍
- 우유/폼: sweet spot 안에서 누르고 떼는 스팀 게이지
- 감미료/향신료/일부 추가 재료: 타이밍 커서
- 얼음/가니시류: 매치 퍼즐
- 라떼아트: 템플릿 기반 자유 드로잉 평가
각 미니게임은 perfect, good, off 등급을 남깁니다. 평균 품질은 최종 팁 배율에 반영됩니다. 미니게임이 없는 단순 음료는 중립 품질로 처리되어 불이익을 받지 않습니다.
라떼아트는 필요한 레시피에만 점수 보너스가 붙습니다. 낮은 라떼아트 점수는 보너스가 없을 뿐, 레시피 가격 자체를 깎지는 않습니다.
현재 레시피는 43개입니다. 기본 커피, 라떼 계열, 에이드, 차, 프라페, 퓨전, 이상한 주문용 레시피가 포함됩니다.
평가는 먼저 실제 제조 결과와 가장 가까운 레시피를 찾고, 주문 정책에 따라 점수를 냅니다.
- 정확 주문은 재료 멀티셋 유사도 70%와 맛 프로필 유사도 30%를 섞습니다.
steamedmilk와milk는 평가에서 같은 우유 계열로 정규화됩니다.- 아이스 주문은
iced플래그로 처리합니다. 얼음은 필수이며, 아이스 라떼류에서는 폼 누락이 완화됩니다. - 원래 차가운 레시피인 에이드/프라페/아포가토 등은 얼음을 정식 재료로 평가합니다.
- 따뜻한 주문에 얼음을 넣으면 큰 감점이 들어갑니다.
- 피해야 할 재료가 들어가면 추가 감점됩니다.
평가 버킷:
| 버킷 | 점수 | 처리 |
|---|---|---|
| perfect | 92+ | 정가 + 높은 팁 |
| great | 78+ | 정가 + 팁 |
| good | 62+ | 정가 + 소량 팁 |
| not_bad | 42+ | 반값 결제, 팁 없음 |
| bad | 0~41 | 결제 없음, 재료비 손실 |
메뉴 가격은 5 + 5 * 레시피 단계 수 + 라떼아트 보너스 3입니다. 최종 순이익은 결제 가격 + 고객 팁 + 라떼아트 보너스 - 재료비입니다.
현재 손님은 50개 아키타입으로 구성됩니다.
- Tier 1: 초반 일반 손님 12종
- Tier 2: 개성 강한 인간형 손님 10종
- Tier 3: 중반 확장 손님 7종
- Tier 4: 판타지/SF/이웃 단골 9종
- Tier 5: 희귀 단골과 패러디 손님 12종
각 손님은 말투, 관대함, 까다로움, 등장 날씨 가중치, 대사 풀, 주문 후보를 가집니다. 손님의 목적은 긴 서사가 아니라 즉시 알아볼 수 있는 주문 습관과 반응입니다.
런 시작 시 runSeed를 무작위로 저장하고, runSeed + day + slot 조합으로 하루 손님 덱과 주문 선택을 결정합니다. 같은 저장 상태에서 같은 일차에 진입하면 손님/주문은 재현 가능하지만, 새 런은 다른 시드로 시작합니다.
날씨는 맑음, 비, 추위 세 가지입니다. 3일 예보는 Markov 전이로 생성되며 같은 날씨가 2~3일 이어질 가능성이 있습니다.
날씨는 다음 요소에 영향을 줍니다.
- 손님 등장 가중치
- 주문 라인 선택
- 특정 주문의 날씨 게이트
- 플레이어의 장비 구매 계획
예보는 안정성을 위해 현재 구현에서는 미래 슬롯을 임의로 흔들지 않고, 하루가 끝날 때 [내일, 모레, 새 예보]로 밀립니다.
시작 장비는 없습니다. 시작 레시피와 시작 재료는 기본 커피 4종입니다.
시작 레시피:
- 에스프레소
- 아메리카노
- 드립 커피
- 콜드브루
구매 가능한 장비는 12개입니다.
| 장비 | 기본 가격 | 핵심 역할 |
|---|---|---|
| 우유 선반 | 10 | 우유, 오트밀크, 휘핑크림 |
| 제빙기 | 10 | 아이스 주문 |
| 감미료 통 | 20 | 설탕, 꿀 |
| 향신료 선반 | 25 | 시나몬, 코코아, 넛멕 |
| 모카 세트 | 50 | 카페 모카 |
| 시럽 펌프 | 60 | 바닐라, 카라멜 계열 |
| 스팀 완드 | 80 | 스팀 우유, 폼, 라떼/카푸치노/라떼아트 |
| 차 세트 | 90 | 얼그레이, 녹차, 차이, 초코 베이스 |
| 시트러스 프레스 | 120 | 에이드와 레몬 트위스트 |
| 블렌더 | 150 | 프라페 |
| 프리미엄 스티머 | 200 | 라떼아트 A등급 가능 |
| 원두 로스터 | 280 | 커피 음료 팁 보정 |
실제 구매 가격은 보유 장비 수에 따라 기본 가격 * (1 + 보유 장비 수)로 증가합니다. 저가 장비부터 사면 초반 선택지가 빨리 열리지만, 뒤로 갈수록 모든 장비가 비싸집니다.
레시피 해금은 레시피 재료가 요구하는 장비와 별도 추가 요구 장비를 합산해 결정합니다. 아이스 변형 주문은 레시피 자체가 따뜻한 메뉴여도 제빙기를 요구합니다.
난이도는 쉬움, 보통, 어려움입니다.
난이도는 다음을 바꿉니다.
- 초기 총 대출 규모
- 첫 상환일 범위
- 다음 상환 간격
- 상환 압력
- 등장 가능한 주문 난이도
- 맛 프로필 주문 등장 확률
기본 시작 현금은 $10입니다. 영구 퍽으로 시작 현금과 첫 상환 유예를 늘릴 수 있습니다.
대출 총액은 현재 레시피 수익 곡선과 장비 가격에서 계산됩니다. 고정 숫자를 문서에 박아두기보다 balance.ts와 economy.ts가 현재 콘텐츠를 바탕으로 산출합니다.
힌트 비용은 사용 횟수에 따라 2 + 사용 횟수 * 3으로 증가합니다. 손님별로 구매 가능한 힌트 수는 주문 모드에 따라 제한됩니다.
런오버는 단순 실패가 아니라 다음 런을 위한 메타 진행 지점입니다.
새 런에서 초기화되는 것:
- 일차
- 현금
- 남은 대출과 상환 진행
- 보유 장비
- 운 아이템
- 현재 럭 수치
- 날씨 예보
- 서빙 기록
유지되는 것:
- 메타 재화
- 영구 퍽
- 설정
- 누적 발견/도감 성격의 장기 기록
파산 보상은 도달 일차, 갚은 대출, 산 장비 수, perfect 서빙 수, 발견 레시피 수로 계산됩니다.
영구 퍽은 8종입니다.
- 저금통: 새 런 시작 현금 증가
- 상환 유예 도장: 첫 상환일 지연
- 힌트 단골권: 첫 힌트 비용 완화
- 실패 보험: 하루 첫 실패 부담 완화
- 납품처 인맥: 재료비 완화
- 중고 장비 눈썰미: 첫 장비 구매 할인
- 스팀 손목: 우유 미니게임 보조
- 퍼즐 감각: 퍼즐 목표 완화
상점에는 장비 외에 럭을 올리는 아이템이 있습니다.
| 아이템 | 가격 | 효과 |
|---|---|---|
| 네잎클로버 | 40 | 운 +1 |
| 토끼 발 | 90 | 운 +2 |
| 행운의 동전 | 160 | 운 +3 |
| 별 부적 | 320 | 운 +5 |
럭은 고객 팁의 무작위 폭을 유리하게 만듭니다. 런이 끝나면 럭 아이템과 현재 럭 수치는 초기화됩니다.
플랫폼 분기는 __PLATFORM__으로 처리합니다.
toss: Toss 플랫폼 어댑터와 Toss Ads 사용- 기본 웹: 플랫폼 기능 no-op, 광고는 더미 보상형 모달
- Capacitor 네이티브: AdMob 어댑터 사용
광고 표면:
- 하단 배너 영역 96px
- 일정 일차마다 전면 광고
- 보상형 광고
tip_boost - 보상형 광고
run_revive
광고 어댑터는 게임 코드가 SDK 차이를 직접 알지 않도록 AdAdapter 인터페이스로 감쌉니다.
저장은 localStorage의 cafe-now-open:save 키를 사용합니다.
저장 데이터에는 난이도, 일차, 현금, 대출 상태, 메타 재화, 영구 퍽, 장비, 운 아이템, 예보, 도감/발견 기록, 설정이 포함됩니다.
저장 데이터는 현재 런의 runSeed도 포함합니다. 이 값은 날씨, 손님 덱, 주문 선택, 일부 일정성 난수의 기준이 되며 새 런이 시작될 때 새로 생성됩니다.
resetSave는 난이도별 새 캠페인을 만들고, newRun은 파산 후 장기 진행 일부를 유지한 채 런 상태를 초기화합니다.
- React는 화면과 HUD, 모달, 트레이, 상점 UI를 담당합니다.
- PixiJS는 게임 배경, 손님, 컵, 액체, 애니메이션을 담당합니다.
CoffeeGame은 상태 머신과 저장 데이터 갱신을 관리합니다.- 유체 표현은
LiquidCup,MetaballPour,LatteArt,FluidPhysics에 분리되어 있습니다. - CSS는 모바일 고정 프레임과 안전 영역, 광고 슬롯, 미니게임 레이아웃을 함께 관리합니다.
- 빌드 타깃은 웹, Capacitor Android, Toss Apps in Toss입니다.
- 광고 ID 일부는 코드 주석상 대시보드 확정 후 교체가 필요한 상태입니다.
RTK.md는AGENTS.md에서 참조되지만 현재 저장소 루트에는 없습니다.- README와 GDD는 코드 기준으로 갱신했으며, 이후 레시피/장비/경제 상수를 바꾸면 두 문서의 숫자도 함께 갱신해야 합니다.