고착생물을 집으로, 생물은 해양동물만
거품돌·해초·산호·켈프·관벌레는 물고기가 깃드는 자리지 그 자체가 일꾼이 아니다. 실제로 물고기는 바위 틈과 해초 사이를 보금자리로 삼는다. 전부 집으로 옮기고, 생물에는 움직이는 해양동물만 남겼다. - 집이 자연 서식지(rock/plant)와 지어 올린 것(vessel/wreck/pillar) 두 갈래가 되면서 정원에 폭이 생겼다. 거품돌 1, 해초·산호 2, 켈프·관벌레 4, 지어 올린 것은 표준 3. - 빈 자리를 메우려 게·해마·새우를 넣어 층마다 생물 둘을 맞췄다. 소라게·해마·열수구 새우. 형태도 셋 새로 그렸다. - 형태 계통이 그대로 경계가 된다. 생물 fish/glow/crab/seahorse/shrimp, 집 rock/plant/vessel/wreck/pillar. 겹치지 않는 것을 테스트가 지킨다. - 예전에 생물로 사 둔 돌·해초는 같은 id의 집으로 그만큼 지어 준다. 그냥 버리면 사 둔 것이 조용히 사라진다. 버그 둘 _fish_area/_orbit_center가 생물 자리를 grid_rect(화면 테두리)로 잘랐다. 가로로 이어 스크롤하던 시절에는 화면 = 바다여서 맞았지만, 층이 옆으로 늘어선 지금은 뒤쪽 층 생물이 전부 첫 층 오른쪽 끝으로 끌려와 제 층에서 사라졌다. _home_bounds()가 그 집이 속한 층의 테두리를 돌려준다. _make_fish가 fish와 glow만 궤도에 올려, 새로 넣은 게·해마·새우가 제자리에 굳어 있었다. 고착생물이 전부 집으로 갔으므로 가드를 걷어냈다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+66
-35
@@ -54,77 +54,90 @@ const ZONES := [
|
||||
## height: 칸 높이의 몇 배로 서 있는지
|
||||
const PRODUCERS := [
|
||||
# --- 얕은 바다 ---
|
||||
{
|
||||
"id": "bubble_stone", "name": "거품돌", "zone": 0, "shape": "rock", "height": 0.75,
|
||||
"desc": "바닥에서 조용히 거품을 뿜는 돌.",
|
||||
"color": Color(0.62, 0.68, 0.72), "base_cost": 15.0, "bps": 0.2, "beauty": 1.0,
|
||||
},
|
||||
{
|
||||
"id": "guppy", "name": "구피", "zone": 0, "shape": "fish", "height": 0.8,
|
||||
"desc": "집 둘레를 쉬지 않고 맴돈다.",
|
||||
"color": Color(0.98, 0.72, 0.32), "base_cost": 40.0, "bps": 0.5, "beauty": 2.0,
|
||||
"color": Color(0.98, 0.72, 0.32), "base_cost": 15.0, "bps": 0.35, "beauty": 2.0,
|
||||
},
|
||||
{
|
||||
"id": "seaweed", "name": "해초", "zone": 0, "shape": "plant", "height": 0.95,
|
||||
"desc": "물살에 흔들리는 초록 잎.",
|
||||
"color": Color(0.35, 0.72, 0.42), "base_cost": 110.0, "bps": 1.0, "beauty": 3.0,
|
||||
"id": "hermit_crab", "name": "소라게", "zone": 0, "shape": "crab", "height": 0.7,
|
||||
"desc": "빈 껍데기를 지고 바닥을 훑는다.",
|
||||
"color": Color(0.86, 0.46, 0.34), "base_cost": 130.0, "bps": 1.4, "beauty": 4.0,
|
||||
},
|
||||
# --- 산호초 ---
|
||||
{
|
||||
"id": "clownfish", "name": "흰동가리", "zone": 1, "shape": "fish", "height": 0.85,
|
||||
"desc": "제 자리를 벗어나지 않고 맴돈다.",
|
||||
"color": Color(0.96, 0.55, 0.18), "base_cost": 1200.0, "bps": 8.0, "beauty": 8.0,
|
||||
"desc": "제 집을 벗어나지 않고 맴돈다.",
|
||||
"color": Color(0.96, 0.55, 0.18), "base_cost": 1200.0, "bps": 9.0, "beauty": 8.0,
|
||||
},
|
||||
{
|
||||
"id": "coral", "name": "산호", "zone": 1, "shape": "plant", "height": 0.85,
|
||||
"desc": "느리게 자라지만 구역을 화사하게 만든다.",
|
||||
"color": Color(0.95, 0.45, 0.62), "base_cost": 13000.0, "bps": 47.0, "beauty": 20.0,
|
||||
"id": "seahorse", "name": "해마", "zone": 1, "shape": "seahorse", "height": 0.95,
|
||||
"desc": "꼬리를 감고 선 채로 흔들린다.",
|
||||
"color": Color(0.95, 0.78, 0.36), "base_cost": 14000.0, "bps": 55.0, "beauty": 20.0,
|
||||
},
|
||||
# --- 켈프 숲 ---
|
||||
{
|
||||
"id": "kelp", "name": "켈프", "zone": 2, "shape": "plant", "height": 1.35,
|
||||
"desc": "수면을 향해 길게 뻗는 갈색 잎.",
|
||||
"color": Color(0.34, 0.42, 0.15), "base_cost": 150000.0, "bps": 260.0, "beauty": 45.0,
|
||||
"id": "turtle", "name": "바다거북", "zone": 2, "shape": "fish", "height": 0.75,
|
||||
"desc": "느긋하게 제 집을 돈다.",
|
||||
"color": Color(0.40, 0.60, 0.36), "base_cost": 170000.0, "bps": 300.0, "beauty": 45.0,
|
||||
},
|
||||
{
|
||||
"id": "turtle", "name": "바다거북", "zone": 2, "shape": "fish", "height": 0.75,
|
||||
"desc": "느긋하게 제 자리를 지킨다.",
|
||||
"color": Color(0.40, 0.60, 0.36), "base_cost": 2000000.0, "bps": 1400.0, "beauty": 90.0,
|
||||
"id": "snow_crab", "name": "대게", "zone": 2, "shape": "crab", "height": 0.85,
|
||||
"desc": "긴 다리로 숲 바닥을 짚고 다닌다.",
|
||||
"color": Color(0.85, 0.40, 0.30), "base_cost": 2100000.0, "bps": 1500.0, "beauty": 90.0,
|
||||
},
|
||||
# --- 심해 ---
|
||||
{
|
||||
"id": "jellyfish", "name": "해파리", "zone": 3, "shape": "glow", "height": 1.1,
|
||||
"desc": "은은하게 빛나며 떠다닌다.",
|
||||
"color": Color(0.72, 0.60, 0.95), "base_cost": 26000000.0, "bps": 7800.0, "beauty": 170.0,
|
||||
"color": Color(0.72, 0.60, 0.95), "base_cost": 26000000.0, "bps": 8200.0, "beauty": 170.0,
|
||||
},
|
||||
{
|
||||
"id": "squid", "name": "대왕오징어", "zone": 3, "shape": "fish", "height": 0.95,
|
||||
"desc": "어둠 속에서 잠깐 모습을 드러낸다.",
|
||||
"color": Color(0.62, 0.32, 0.42), "base_cost": 400000000.0, "bps": 44000.0, "beauty": 320.0,
|
||||
"color": Color(0.62, 0.32, 0.42), "base_cost": 400000000.0, "bps": 46000.0, "beauty": 320.0,
|
||||
},
|
||||
# --- 열수구 ---
|
||||
{
|
||||
"id": "tubeworm", "name": "관벌레", "zone": 4, "shape": "plant", "height": 1.1,
|
||||
"desc": "햇빛 없이 열기만으로 살아간다.",
|
||||
"color": Color(0.92, 0.28, 0.30), "base_cost": 7e9, "bps": 260000.0, "beauty": 600.0,
|
||||
"id": "vent_shrimp", "name": "열수구 새우", "zone": 4, "shape": "shrimp", "height": 0.7,
|
||||
"desc": "끓는 물 언저리에 떼로 붙어 산다.",
|
||||
"color": Color(0.94, 0.62, 0.52), "base_cost": 7e9, "bps": 275000.0, "beauty": 600.0,
|
||||
},
|
||||
{
|
||||
"id": "anglerfish", "name": "심해 아귀", "zone": 4, "shape": "glow", "height": 1.0,
|
||||
"desc": "칠흑 속에서 등불을 흔든다.",
|
||||
"color": Color(0.95, 0.85, 0.45), "base_cost": 1.2e11, "bps": 1600000.0, "beauty": 1100.0,
|
||||
"color": Color(0.95, 0.85, 0.45), "base_cost": 1.2e11, "bps": 1700000.0, "beauty": 1100.0,
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
## 집 — 생물이 사는 곳. 격자 칸을 차지하는 것은 이쪽뿐이다.
|
||||
## 한 채당 HOUSE_CAPACITY마리를 들이고, 같은 종류라도 몇 채든 지을 수 있다.
|
||||
## 자연 서식지(돌·해초·산호·켈프·관벌레)와 지어 올린 것(항아리·난파선·석주…)이 함께 들어간다.
|
||||
## 물고기가 바위 틈이나 해초 사이를 보금자리로 삼는 것을 그대로 옮겼다.
|
||||
## 자연 서식지는 싸지만 적게 들이고, 지어 올린 것은 비싼 대신 정원이 넓다.
|
||||
##
|
||||
## 한 채당 capacity마리를 들이고, 같은 종류라도 몇 채든 지을 수 있다.
|
||||
## 지을수록 값이 오르는 것은 생물과 같다(COST_GROWTH).
|
||||
## 집 자체는 거품을 벌지 않는다. 자리와 아름다움을 준다.
|
||||
## size : 바닥에서 차지하는 칸 수 (열, 행). 넓은 집일수록 아름다움이 크다.
|
||||
## shape: vessel(항아리·병) / wreck(난파선·뼈대) / pillar(기둥·석상).
|
||||
## 집은 이 셋만 쓴다. 생물의 형태(plant/rock/fish/glow)와 섞지 않아야
|
||||
## 한눈에 "건물"과 "사는 것"이 갈린다.
|
||||
## size : 바닥에서 차지하는 칸 수 (열, 행). 넓은 집일수록 아름다움이 크다.
|
||||
## capacity: 들일 수 있는 생물 수. 없으면 HOUSE_CAPACITY.
|
||||
## shape : rock/plant(자연) · vessel/wreck/pillar(지은 것).
|
||||
## 생물의 형태(fish/glow/crab/seahorse/shrimp)와 섞지 않아야
|
||||
## 한눈에 "사는 곳"과 "사는 것"이 갈린다.
|
||||
const HOUSES := [
|
||||
# --- 얕은 바다 ---
|
||||
{
|
||||
"id": "bubble_stone", "name": "거품돌", "zone": 0, "shape": "rock",
|
||||
"size": Vector2i(1, 1), "height": 0.75, "capacity": 1,
|
||||
"desc": "틈이 하나뿐이라 한 마리만 깃든다. 가장 싼 자리.",
|
||||
"color": Color(0.62, 0.68, 0.72), "base_cost": 15.0, "beauty": 4.0,
|
||||
},
|
||||
{
|
||||
"id": "seaweed", "name": "해초", "zone": 0, "shape": "plant",
|
||||
"size": Vector2i(1, 1), "height": 0.95, "capacity": 2,
|
||||
"desc": "잎 사이에 몸을 숨긴다.",
|
||||
"color": Color(0.35, 0.72, 0.42), "base_cost": 120.0, "beauty": 9.0,
|
||||
},
|
||||
{
|
||||
"id": "amphora", "name": "침몰한 항아리", "zone": 0, "shape": "vessel",
|
||||
"size": Vector2i(2, 1), "height": 1.2,
|
||||
@@ -138,6 +151,12 @@ const HOUSES := [
|
||||
"color": Color(0.78, 0.92, 0.72), "base_cost": 1200.0, "beauty": 20.0,
|
||||
},
|
||||
# --- 산호초 ---
|
||||
{
|
||||
"id": "coral", "name": "산호", "zone": 1, "shape": "plant",
|
||||
"size": Vector2i(1, 1), "height": 0.85, "capacity": 2,
|
||||
"desc": "가지 사이가 곧 물고기의 골목이다.",
|
||||
"color": Color(0.95, 0.45, 0.62), "base_cost": 9000.0, "beauty": 26.0,
|
||||
},
|
||||
{
|
||||
"id": "anchor", "name": "낡은 닻", "zone": 1, "shape": "wreck",
|
||||
"size": Vector2i(2, 1), "height": 1.15,
|
||||
@@ -151,6 +170,12 @@ const HOUSES := [
|
||||
"color": Color(0.42, 0.32, 0.24), "base_cost": 60000.0, "beauty": 110.0,
|
||||
},
|
||||
# --- 켈프 숲 ---
|
||||
{
|
||||
"id": "kelp", "name": "켈프", "zone": 2, "shape": "plant",
|
||||
"size": Vector2i(1, 2), "height": 1.35, "capacity": 4,
|
||||
"desc": "수면까지 뻗은 줄기 사이에 여럿이 머문다.",
|
||||
"color": Color(0.34, 0.42, 0.15), "base_cost": 900000.0, "beauty": 120.0,
|
||||
},
|
||||
{
|
||||
"id": "submarine", "name": "침몰한 잠수정", "zone": 2, "shape": "wreck",
|
||||
"size": Vector2i(3, 2), "height": 1.7,
|
||||
@@ -177,6 +202,12 @@ const HOUSES := [
|
||||
"color": Color(0.55, 0.54, 0.50), "base_cost": 1.2e9, "beauty": 1900.0,
|
||||
},
|
||||
# --- 열수구 ---
|
||||
{
|
||||
"id": "tubeworm", "name": "관벌레", "zone": 4, "shape": "plant",
|
||||
"size": Vector2i(1, 1), "height": 1.1, "capacity": 4,
|
||||
"desc": "빽빽한 관 다발이 통째로 보금자리가 된다.",
|
||||
"color": Color(0.92, 0.28, 0.30), "base_cost": 3.5e10, "beauty": 1600.0,
|
||||
},
|
||||
{
|
||||
"id": "vent_chimney", "name": "열수 굴뚝", "zone": 4, "shape": "pillar",
|
||||
"size": Vector2i(2, 2), "height": 1.95,
|
||||
@@ -221,11 +252,11 @@ const STARTER_HOUSES := [
|
||||
|
||||
## 새로 시작할 때 이미 살고 있는 생물. id -> 마리 수.
|
||||
## 거품은 생물만 벌기 때문에 최소 한 마리는 처음부터 있어야 한다.
|
||||
## 바닥에 붙는 것(거품돌)과 헤엄치는 것(구피)을 하나씩 두어,
|
||||
## 켜자마자 "제자리에 서는 것"과 "집을 도는 것"이 둘 다 보이게 했다.
|
||||
const STARTER_FISH := {"bubble_stone": 1, "guppy": 1}
|
||||
## 헤엄치는 것(구피)과 바닥을 걷는 것(소라게)을 하나씩 두어,
|
||||
## 켜자마자 두 가지 움직임이 다 보이게 했다.
|
||||
const STARTER_FISH := {"guppy": 1, "hermit_crab": 1}
|
||||
|
||||
## 시작 거품. 두 번째 거품돌 값(ceil(15 × 1.15) = 18)보다 조금 넉넉하게 두어,
|
||||
## 시작 거품. 두 번째 구피 값(ceil(15 × 1.15) = 18)보다 조금 넉넉하게 두어,
|
||||
## 시작하자마자 남은 한 자리를 직접 채워보며 구조를 익히게 한다.
|
||||
const STARTER_BUBBLES := 20.0
|
||||
|
||||
|
||||
+11
-1
@@ -576,7 +576,17 @@ func _restore_house(id: String, col: int, row: int) -> void:
|
||||
|
||||
## 정원을 넘겨도 이미 살던 생물을 내쫓지는 않는다. 자리가 빌 때까지 더 못 들일 뿐이다.
|
||||
func _restore_fish(id: String, count: int) -> void:
|
||||
if Catalog.producer(id).is_empty() or count <= 0:
|
||||
if count <= 0:
|
||||
return
|
||||
# 돌·해초처럼 예전에 생물이었다가 집이 된 것은 그만큼 집으로 지어 준다.
|
||||
# 그냥 버리면 플레이어가 사 둔 것이 조용히 사라진다.
|
||||
if Catalog.producer(id).is_empty():
|
||||
if not Catalog.house(id).is_empty():
|
||||
for i in count:
|
||||
var spot := first_free_spot(id)
|
||||
if spot.x < 0:
|
||||
break
|
||||
_restore_house(id, spot.x, spot.y)
|
||||
return
|
||||
fish[id] = fish_count(id) + count
|
||||
recalc()
|
||||
|
||||
Reference in New Issue
Block a user