446d8d177c
화면 아래 가장자리에 가로로 깔리는 Godot 4.7 위젯. 거품을 모아 바다를 꾸미고, 꾸밀수록 거품이 더 빨리 모인다. - 도킹 창: 투명·테두리 없음, 화면 폭 전체, 위/아래 가장자리 스냅, 높이 프리셋, 클릭 통과(모서리로 복귀), DPI 배율 보정 - 3/4 부감 격자: 구역당 9x6, 전체 45x6 = 270칸. 바닥은 위에서, 물체는 서 있는 모습으로 그리고 Y 정렬로 앞뒤를 가린다 - 구역 5개(얕은 바다 -> 열수구): 앞 구역을 꾸며야 다음이 열린다 - 칸이 곧 한계인 경제: 배치/이동/치우기(절반 환불), 여러 칸짜리 장식 - 저장: 30초 자동 저장, 백업 한 세대, 8시간 상한 오프라인 보상, 격자 이전 형식 저장본 자동 이전 - 스모크 테스트 60여 개 (test.ps1) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
101 lines
5.3 KiB
Markdown
101 lines
5.3 KiB
Markdown
# Blub Blub
|
||
|
||
화면 아래 가장자리에 가로로 깔리는 바닷속 방치형 스트립.
|
||
다른 일을 하는 동안 화면 밑에서 조용히 돌아간다. 거품을 모아 바다를 꾸미고, 꾸밀수록 거품이 더 빨리 모인다.
|
||
|
||
창은 화면 폭 전체를 차지하고 높이만 160~300px이다. 작업표시줄은 덮지 않는다.
|
||
|
||
## 실행
|
||
|
||
- 에디터: `%LOCALAPPDATA%\Programs\Godot\Godot_v4.7.2-stable_win64.exe` 를 실행해 이 폴더를 열거나, 이미 임포트되어 있으면 프로젝트 목록에서 **Blub Blub** 선택
|
||
- 게임만: `.\run.ps1`
|
||
- 테스트: `.\test.ps1`
|
||
|
||
## 조작
|
||
|
||
| 동작 | 방법 |
|
||
| --- | --- |
|
||
| 거품 모으기 | 빈 곳 좌클릭 |
|
||
| 놓기 | 상점에서 고른 뒤 칸을 클릭 (우클릭·Esc로 취소) |
|
||
| 옮기기 | 놓인 것을 끌어다 다른 칸에 놓기 (공짜) |
|
||
| 치우기 | 끌어서 아래 휴지통에 떨구기 (절반 환불) |
|
||
| 상점 열기 | 왼쪽 위 **상점** (패널은 오른쪽에 열린다) |
|
||
| 메뉴 | **···** 버튼 또는 물 위 우클릭 |
|
||
|
||
메뉴: 항상 위에 표시 · 클릭 통과 · 높이(낮게/보통/높게) · 위아래 도킹 · 화면 선택(모니터가 여러 대일 때) · 지금 저장 · 처음부터 다시 · 종료
|
||
**클릭 통과**를 켜면 클릭이 바탕화면으로 지나가고, 안쪽 모서리(84×56px)만 계속 눌린다.
|
||
이 모서리를 눌러 메뉴로 돌아와 통과를 끌 수 있다. (아래 도킹이면 오른쪽 위, 위 도킹이면 오른쪽 아래)
|
||
|
||
## 구조
|
||
|
||
```
|
||
project.godot 창 설정(투명·테두리 없음·항상 위·1:1 픽셀)과 오토로드 등록
|
||
autoload/
|
||
catalog.gd 밸런스 데이터 전부. 아이템 추가는 여기서만.
|
||
game_state.gd 보유 자원·구매 상태와 파생 수치(bps, 아름다움, 등급)
|
||
save_manager.gd 저장/불러오기, 30초 자동 저장, 오프라인 보상, 창 위치
|
||
scenes/
|
||
main.tscn/.gd 도킹(폭 전체·가장자리 스냅)·클릭 통과·메뉴와 화면 조립
|
||
aquarium/ 물빛 셰이더, 모래 바닥, 물속 오브젝트
|
||
ui/ 왼쪽 위 정보 바, 오른쪽 상점 패널
|
||
scripts/
|
||
number_format.gd 1234 -> "1.23K", 경과 시간 표기
|
||
ui_style.gd UI 색과 스타일박스
|
||
tests/smoke.tscn/.gd 경제 로직 스모크 테스트
|
||
```
|
||
|
||
## 게임 루프
|
||
|
||
1. 물 아무 곳이나 클릭해 **거품**을 모은다.
|
||
2. 거품으로 **생물**(해초, 물고기…)을 사면 초당 생산량과 **아름다움**이 오른다.
|
||
3. **장식**(난파선, 석상…)은 한 번만 살 수 있고, 아름다움이 크며 전체 생산에 곱연산 보너스를 준다.
|
||
4. 아름다움은 다시 전체 생산량에 `1 + sqrt(아름다움) × 0.02` 배율로 되돌아온다.
|
||
→ **꾸미는 것이 곧 성장이다.**
|
||
5. 앞 구역을 충분히 꾸미고 거품을 모으면 오른쪽 다음 구역이 열린다.
|
||
얕은 바다 → 산호초 → 켈프 숲 → 심해 → 열수구
|
||
|
||
## 격자와 배치
|
||
|
||
바다는 **3/4 부감 격자**다. 구역당 9열 × 6행, 전체 45열 × 6행 = 270칸.
|
||
바닥은 위에서 내려다보지만 그 위에 놓인 것은 **서 있는 모습**으로 그린다.
|
||
러스티의 농장과 같은 방식이고, 완전한 탑다운과는 다르다.
|
||
산 것은 모두 플레이어가 고른 칸에 놓이고, **칸이 곧 한계다.** 거품이 아무리 많아도
|
||
자리가 없으면 더 놓을 수 없다. 그래서 성장은 세 갈래로 갈린다.
|
||
|
||
1. 다음 구역을 열어 자리를 늘린다
|
||
2. 싼 것을 치우고 비싼 것으로 갈아 끼운다 (치우면 절반을 돌려받는다)
|
||
3. 칸을 차지하지 않는 업그레이드를 산다
|
||
|
||
장식은 여러 칸을 차지한다. 난파선·잠수정·고래 뼈는 3×2, 석주·석상·굴뚝·수정은 2×2,
|
||
항아리와 닻은 2×1. 자리를 많이 먹는 만큼 아름다움이 크다.
|
||
|
||
**배치 방법**: 상점에서 고르면 상점이 잠시 닫히고 배치 모드가 된다.
|
||
놓을 칸을 클릭하면 그때 값이 지불된다. 우클릭이나 Esc로 취소.
|
||
이미 놓인 것은 끌어서 옮길 수 있고(공짜), 끄는 동안 아래에 나타나는
|
||
휴지통에 떨구면 치우고 절반을 돌려받는다.
|
||
|
||
## 구역
|
||
|
||
가로가 다섯 구역으로 나뉘어 있고, **왼쪽에서 오른쪽으로 갈수록 깊어진다.**
|
||
처음에는 맨 왼쪽 얕은 바다만 열려 있고 나머지는 어둡게 덮여 있다.
|
||
잠긴 구역을 클릭하면 해금 조건과 남은 양이 그 자리에 뜬다.
|
||
|
||
다음 구역을 열려면 두 가지가 필요하다.
|
||
|
||
1. **바로 앞 구역의 아름다움** — 앞바다를 대충 두고 다음으로 넘어갈 수 없다.
|
||
2. **해금 비용(거품)**
|
||
|
||
생물과 장식은 각자 자기 구역에 속한다. 그 구역이 열려야 상점에 나타나고,
|
||
그 구역 밖으로는 놓을 수 없다(구역 경계를 걸치는 것도 안 된다).
|
||
모래색과 물빛은 구역 중심 색을 기준으로 이어 붙여서 경계가 보이지 않게 그린다.
|
||
|
||
자세한 수치와 앞으로 붙일 것들은 [docs/DESIGN.md](docs/DESIGN.md) 참고.
|
||
|
||
## 저장 위치
|
||
|
||
`%APPDATA%\Godot\app_userdata\Blub Blub\save.json` (한 세대 전 백업은 `save.bak.json`)
|
||
|
||
## 부팅 시 자동 실행
|
||
|
||
내보내기(Export)로 exe를 만든 뒤, `Win+R` → `shell:startup` 폴더에 그 exe의 바로가기를 넣으면 된다.
|