Files
blub-blub/README.md
T
ttipo 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>
2026-09-01 17:59:50 +09:00

101 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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의 바로가기를 넣으면 된다.