
최근 수정일 : '19.12.07.22:00.(수정3) 수정 내용은 글 최하단에.
본문을 복사해가지 말고, 위키 등 인용 시 본문 링크를 해주셈.
오류지적 및 피드백은 이 글 덧글로 하면 됨.
철혈시트 업데이트용으로 연구하던거라 NGA에도 글 쓸건데, 번역 도움 가능한 사람 있으면 도움 좀
* 기존 연구 :
철혈시트 엑셀본(铁血信息查询工具3.0(18.02.08ver)) [FENRIR 00:00]全数据&文本整理3.0—包含:铁血属性/地图详情/人形,妖精,装备,后勤,自律的各类信息/宿舍系统文案等(https://bbs.nga.cn/read.php?tid=10242318)
* 관련 링크 :
1. 개요
기존 소녀전선의 초기 좌표계는 중국 NGA의 "전장 모델과 공격 논리에 대하여([抛个砖头] 也来谈战场模型与攻击逻辑(Ultimate Edition))" 글을 바탕으로한 키패드 1번 기준 (-2,-0.123) 좌표계가 정설로 받아지고 있었음.
하지만 중간에 변동이 있었는지, 아니면 기존 연구에 오차가 있었는지는 몰라도 실제 게임내에서는 부분적인 오차들을 발견할 수 있음.
그럼에도 불구하고 클라이언트 내에서 정확한 기준 좌표를 추적하는 것에는 문제가 있었고, 이로인해 정확한 좌표값을 얻어내는 것에 어려움이 있었는데,
소전 전투 시뮬레이터라는 채ㅡ신 기술의 발달을 통해 인위적 조정을 통해 좌표값을 추적할 수 있게 되었음.
이에 기존 이론의 오류를 알아보고 새로운 (-1.7,-0.09) 초기 좌표계를 제시하고 추가적으로 사정거리, 넉백 한계 거리 등에 대한 설명을 하는 것이 본 글의 목적임.
해당 연구는 다른 연구하는 반고닉의 협조를 받아서 이루어짐.
본 글은 연구는 소녀전선 2.0400버전 기준으로 작성 되었으며,
전투 시작 시 더미 수가 적어 해상도가 줄어드는 경우는 코드상 설정된 좌표 값과 어긋나는 결과가 나오기에 버그라고 판단해서
해상도가 줄어들지 않는, 즉 전투 시작 시 5더미 유닛이 존재하는 상황을 기준으로 작성이 됨.
2. 기존 연구의 좌표계

기존 좌표계에서는 키패드 1번 위치의 아군 좌표를 (-2,-0.123)으로 설정하고 그곳을 기점으로해서 x는 각 +2.4,+4.8, y는 각 +4.2,+8.4만큼 떨어진 9개의 점에 아군이 배치된다고 설명을 했었다.
또한 적군은 정수값의 위치에 배치가 되며, 아군의 이동 중 사거리는 초기 좌표 기준 전열 유닛의 x좌표 + 6인 8.8 위치까지 닿으며, 전열에 유닛이 있을 경우 여기서 2만큼 사거리가 더 늘어난다고 설명을 하였다.
3. 반례
하지만 실제로는 몇몇 반례가 존재하는데 대표적인 반례는 아래와 같다
1) 넉백 가능 한계 거리의 문제점
넉백에는 여러가지 넉백 가능 조건이 있는데
그중에 범위형이 아닐 경우, 넉백 가능 한계 거리라는 것이 존재한다.
이 거리 밖에 있으면 범위형이 아닐 경우 어떤 일이 있어도 넉백이 발생하지 않는데
코드상으로 이 넉백 가능 한계 거리는 전열을 비운 아군 이동 중 사거리보다 -1만큼 떨어진 위치에 고정 되어있다.(배치도 기준 x=7.8)

배치도상에서 이를 기존 좌표계 기준으로 나타내면 위와 같음. 위는 0-3의 9471전투력의 부대(ID = 238) 파란색 선은 넉백 한계 거리(x=7.8)
위 배치도에서 적의 위치는 적이 다가와서 멈추는 실제 공격 위치를 나타낸 것임.
여기서 빨간색 점으로 나타난 4마리의 리퍼는 아군 넉백 한계 거리 내에 있고 따라서 넉백이 가능해야만 한다.
하지만 실제로 시작부터 전열에 샷건을 꽉꽉 배치하고 넉백 테스트를 해보면 위에서 두 번째 리퍼 말고는 넉백이 되지 않는 현상을 확인할 수 있다.
따라서 위에서 두 번째 리퍼를 제외한 나머지는 실제로 넉백 한계 거리 밖에 있다고 볼 수 있음.
물론 저 넉백 한계 거리 자체가 틀렸을 가능성이 있지만, 코드상 넉백 한계 거리는 전열을 비운 기준 이동 중 아군 사거리와 1만큼 차이가 나기에
넉백 한계 거리 값이 틀려서 바꾸게 될 경우, 아군 사거리 역시 자동으로 바뀌어야하므로 여전히 문제가 생기게 되어버린다.
2) 가장 가까운 대상을 공격하는 적 유닛의 타게팅(1) - 아군 인형 좌표의 오차
프라울러는 "실제 거리가 가장 가까운 적"을 타겟으로 노리는 유닛임.
따라서 "X축 거리가 가장 가까운 적"을 노리는 유닛들과 다르게 스킬창 순 타게팅과 상관 없이 실제 대상을 쉽게 예측할 수 있다.

위 짤은 2-2의 403전투력 프라울러(ID = 56).
기존 좌표계대로라면 프롤러의 y값은 2, 아군 전열 아래 유닛의 y값은 -0.123, 아군 전열 중간 유닛의 y값은 4.077.
프롤러와 아래 유닛의 y값 차이는 2.123, 중간 유닛과의 차이는 2.077로 x축 거리가 동일한 점을 생각했을때 중간 유닛과의 거리가 더 가까운 점을 알 수 있음.

하지만 실제 테스트에서는 기존 배치도상 거리가 조금 더 먼 하단의 사이가를 노리는 모습을 볼 수 있다.
아군 전체 배치가 상대적으로 조금 더 위에 있다는 것을 알 수 있음. 기존 배치도 좌표계와 어긋나는 것을 확실하게 보여주는 예.
3) 가장 가까운 대상을 공격하는 적 유닛의 타게팅(2) - 도발요정 등 소환물 위치의 오차

위 기존 좌표계 기준 배치도의 경우, 도발요정 드론의 좌표가 (4, 3.5)로 설정이 되어있는데
이는 기존 중국 좌표계 글 작성자가 옛날에 만들었던 철혈 시트 초안(엑셀본)에 적용 되어있던 값을 옮긴것임.
이 값에 따르면 y = 1인 사거리 4의 프라울러는 도발요정 드론이 먼저 사거리에 닿게 되고, 실제 거리 기준으로 대상을 판단하다보니 당연히 도발요정 드론을 우선 공격해야함

하지만 실제 테스트를 거쳐보면 y = 1에 위치한 프라울러가 도발요정 드론이 아닌 키패드 기준 3번 위치에 존재하는 유닛을 공격하는 것을 알 수 있음.
위 짤은 8-2의 12231 전투력의 프라울러를 대상으로 한 테스트. (ID = 1182)
따라서 도발요정 드론의 위치 역시 현재 틀린 상태라고 볼 수 있다.
다른 클로에 등 기타 소환 계통 요정 역시 마찬가지
4. 대안 이론
이 대안 이론은 코드 분석과 전투 시뮬레이터 조정을 통해 실험을 거친 결과를 정리한 것이기에 근거를 달기는 힘든 부분이 있는데,
기존 이론에도 그런쪽으로 근거는 따로 없었으니 대안 이론을 살펴보고 이전 이론에서 나타난 오차가 발생하는지 살펴보도록 하자.
1) 기존 이론과의 공통 부분
(1) 아군의 3*3 타일 내 거리는 2.4*4.2만큼 떨어져 있다.
-이는 코드상으로 확인 가능한 부분
(2) 아군 유닛 및 철혈들이 존재하는 위치는 점으로 간주된다.
-2)에서 추가적인 설명을 할 것
(3) 대기 중 사정거리가 이동 중 사정거리보다 길다.
-사거리에서 부연할 것
(4) 아군 및 적의 이동은 프레임당 단위 이동으로 이루어진다.
-즉 적이 사거리 내에 들어왔다고 멈추는 것이 아니라 단위 이동 후, 사거리 내에 유닛이 있는지 체크를 한다는 뜻임. 이 점을 고려하지 않을 경우 계산과 다른 결과가 나올 수 있기 때문에 매우 중요한 부분.
2) 실제 좌표와 더미 좌표
우선 좌표계를 이해하기전에 유닛의 '실제 좌표'와 '더미 좌표'에 대해 이해를 할 필요가 있다.
유닛의 '실제 좌표'는 배치도 등 전투 중에서 해당 유닛이 실제로 어느 지점에 존재하는지를 의미함.
유닛의 '더미 좌표'는 해당 유닛의 더미들이 '실제 좌표' 기준으로 얼마나 떨어진 위치에 존재하는가를 의미함.
'실제 좌표'의 경우, 실제 적과 아군이 대상이 사거리 내에 들어왔는지 감지할 때 사용하는 좌표이며, 해당 위치에 더미가 존재하지 않더라도 범위형 스킬의 영향을 받는다. 또한 메인 더미가 사용하는 스킬 등의 좌표 계산에서 기준 좌표가 되기도 함.
'더미 좌표'의 경우, '실제 좌표'와 달리 사거리 감지에 전혀 영향을 미치지 못한다. 또한 고정된 '실제 좌표'와 달리, 현재 더미가 존재하는 좌표에 따라 범위형 스킬의 적용 범위가 변동된다. 모든 더미가 스킬을 사용하는 경우의 좌표 계산에서 더미 각각이 스킬의 기준 좌표가 되기도 한다.
아래에서는 아군의 '실제 좌표' 기준으로 더미들이 어디에 생성되는지를 우선 확인할 것임.
(1) 아군의 경우

아군의 경우는 전투 시작 시 유닛이 1더미인 경우와 2더미 이상인 경우로 나뉜다.
5더미 유닛을 보고 '실제 좌표'가 삼각형 배치의 정 중앙 부분이라고 생각할 수 있으나, 실제로는 맨 앞부분을 기준으로 > 모양으로 더미들이 배치가 된 형태.
1더미인 경우에는 실제 좌표 기준점에서 x축으로 -0.75만큼 이동한 곳에 유닛이 생성된다. : (-0.75, 0)
2더미 이상인 경우에는 1 → 5 순서로
1 : (0, 0)
2 : (-1.5, -1)
3 : (-1.5, 1)
4 : (-0.75, -0.6)
5 : (-0.75, 0.6)
에 각각 더미가 생성되며 피해를 입고 소멸 될 경우, 역순으로 더미가 사라지게 된다.
(2) 적군의 경우

적군의 경우에는 더미 수에 상관 없이 '더미 좌표'가 동일하며, '실제 좌표'를 기준으로 X자 모양으로 배치가 된다.
1 → 5 순서로
1 : (0, 0)
2 : (-1, -1)
3 : (-1, 1)
4 : (1, 1)
5 : (1, -1)
에 각각 더미가 생성되며 피해를 입고 소멸될 경우, 마찬가지로 역순으로 더미가 사라지게 된다.
3) 초기 배치 대안 좌표계

아군의 초기 배치 대안 좌표계는 위와 같다. 키패드 기준 1번 위치의 실제 좌표를 (-1.7, -0.09)로 설정한 상태
기존 (-2, -0.123) 좌표계에 비해 아군의 전체적인 위치가 x축은 +0.3, y축은 +0.033만큼 이동을 시킨 상태.
각 좌표는 아군을 3*3 위치 각각에 배치했을때, 전투 시작 시 '실제 좌표'를 의미함.
4) 사거리
4-1) 아군 사거리와 넉백 가능 한계 거리

아군 사거리의 경우, 오직 아군 진형 중심과 적간의 X축 거리만을 고려한다.
이 아군 사거리는 아군이 대기 중이면 이동 중보다 사거리가 1만큼 늘어나며, 전열에 아군 유닛을 배치하는 경우에 추가로 2만큼 늘어난다.
초기 배치 기준 x = 8.76가 전열을 비운 기준 이동 중 사거리로 보이며, 아군 후열 실제 좌표 기준으로 +10.46만큼 떨어져 있다.

전열에 유닛을 배치할 경우, 위와 같이 아군 사거리가 2만큼 늘어난다. 이는 대기 중 사거리 역시 마찬가지.
하늘색 선은 넉백 한계 거리를 의미하며 전열을 비운 기준 이동 중 사거리보다 1만큼 아군쪽으로 더 가깝다.
따라서 넉백 한계 거리는 아군의 배치나 이동 등과 상관없이 아군 진형에서 고정된 거리를 유지하고 있음.
범위형 넉백이 아닌 경우에는 넉백 한계 거리 밖에 유닛이 있을 경우에 대상을 밀쳐내지 못하게 된다.
이 넉백 가능 한계 거리는 해당 거리보다 뒤로 넉백을 하지 못한다는 뜻이 아니라, 해당 거리 안에 있어야만 넉백이 발동된다는 의미.
넉백 발동 가능 유무의 차이지 그 뒤에까지 밀려지지 않는다는 뜻이 아니니 주의.
아군은 사거리 내에 타게팅 가능한 대상이 없을 경우 제대 이동을 하게 되며
이동 중에 타게팅 가능한 적의 실제 좌표(일반적으로 X모양 배치 중 중앙 더미)가 사거리보다 안에 들어오게 되면
이동을 멈추고 대기 상태로 바뀌고 사거리가 1만큼 증가하게 된다.
정확히는 대상이 사거리의 경계값이 아닌 경계값보다 안에 들어와야한다.
요약 :
아군의..
..넉백 사거리 = 전열을 비운 이동 중 사거리 - 1
..이동 중 사거리 = 대기 중 사거리 + 1
..전열에 유닛을 둘 경우 = 사거리 + 2
4-2) 적군 사거리

적의 사거리는 아군과 다르게 원형으로 이루어져 있으며,
아군과 마찬가지로 대기 중에 사거리가 늘어나고 아군의 실제 좌표를 감지한다.(>자 배치 기준 앞부분. 1링일 경우에도 기준 좌표 자체는 동일한 위치)
실제로는 패치로 인해 뒤로 넘어간 적을 못 공격하도록 바뀌어서 원형이 아니라 반원형이 되었는데,
일단 이렇게 설명하고 넘어가는 것으로 하자.
대기 중에는 사거리 반지름이 1만큼 늘어나게 된다.
5) 도발요정의 좌표

기존 좌표계에서 쓰이던 도발요정 드론의 좌표 (4, 3.5)를 대안 좌표계에서 그대로 사용할 경우, 여전히 도발요정 드론이 더 가깝게 나오기 때문에 여전히 3에서 나온 반례를 설명하지 못한다.

도발요정 드론의 실제 위치는 초기 좌표계 기준으로 (4, 3.91)라고 보며, 이 경우 3에서 나왔던 반례도 설명 가능하며 좌표계산에 사용되는 다른 내부 값들과도 매칭이 된다.

이외 다른 요정들의 소환물 생성 상대 위치는 위와 같으며, 아군 제대 전체 이동 시, 간격을 유지한 채로 같이 이동한다.
도발요정 : (4,3.91)
클로에(上) : (4.3,6.91)
클로에(下) : (4.3,2.21)
쌍둥이요정(上) : (4,6.91)
쌍둥이요정(下) : (4,1.91)
5. 대안 좌표계를 이용한 반례들에 대한 재검증
기존 좌표계에서 언급한 반례들에 대해 대안 좌표계를 통해 다시금 체크해보자.
반례1) 샷건 넉백 한계거리

대안 좌표계를 적용할 경우, 위에서 두 번째 리퍼만 넉백 한계 거리 안에 위치하게 되므로 반례의 현상을 설명할 수 있음
반례2) 가장 가까운 대상을 공격하는 적 유닛의 타게팅(1) - 아군 인형 좌표의 오차

위는 대안 좌표계를 사용한 움짤. 잘~~~~~~보면 알겠지만 아래의 유닛을 치웠을때, 프라울러가 사알~~~~짝 전진하는 모습을 볼 수 있다.
사거리가 아래쪽 유닛이 더 가까워서 그걸 우선 감지하고 멈추었기 때문.
실제로도 프라울러 y값 = 2, 중간 유닛 y값 = 4.11, 아래 유닛 y값 = -0.09로
프라울러~중간 유닛 = 2.11, 프라울러~아래 유닛 = 2.09로 x거리가 동일하니 아래 유닛이 더 가깝게 나오기 때문에 대안 좌표계를 이용하면 현상을 정상적으로 설명할 수 있다.
반례3) 가장 가까운 대상을 공격하는 적 유닛의 타게팅(2) - 도발요정 등 소환물 위치의 오차

도발요정 관련 이슈 역시 마찬가지로 해결되어서 y = 1인 프라울러가 도발요정 드론 대신 키패드 기준 3번 유닛을 공격하는 현상을 설명할 수 있다.
6. 추가적인 이슈
위 글 내용 중 기존 이론과의 공통 부분에 '단위 이동'에 대한 내용을 간략하게 언급해놨는데 이에 대해서 추가.
소전에서 유닛들이 일반적으로 전진을 할 때, 이는 현재 좌표 + 프레임 당 이동 거리(이속 스텟 기반)와 같은 방식으로 이루어짐.
이로인해 실제 사거리와 유닛들의 좌표를 놓고 적 유닛들이 어느 위치에서 멈추는가를 계산을 했을때,
피타고라스를 이용해 구한 적이 멈추는 예상 위치와 게임상에서 실제로 적이 멈추는 위치간에 차이가 발생함.
이를 살펴볼 수 있는 예시는 1-2E에서 볼 수 있는 전투력 544 유닛(enemy_id : 35).
해당 팀에는 3기의 스카웃(박쥐)과 4기의 프라울러(정찰기)가 있는데
현재 본문에서 소개중인 (-1.7,-0.09)를 기준으로 아군을 모두 전열에 배치한 상태에서
피타고라스 정리를 이용해 y=1, y=3프라울러가 어디에서 멈추느냐를 계산해보면
y=1인 프라울러가 y=3인 프라울러보다 더 먼 곳에서 멈춰야함

따라서 피타고라스 정리를 이용한 좌표값 기준으로
팀 내에 사거리 내 x축 거리가 가장 먼 유닛을 때리는 RF가 존재하고 y=1프라울러, y=3프라울러가 남아있다면
y=1 프라울러를 먼저 때려야함

하지만 실제로는 RF가 y=1인 프라울러가 아닌 y=3인 프라울러를 먼저 공격하는 것을 볼 수 있음.
따라서 y=3인 프라울러가 더 먼 곳에 멈췄기에 (-1.7,-0.09)좌표계에 대한 반례로 지적될 수 있는데

실제로는 y=1프라울러와 y=3프라울러는 단위 이동의 개념 때문에 정확히 동일한 위치에서 멈췄기 때문에 반례가 되지 못한다.

만약 X축 거리가 가장 가까운 적을 노리는 AR을 들고 갈 경우, 위 짤과 마찬가지로 RF와 동일하게 y=3프라울러를 공격하는 모습을 볼 수 있음.
y=1프라울러와 y=2프라울러가 정확히 동일한 위치에 있기 때문에 발생하는 현상.
이와같이 좌표계를 이해하는데 단위 이동의 개념을 기억하는 것은 매우 중요한 사항.
7. 정리
이렇게 기존 좌표계의 오차를 수정한 대안 좌표계를 알아보았음.
물론 반례뿐만 아니라 기존 다른 상황에도 부합하느냐 체크하는 것이 필요하긴한데,
적 좌표계 자체가 정수값인 점과 대안 좌표계에서 바뀐 좌표 수치가 매우 미미한 점을 생각하면 기존 좌표계에서 부합되던 내용들이 역시 대안 좌표계에서도 적용될 것이라 볼 수 있음.
그럼 대안 좌표계가 실제 게임상의 유닛 좌표들과 정확하게 맞아 떨어지느냐? 라고 묻는다면 그것까지는 확언을 하지 못함.
실험 자체는 한 반고닉의 협조를 받아 내부 코드 분석과 전투 시뮬레이터 실제 검증 등을 하며 이루어졌는데
확실하게 체크 가능한 코드와 시뮬을 이용한 스킬들의 버프 영향력 범위 등을 조정하면서 좌표를 좁혀나가는 방식을 사용하였음.
그러다보니 실제 인게임상의 기준이 되는 좌표를 바탕으로 값들을 구한 것이 아니라 오차가 있을수도 있다.
하지만 이전 좌표계보다 더 정확하고, 현재 소전에 나타나는 대부분의 현상을 설명할 수 있을거라고 생각을 함.
20191202 추가)
연구 및 글 작성 중에 의문을 가졌던 부분들을 새로운 아이디어로 해결을 하여서 좌표를 정정, 반영을 해놨다. 위에 정리에서는 오차가 있을수도 있다고 적었으나, 새로운 아이디어를 바탕으로 계산한 값들이 코드 등 좌표값에 사용되는 여러가지 값들과 맞아 떨어지는 것을 보아 충분히 정확하다고 생각을 함.
혹시 반례를 찾게되면 덧글로 남겨주면 됨
빠진 것이나 수정할 것이 있으면 나중에 추가할 것
------------------------------------------------------
'19.12.01.21:00.수정1)
-전체적인 아군 x축 좌표 정정
: x축 값이 존나 뭔가 찜찜했는데, 테스트 당시 이속을 0으로 만들때 실수로 슈트 대신 방탄판을 장착하는 바람에 단위 이동이 발생해 0.03정도의 좌표 오차가 있었음. 재검증으로 좌표 수정. 이미지의 경우 미미한 차이고 결과에 영향을 주지 못하기 때문에 실제 좌표값이 입력된 경우를 제외하고 이미지의 변경은 없음. 즉 (-1.67,-0.09)에서 (-1.7,-0.09) 좌표계로 정정.
'19.12.03.17:15.수정2)
-실제 좌표와 더미 좌표 이미지를 가독성 좋게 수정. 도발요정 드론 등 요정들의 소환물 위치 정보 추가.
'19.12.07.22:00.수정3)
-단위 이동의 개념에 대한 설명 및 발생 가능한 오차에 대한 설명 추가. 이동과 관련된 글은 언젠가 시간이 나면 따로 쓸 예정.
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.