결과창 딜량이 마이너스로 뜨는 이유
확전처럼 적 체력이 매우 높은 콘텐츠를 오래 플레이하다 보면 미션 결과창의 딜미터가 마이너스로 표시되는 경우가 있다. 화면이 고장 났거나 표기 오류가 난 게 아니다. 이 현상은 게임이 딜량 수치를 저장하는 방식에서 비롯된 전형적인 프로그래밍 버그, 이른바 "정수 오버플로우"다.
컴퓨터 프로그램은 숫자를 저장할 때 정해진 크기의 상자(변수)를 쓴다. 디비전2의 딜미터는 이 상자로 32비트 부호 있는 정수(signed 32-bit integer)를 사용하는 것으로 확인된다. 이 상자에 담을 수 있는 최댓값은 21억 4,748만 3,647(2,147,483,647)이다. 미션 한 판에서 캐릭터가 입힌 누적 데미지가 이 값을 넘어서는 순간, 상자에 더 이상 숫자가 들어가지 않고 자리가 부족해 값이 반대편 끝으로 튕겨 나간다. 그 결과 딜량이 갑자기 마이너스로 뒤집혀 표시된다. 이런 현상이 디비전2만의 특이 사례는 아니다. 워프레임을 비롯한 다른 게임에서도 누적 데미지나 체력 수치가 비슷한 저장 한계를 넘으면서 마이너스로 표시되거나 값이 뒤집히는 사례가 여러 차례 보고된 바 있다.
어떤 상황에서 21억이라는 벽을 넘기기 쉬운가
확전 10단은 적 체력 자체가 일반 난이도의 5배 이상까지 스케일링되기 때문에, 보스 한 마리를 처치하기까지 필요한 총 딜량이 기본적으로 20억 단위를 훌쩍 넘어가는 경우가 많다. 즉 마이너스 딜량은 특별히 오래 끌거나 극단적으로 플레이해야만 나오는 현상이 아니라, 확전 10단이라면 애초에 임계값 근처에 걸쳐 있는 경우가 흔하다는 뜻이다.
다만 직업 성향에 따라 차이는 있다. 오크나 터렛, 시커마인처럼 스킬 위주로 딜을 넣는 빌드는 스킬 자체의 데미지 배율이나 발동 빈도에 한계가 있어서 오히려 21억을 넘기기가 상대적으로 쉽지 않은 편이다. 반면 최근에는 방어보다 공격 스탯을 극단적으로 끌어올리는 이른바 "극공" 셋팅을 하는 유저들이 많아졌는데, 이런 세팅에서는 무기 기본 데미지 자체가 워낙 높게 잡혀 있어서 확전 10단 보스 한 판만 클리어해도 21억을 넘기고 마이너스로 찍히는 일이 어렵지 않게 발생한다.
딜미터는 애초에 왜 상한선이 있는가
일반적인 게임 개발에서 데미지처럼 계속 누적되는 수치는 대부분 32비트 정수로 설계된다. 32비트 정수는 저장 공간을 적게 차지하면서도 웬만한 상황에서는 충분히 큰 수를 담을 수 있어서, 굳이 더 큰 용량의 64비트 정수를 쓸 이유가 없다고 판단하기 때문이다. 실제로 한 판의 미션에서 21억이 넘는 데미지를 누적으로 넣는 상황은 개발 당시 기준으로는 예외적인 극단값이었을 가능성이 높다. 문제는 시간이 지나며 유저들의 빌드가 고도화되고, 확전 10단 같은 초고난도 콘텐츠가 추가되면서 이 "예외적인 극단값"이 실제로 자주 발생하는 상황이 되어버렸다는 점이다. 개발 당시 설계 기준과 현재 유저들의 실제 플레이 사이에 간극이 생긴 셈이다.
마이너스 값을 실제 딜량으로 환산하는 방법
결과창의 마이너스 딜량은 표시된 값에 42억 9,496만 7,296(2의 32제곱)을 더하면 실제 누적 딜량이 나온다. 32비트 부호 있는 정수는 약 -21.47억부터 +21.47억까지를 표현할 수 있는데, 누적 딜량이 +21.47억을 넘어서는 순간 값이 반대편 끝인 -21.47억 근처로 튕겨 나가고, 이후 딜을 더 넣을수록 마이너스 값은 0을 향해 줄어드는 방향으로 움직이기 때문이다. 결과창의 마이너스 값은 결국 "실제 딜량에서 42억 9,496만 7,296을 뺀 나머지"인 셈이므로, 반대로 더하면 원래 값이 복원된다.
500M 단위로 환산하면 다음과 같다.
| 결과창 표시값 | 실제 누적 딜량 | 약 (억 단위) |
|---|---|---|
| -500M | 3,794,967,296 | 약 37.95억 |
| -1,000M | 3,294,967,296 | 약 32.95억 |
| -1,500M | 2,794,967,296 | 약 27.95억 |
| -2,000M | 2,294,967,296 | 약 22.95억 |
| -2,147M(한계 직후) | 2,147,967,296 | 약 21.48억 |
표에서 확인할 수 있듯, 마이너스 값이 0에 가까울수록(예: -500M) 실제로는 더 많은 딜을 넣은 것이고, -2,147M처럼 절댓값이 클수록 오버플로우가 막 시작된 시점이라 실제 딜량은 임계값인 21.47억에 가깝다. 마이너스 숫자의 절댓값이 작을수록 실제 딜량은 더 크다는, 직관과는 반대되는 관계다. 표에 정확히 맞는 값이 없다면 같은 방식으로 직접 계산하면 된다. 예를 들어 -1,750M이 떴다면 여기에 4,294,967,296을 더한 2,544,967,296, 즉 약 25.45억이 실제 누적 딜량이다. 이 계산은 오버플로우를 한 번만 넘긴 경우에 유효하며, 43억을 넘어 두 바퀴째 순환한 극단적인 상황이라면 여기서 다시 한 번 4,294,967,296을 더해야 한다. 다만 미션 한 판에서 43억 이상을 누적하는 상황은 확전 10단에서도 흔치 않다.
같은 미션을 함께 돈 파티원끼리 결과를 비교할 때도 이 원리가 유용하다. 마이너스 값의 절댓값이 작은 쪽이 실제로는 더 많은 딜을 넣은 것이므로, 겉보기 숫자만 보고 판단하면 순위가 뒤바뀌어 보일 수 있다. -500M을 기록한 딜러와 -1,500M을 기록한 딜러가 있다면, 실제로는 -500M 쪽이 약 10억 더 많은 딜을 넣은 것이다. 정확한 순위를 가리고 싶다면 표시된 숫자를 그대로 비교하지 말고 반드시 위 공식으로 환산한 뒤 비교해야 한다.
가끔 22억을 넘겨도 마이너스가 뜨지 않는 이유
여기서부터는 확인된 사실이 아니라 추측이라는 점을 먼저 밝힌다. 21.47억이라는 한계를 넘기면 항상 예외 없이 마이너스로 뒤집혀야 정상이지만, 실제로는 2,400M(24억) 같은 22억 이상의 값이 마이너스 없이 그대로 표시되는 경우도 목격된다. 이는 앞서 설명한 "21.47억을 넘으면 무조건 마이너스가 뜬다"는 단순한 설명만으로는 완전히 들어맞지 않는 사례다.
가능성 있는 추측은 몇 가지로 나눠볼 수 있다. 하나는 결과창에 뜨는 수치가 항상 같은 성격의 집계가 아닐 수 있다는 것이다. 미션 전체 누적 딜과 스킬별·무기별 하위 집계가 서로 다른 변수를 쓰고 있다면, 22억을 넘긴 값이 어느 집계에 해당하느냐에 따라 오버플로우 한계에 걸리는지 여부가 달라질 수 있다. 다른 하나는 오버플로우가 걸리는 시점의 문제로, 실시간으로 값이 계속 더해지다가 특정 연산 순간에 한계를 넘느냐, 아니면 이미 계산이 끝난 결과값이 한 번에 표시되느냐에 따라 결과가 달라질 가능성이다. 마지막으로 워프레임 등 유사한 오버플로우 버그를 가진 다른 게임에서도 같은 캐릭터, 같은 수준의 데미지에서 오버플로우가 걸릴 때도 있고 걸리지 않을 때도 있는 불규칙한 사례가 보고된 바 있는데, 이는 오버플로우 처리가 코드 내부 여러 지점에서 저마다 다르게 구현되어 있어 일관성이 없을 가능성을 시사한다.
결국 "21.47억을 넘기면 100% 마이너스가 뜬다"는 규칙보다는 "21억 근처에서 메모리·변수 처리 방식의 결함으로 간헐적으로 값이 깨진다"는 쪽이 실제 현상에 더 가까운 설명으로 보인다. 다만 이는 우비소프트가 내부 로직을 공개한 적 없는 영역이라 위 세 가지 모두 확정된 사실이 아니라 정황상 가능성 있는 추정에 그친다는 점을 감안해야 한다.
정리
확전 10단 이상에서 결과창 딜량이 마이너스로 뜬다면 계정이나 캐릭터에 문제가 생긴 게 아니라, 21억이라는 저장 한계를 이미 넘어선 강력한 딜을 넣었다는 뜻으로 받아들이면 된다. 정확한 딜량이 궁금하다면 표시된 마이너스 값에 4,294,967,296을 더해 환산할 수 있고, 절댓값이 작은 마이너스 값일수록 실제로는 더 큰 딜량이라는 점만 기억하면 파티원 간 비교도 어느 정도 가능하다. 다만 22억을 넘겨도 정상 표시되는 사례처럼 이 버그가 항상 같은 조건에서 똑같이 발생하지는 않으며, 그 정확한 이유는 아직 추측의 영역으로 남아 있다.
세 가지로 요약하면 다음과 같다. 첫째, 마이너스 딜량은 32비트 정수 저장 공간의 한계(약 21.47억)를 넘어서면서 발생하는 오버플로우이지 캐릭터나 계정의 오류가 아니다. 둘째, 표시된 마이너스 값에 4,294,967,296을 더하면 실제 누적 딜량을 역산할 수 있으며, 이 값은 0에 가까울수록 실제 딜량이 더 크다. 셋째, 22억 이상에서도 간혹 정상 표시되는 사례가 있다는 것은 오버플로우가 항상 같은 조건에서 일관되게 발생하지 않는다는 뜻이고, 그 정확한 원인은 우비소프트가 밝힌 바 없어 확정할 수 없다. 이 현상 자체가 수정될 조짐은 보이지 않으므로, 확전 10단 고데미지 빌드를 쓰는 유저라면 당분간 이런 표시 방식을 감안하고 결과창을 참고 자료 정도로만 받아들이는 편이 마음 편하다.
Playstation KOR Clan : High Table Korea by estlauder
#디비전2 #TheDivision2 #확전10단 #딜미터버그 #정수오버플로우
