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

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 참고.

저장 위치

%APPDATA%\Godot\app_userdata\Blub Blub\save.json (한 세대 전 백업은 save.bak.json)

부팅 시 자동 실행

내보내기(Export)로 exe를 만든 뒤, Win+Rshell:startup 폴더에 그 exe의 바로가기를 넣으면 된다.

S
Description
No description provided
Readme 466 KiB
Languages
GDScript 96.7%
PowerShell 1.8%
GDShader 1.5%