Skip to content

Commit 8320fe9

Browse files
committed
물건이 선 칸을 하나로 맞춰 배치가 어긋나던 것을 잡음
배치가 부자연스럽다는 말을 듣고 격자를 통째로 찍어 봤다. 눈으로 볼 때보다 나빴다. 한 판에 여덟 군데에서 물건이 벽 위에 서 있거나 둘이 같은 칸에 겹쳐 서 있었고, 벽을 따라 세우라고 적어 둔 서가는 실제로는 벽에서 두 칸 떨어져 방 한가운데 떠 있었다. 원인은 발 높이였다. 종류마다 값이 달랐다 - 서가 1.9, 뿌리 1.6, 상자 1.0. 그런데 자리를 예약하는 쪽과 복도인지 보는 쪽, 그리고 방 좌표를 손으로 적는 쪽은 전부 놓은 칸을 기준으로 하고 있었다. 그래서 적어 둔 칸과 실제로 선 칸이 한 칸씩 어긋났고, 어긋난 만큼 벽에 박히고 서로 겹쳤다. 발을 놓은 칸의 아래 모서리 하나로 통일했다. 예약과 판정과 그림이 같은 칸을 가리키니 겹침과 벽 관통이 32판 전부 0이 됐다. 청크를 나누는 기준과 마주보기 판정도 같은 칸을 쓴다. 마주보기는 두 줄을 뒤지던 것을 한 줄로 좁혔다 - 어긋남을 덮으려고 넓혀 둔 것이라 옆 칸 물건이 집히기도 했다. 예약도 한 칸에서 덮는 칸 전부로 바꿨다. 서가는 1.8칸 폭이라 양옆으로 0.4칸씩 걸치고 석주는 1.95칸 높이라 윗칸까지 덮는데, 그걸 안 적으니 두 칸 간격으로 놓은 서가끼리 그림이 파고들어 하나의 얼룩으로 보였다. 등불처럼 한 칸짜리는 폭만으로는 간격이 안 생겨서 좌우 한 칸을 따로 비운다. 벽을 따라 세우는 자리는 이제 지형에서 직접 찾는다. 방을 직사각형으로 알고 윗줄에 늘어놓던 것이 문제였다 - 방은 귀퉁이가 베여 있고 복도가 뚫고 들어와서 그 줄은 벽에 붙어 있지도 전부 바닥도 아니다. 등 뒤가 막힌 칸만 골라 세우고 남쪽 벽도 성기게 채웠다. 방 셋을 다시 짰다. 주랑은 짝이 되는 자리에만 석주를 세운다. 앞 판은 한쪽이 못 서면 다른 쪽만 남아서, 한 쌍만 덩그러니 남은 판이 있었다. 제단 방은 방 모서리가 아니라 제단에서 거리를 재고, 복도 폭을 피해 두 축 모두 두 칸씩 물러난다. 물뜰은 못을 팔 때 이미 무엇이 선 칸을 비켜 간다 - 안 그러면 벽을 따라 세워 둔 서가가 못 한가운데 잠긴 채로 선다. 벌판 조형물은 무리로 심는다. 두 칸마다 확률로 하나씩 흩뿌리던 것을 자리를 고르고 그 둘레에 둘셋을 붙이는 식으로 바꿨고, 둘 이상 서지 못하면 아예 심지 않는다. 넓은 이끼밭에 뿌리 하나가 서 있으면 무리가 아니라 버려진 것으로 보인다. 문 순서도 하나 잡았다. 남쪽 벽까지 꾸미기 시작하니 서가가 문 자리를 먼저 차지해서 네 지역 모두 안쪽 방으로 드나들 수 없게 됐다. 문은 꾸밈보다 먼저 세우고, 그 자리가 막혔으면 남쪽 벽을 훑어 다른 자리를 찾는다. 겹침·벽 관통·외톨이 조형물을 세는 검사를 넣었다. 눈으로는 못 세는 것들이라 네 지역 여덟 판을 전부 돌려 0인지 본다. 캡처 일곱 장도 새 배치로 다시 찍었다.
1 parent e64f1ed commit 8320fe9

9 files changed

Lines changed: 446 additions & 106 deletions

‎app/lib/features/expedition/presentation/expedition_tile_world.dart‎

Lines changed: 412 additions & 106 deletions
Large diffs are not rendered by default.

‎app/test/expedition_tile_atlas_test.dart‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,40 @@ void main() {
209209
}
210210
});
211211

212+
test('물건이 겹치거나 벽에 박히거나 혼자 서 있지 않다', () {
213+
// 넓히고 채우는 것만으로는 부족했다. 발 높이가 종류마다 달라서 예약한
214+
// 칸과 실제로 선 칸이 한 칸씩 어긋나 있었고, 그래서 서가가 벽에 박히고
215+
// 두 물건이 같은 자리에 겹쳐 섰다. 한 판에 여덟 군데가 그랬다.
216+
// 눈으로는 못 세니 여기서 센다.
217+
for (final region in <String>[
218+
'moss_archive',
219+
'echo_well',
220+
'starlight_seed_vault',
221+
'heartwood_observatory',
222+
]) {
223+
for (var stage = 1; stage <= 8; stage++) {
224+
final metrics = expeditionTileWorldPlacementDiagnostics(
225+
region,
226+
stage,
227+
// 엉킴이 서는 판과 안 서는 판을 섞어 본다.
228+
withGuardian: stage.isEven,
229+
);
230+
final where = '$region $stage장';
231+
expect(metrics['overlapping'], 0, reason: '$where 겹친 물건');
232+
expect(metrics['standingOffFloor'], 0, reason: '$where 바닥 밖에 선 물건');
233+
// 벌판에 하나만 선 조형물은 무리가 아니라 버려진 것으로 보인다.
234+
expect(metrics['lonelyScenery'], 0, reason: '$where 혼자 선 조형물');
235+
// 서가와 등불은 벽에 등을 붙인다. 방 한가운데 떠 있는 쪽이 많아지면
236+
// 벽을 따라 세운다는 규칙이 깨진 것이다.
237+
expect(
238+
metrics['wallBackedProps']!,
239+
greaterThan(metrics['freeStandingProps']! * 4),
240+
reason: '$where 벽에 붙은 물건',
241+
);
242+
}
243+
}
244+
});
245+
212246
test('아치로 실내 방을 드나들 수 있고 문이 막혀 있지 않다', () {
213247
for (final region in <String>[
214248
'moss_archive',
-1.38 KB
Loading
1.79 KB
Loading
720 Bytes
Loading
1.16 KB
Loading
-836 Bytes
Loading
934 Bytes
Loading
-116 KB
Loading

0 commit comments

Comments
 (0)