도시 건설 게임의 거리는 쉽게 배경이 됩니다. 시민 몇 명을 무작위로 걷게 하면 그럴듯해 보이는데, 오래 보면 금방 들통납니다. 아무도 어딘가로 가고 있지 않으니까요. Little City Story에서는 반대로 갔습니다. 거리 풍경을 인구 시뮬레이션의 출력으로 만드는 것입니다.
인구는 숫자가 아니라 구조다
도시 인구는 어린이, 학생, 생산연령, 노년의 코호트로 나뉘고 출생과 진학과 은퇴가 결정론적인 일일 흐름으로 굴러갑니다. 가구도 가족, 부부, 1인, 노년 가구로 구성됩니다.
이주는 매력도가 정합니다. 학교, 보육, 의료, 주거비, 통근, 일자리의 여섯 축으로 정주 접근성을 계산하고, 그 종합 매력도가 이주 압력이 되어 코호트별 유입과 유출을 만듭니다. 교육 접근성은 노동 숙련도로 이어져 상업과 산업의 일자리 수요까지 장기적으로 기울입니다. 행복도와 세수, 주거·상업·산업 수요가 전부 이 구조에 물려 있습니다.
시간대가 거리의 구성원을 바꾼다
거리 보행자는 이 코호트 비율과 시간대에서 결정론적으로 뽑힙니다.
- 새벽에는 등교하는 학생과 통근자가 늘어납니다.
- 낮에는 학생과 노년의 비중이 올라갑니다.
- 밤에는 전체가 줄어듭니다.
목적지도 흐름을 따릅니다. 학생은 학교와 도서관으로, 노년은 의료 시설과 공원으로, 통근자는 일터로 향합니다. 해당 시설이 아직 없으면 기존의 배회로 자연스럽게 돌아갑니다. 노년 보행자는 느리게 걷고, 공원에는 노년의 휴식 장면이 섞입니다.
사건이 있는 거리
비율만으로는 부족해서 인구 흐름이 만드는 장면을 얹었습니다.
- 이주 순유입이 있으면 입주 장면이 나옵니다. 트럭이 서고 상자가 내려지고 짐을 나르는 시민이
오갑니다. 유출이면 이사 나가는 장면이 됩니다.
- 학교 앞에는 새벽 등교, 낮 쉬는 시간, 저녁 하교 장면이 돕니다.
- 노년 비율이 12%를 넘는 도시에서는 진료소와 병원 방문 장면이 생깁니다.
장면은 문이 향한 인접 도로를 기준으로 배치되고, 밤이나 폭우, 폭설에는 알아서 정리됩니다. 교통 품질과 연동해 한 화면의 장면 수에는 상한을 뒀습니다.
성능과 저장, 두 가지 원칙
첫째, 성능 예산 안에서만 움직입니다. 보행자는 18명 상한이고 시민 변형과 일치하는 오브젝트 풀을 재사용합니다. 거리가 살아 보이자고 프레임을 팔지는 않습니다.
둘째, 전부 파생 상태입니다. 거리 장면과 보행자 구성은 인구 구조에서 매번 다시 계산되는 결과물이라 저장 파일에 안 들어갑니다. 저장 형식이 안 바뀌니까 구버전 도시를 불러와도 그 도시의 인구 구조에 맞는 거리가 그대로 재현됩니다.
왜 이 방식인가
무작위 장식은 만들기 쉽고 금방 낡습니다. 시뮬레이션의 출력은 만들기 어려운 대신, 도시가 바뀌면 거리도 따라 바뀝니다. 학교를 지으면 다음 날 아침 등굣길이 생기고, 고령화가 진행되면 공원 벤치의 풍경이 달라집니다. 플레이어가 내린 결정이 거리에서 되돌아오는 것. 이 게임이 노리는 "살아 있음"이 그겁니다. 브라우저에서 바로 확인하실 수 있습니다.