방문자

오늘
—
어제
—
누적
—

불러오는 중

게임 개발 · 기술 동향 · 팀 블로그MIRO
헤드라인

Factorio · 게임 설계

포탑 사거리 안에서 우선 공격 대상을 정하기

Factorio 개발 일지 410의 포탑 사거리 안에서 우선 공격 대상을 정하기 관련 화면
Wube Software의 Factorio 개발 일지 #410 본문 이미지입니다. · 이미지 출처

가까운 적보다 먼저 처리할 적

2024년 5월 10일의 Factorio 개발 기록 #410은 로켓 포탑과 목표 우선순위를 소개했습니다. 우주 플랫폼에 날아오는 여러 크기의 소행성을 같은 무기로 처리하면 탄약을 비효율적으로 쓰기 쉽습니다. 값비싼 탄약을 작은 대상에 쓰지 않고 더 적합한 포탑이 맡도록 역할을 나누는 것이 출발점입니다.

우선순위 목록은 사거리 안의 후보 중 무엇을 먼저 공격할지 지정합니다. 여기서 ‘목록 밖 대상 무시’는 별도 선택입니다. 우선 대상을 먼저 노리는 것과 지정한 대상만 공격하는 것은 다른 규칙입니다. 이를 구분하지 않으면 우선 대상이 없을 때 포탑이 멈춘 이유를 이해하기 어렵습니다.

모든 포탑에 같은 규칙은 아닙니다

원문은 목표 우선순위가 로켓 포탑에만 한정되지 않는다고 설명하면서도 야포를 예외로 둡니다. 야포는 다른 사격 처리 구조를 쓰므로 같은 설정을 적용하지 않았습니다. 새 로켓 포탑은 확장팩의 요소지만 목표 우선순위는 기본 게임 2.0의 기능으로 소개됐다는 구분도 필요합니다.

개발 관점에서는 무기 종류마다 후보 탐색, 유효 사거리, 공격 비용이 다르다는 점을 보여줍니다. UI가 비슷해 보인다고 내부 선택 규칙까지 같다고 가정하면 안 됩니다. 우선순위 목록은 공격 불가능한 대상까지 공격할 수 있게 만드는 기능이 아닙니다.

회로로 바꾸는 정책

현재 공식 LuaTurretControlBehavior 문서에서는 회로 신호로 우선순위 목록을 정하는 set_priority_list와, 조건에 따라 목록 밖 대상을 무시하는 set_ignore_unlisted_targets를 별도로 제공합니다. ignore_unlisted_targets_condition은 그 조건을 담습니다. read_ammo는 보유한 탄약이나 유체를 회로에 내보내는 설정입니다.

이 공개 API를 보면 목표 선택 정책과 자원 관찰이 나뉘어 있음을 확인할 수 있습니다. 다만 문서만으로 엔진 내부의 후보 정렬 자료구조나 갱신 비용까지 알 수는 없습니다. 회로로 설정할 수 있다는 사실을 매 프레임 모든 적을 재정렬한다는 주장으로 확대하지 않았습니다.

우선순위와 금지 규칙을 따로 시험합니다

직접 해볼 실험은 두 종류의 적과 포탑 하나를 둔 작은 상황입니다. 먼저 우선순위만 지정하고 두 종류를 함께 접근시킵니다. 이후 우선 대상이 없는 경우를 만들고, 목록 밖 무시를 켰을 때와 껐을 때를 비교합니다. 이 글에서 해당 실험을 실행한 결과를 제시하는 것은 아닙니다.

탄약이 적을 때만 무시 조건을 켜는 정책도 별도로 시험할 수 있습니다. 기록할 값은 처치 수뿐 아니라 소비한 탄약, 공격하지 않고 기다린 시간, 방어선을 통과한 적입니다. 더 비싼 적부터 공격한다고 전체 방어가 항상 좋아지는 것은 아니므로 여러 포탑의 역할도 함께 확인해야 합니다.

자체 게임에 적용한다면 대상이 선택되지 않은 이유를 디버그 표시로 남기는 것이 유용합니다. 사거리 밖인지, 목록에서 제외됐는지, 탄약이 없는지를 구분하면 기획자가 규칙을 검증하기 쉽습니다. 이는 Factorio의 비공개 구현 설명이 아니라 이 사례에서 도출한 테스트 제안입니다.

출처

댓글

이 글에 대한 생각을 남겨 주세요.

댓글 삭제

헤드라인

같은 카테고리의 글

게임 기술 전체 보기 ↗