NTs: Tower Protocol은 브라우저에서 도는 쿼터뷰 게임입니다. 화면은 React로 그리는데, 게임 자체는 React를 전혀 모릅니다. 이 경계를 처음에 정해 두고 지금까지 지키고 있습니다.
시뮬레이션은 순수 타입스크립트입니다
몬스터가 움직이고 공격이 맞고 체력이 깎이는 계산은 화면과 완전히 분리된 파일에 있습니다. 컴포넌트도, 훅도, 화면 상태도 들어가지 않습니다.
이렇게 하면 좋은 게 두 가지입니다. 하나는 화면 없이 규칙만 돌려 볼 수 있다는 것. 다른 하나는 성능입니다. 게임 루프는 매 프레임 도는데 그때마다 화면 상태를 갱신하면 프레임마다 다시 그리게 됩니다. 지금은 루프가 DOM 변환만 갱신하고, HUD 값이 실제로 바뀔 때만 다시 그립니다.
좌표 변환은 한 곳에만 둡니다
쿼터뷰는 타일 좌표와 화면 좌표가 다릅니다. 이 변환을 여러 군데에 흩어 놓으면 반드시 어긋납니다. 그리는 자리와 클릭이 먹히는 자리가 미묘하게 다른 게임이 그렇게 나옵니다.
그래서 변환은 파일 하나에만 있습니다. 그리기도 입력도 전부 그 함수를 부릅니다.
같은 원칙을 입력에도 걸었습니다. 키보드와 마우스 클릭은 같은 스냅샷을 만들어 시뮬레이션에 넘깁니다. 두 경로가 갈라지면 "키보드로는 되는데 클릭으로는 안 되는" 버그가 생기고, 그건 한참 뒤에야 발견됩니다.
층마다 컴포넌트를 만들지 않습니다
층이 120개가 넘습니다. 층마다 화면 컴포넌트를 만들면 120개가 되고, 공통 수정이 120번이 됩니다.
화면은 이벤트 종류로만 갈라집니다. 구역 정화, 은닉물 회수, 격리실 생존, 중앙 코어 방어, 기술자 호위, 감시망 침투, 봉인 회로 — 이 종류만큼만 있습니다. 층은 그중 어떤 이벤트를 어떤 방에서 어떤 종족과 하는지를 고르는 데이터입니다.
이벤트도 전부 같은 생명주기를 지납니다. 준비 → 진행 → 성공이나 실패 → 보상이나 벌칙 → 퇴장. 목표와 실패 조건, 오브젝트 배치는 이벤트 모드가 정하고 시뮬레이션은 건드리지 않습니다.
이벤트마다 시작 몬스터 수도 모드가 정합니다. 전투 5, 호위 3, 생존·탐색·퍼즐 2, 방어·잠입 1. 맵 레이아웃 자체가 전투 기준으로 짜여 있어서, 그대로 두면 어떤 이벤트든 사실상 전투가 되어 버립니다.
눈에 보이는 각도와 맞는 각도를 같게
플레이해 보면 바로 걸리는 것들이 있었습니다.
공격 방향. 어디까지 맞는지가 눈에 안 보였습니다. 발밑에 부채꼴을 깔았는데, 중요한 건 그게 판정과 같은 각도라는 점입니다. 보이는 것과 맞는 것이 다르면 표시가 없느니만 못합니다. 명중 판정도 몸통 두께를 반영하고 각도를 화면 기준으로 고쳤습니다.
가려짐. 쿼터뷰는 기둥이나 벽 뒤로 캐릭터가 숨습니다. 목표를 가리는 블록만 반투명하게 바꾸되 실루엣은 남깁니다. 완전히 지워 버리면 거기 벽이 있다는 사실까지 사라져서 왜 안 지나가지는지 알 수 없게 됩니다.
원거리 직업. 지팡이·활·총을 든 직업이 무기를 휘두르고 있었습니다. 지금은 탄이 날아가고, 처음 맞은 하나에만 들어가고, 벽에 막힙니다.
난이도는 한 자리에서만 나옵니다
몬스터 체력·공격력·속도, 정예 추가 여부, 플레이어 쿨다운, 파도 간격, 목표 수량 — 이 전부가 한 파일의 값 하나에서 나옵니다. 층 번호와 환경 기믹을 넣으면 그 값이 나오고, 나머지는 전부 그걸 씁니다.
1층과 99층을 비교하면 몬스터 체력 46 → 110, 공격력 11 → 22, 이동 속도 2.35 → 2.91입니다. 속도에는 상한이 있습니다. 플레이어의 4.2를 넘지 않습니다. 넘는 순간 도망이 불가능해져 게임의 성격이 바뀝니다. 보스층은 같은 구간 일반층보다 체력 ×1.8, 공격력 ×1.5입니다.
이어서 읽을 것
이 구조 덕에 층을 늘릴 수 있었습니다. 방 하나로 120층을 돌렸더니 올라가는 느낌이 없었습니다가 그다음 이야기이고, 저장 쪽은 저장 파일을 외부 입력으로 취급합니다입니다.