홈 › 읽을거리 › 개발노트

솔저 러쉬 개발 노트: 넓은 도로와 난이도 조정

개발노트 · 2026-10-08 · GamePool 편집팀

솔저 러쉬는 병사 무리를 좌우로 움직이며 파란 게이트를 골라 지나가고, 몰려오는 적을 쏘며 깃발까지 달리는 게임입니다. 10월 7일에 도로 폭과 무기 해금을 포함한 대규모 개편을 했고, 같은 날 난이도를 다시 올렸으며, 이튿날 화면 위쪽 표시줄이 넘치는 문제를 고쳤습니다. 이 글은 그 과정에서 무엇이 문제였고 어떤 숫자를 어떻게 바꿨는지를 저장소의 변경 기록을 다시 열어 보며 정리한 것입니다. 기억에 의존하지 않고 변경 전후 상수를 하나씩 대조했기 때문에, 적어 둔 숫자는 현재 소스와 맞습니다.

도로를 넓힌 이유와 곧바로 생긴 문제

처음 만든 도로 폭은 9였습니다. 병사는 늘어날수록 해바라기 모양으로 퍼지는데, 그 폭으로는 적 무리를 피해 움직일 여유가 부족하다고 판단했습니다. 그래서 대규모 개편 때 도로 폭을 15로 키웠습니다. 소스 주석에 “적을 피해 움직일 공간을 확보”라고 적어 둔 그대로입니다. 도로 반폭이 4.5에서 7.5가 되었으니 좌우로 움직일 수 있는 거리가 약 1.7배가 된 셈입니다.

문제는 게이트였습니다. 게이트 패널의 가로는 도로 반폭에서 0.25를 뺀 값으로 계산하는데, 도로가 넓어지자 패널 가로가 4.25에서 7.25로 늘었습니다. 세로는 2.5 그대로였고, 글씨를 그리는 캔버스는 256x176 그대로였습니다. 가로세로 비율로 따지면 패널은 7.25 대 2.5, 약 2.9인데 캔버스는 256 대 176, 약 1.45입니다. 캔버스 그림이 패널에 맞춰 옆으로 거의 2배 늘어나 “x2” 같은 글자가 납작하고 뚱뚱하게 보였습니다.

사실 개편 전에도 비율은 완벽하지 않았습니다. 폭 9일 때 패널 비율은 4.25 대 2.5, 즉 1.7이라 캔버스 1.45보다 약 17퍼센트 늘어난 상태였는데, 그 정도는 눈에 띄지 않아 지나갔습니다. 도로를 넓히기 전에는 문제가 아니었던 오차가 두 배 가까이로 커지면서 비로소 보인 것입니다.

캔버스를 256x176에서 512x176로

해결은 단순했습니다. 캔버스 가로를 512로 늘려 패널 비율에 맞췄습니다. 512 대 176은 2.91이고 패널은 2.90이라 사실상 같습니다. 캔버스 가로가 바뀌니 그리는 쪽 코드도 함께 바꿔야 했습니다. 배경 칠하기와 테두리의 좌표, 글자를 놓는 가운데 위치가 모두 256 기준이어서, 중심을 128에서 256으로, 테두리 사각형을 248 폭에서 504 폭으로 옮겼습니다. 글자 크기는 숫자 72px, 아래 이름 34px 그대로 두었습니다. 캔버스가 넓어졌지만 패널 위에서 실제로 보이는 글자 모양은 개편 전과 같은 비율로 돌아왔습니다.

한 가지 실수를 하지 않으려고 신경 쓴 부분은 캔버스 폭만 바꾸고 좌표를 하나라도 놓치는 경우였습니다. 하나라도 놓치면 글자가 한쪽으로 쏠려 바로 티가 나는 부분이라 이 줄들을 한 번에 묶어서 고쳤습니다. 수정 자체는 캔버스 크기 한 줄과 그리기 함수 몇 줄뿐인 작은 변화였고, 게이트 글씨 문제는 여기서 끝났습니다.

“너무 쉬워졌다”는 의견

진짜 문제는 그다음이었습니다. 도로를 넓히면서 적 체력 계산식도 함께 바꿨는데, 개편 직전까지 쓰던 식은 기본값 18에 5배를 곱한 뒤 레벨마다 19퍼센트씩 불어나는 가파른 곡선이었습니다. 새 식은 66에 레벨당 7.5퍼센트를 더하는 완만한 선형 곡선이었습니다. 숫자로 비교하면 차이가 분명합니다. 졸병 체력은 레벨 1에서 90에서 66으로, 레벨 5에서 180에서 86으로, 레벨 10에서 431에서 111로, 레벨 20에서 1,462에서 205로 내려갔습니다. 레벨 10 기준으로 4분의 1 수준입니다.

완만한 체력 곡선은 의도한 설계였습니다. 졸병 하나를 단단하게 만드는 대신 수가 불어나고 거대한 적 하나가 섞이는 방식으로 난이도를 올리려 했기 때문입니다. 그런데 무리 크기 식이 그 역할을 하기에 너무 약했고, 결과적으로 레벨 10 근처에서도 병사 무리가 총을 쏟아붓는 대로 적이 녹았습니다. 너무 쉬워졌다는 의견이 들어온 것이 이 시점입니다.

체력 곡선과 무리 크기를 다시 맞추기

난이도를 올리는 방향은 두 가지 중 하나를 골라야 했습니다. 졸병 체력을 크게 올리는 방법과, 무리 크기를 키우고 특수 적의 비중을 높이는 방법입니다. 처음 설계 의도대로 두 번째를 중심으로 하되 체력도 중간쯤으로 되돌렸습니다. 체력 식은 72에 레벨 10까지 레벨당 13퍼센트 복리로 곱하고, 11레벨부터는 레벨당 6퍼센트씩 더 곱하는 모양으로 바꿨습니다. 결과는 레벨 1에서 72, 레벨 5에서 117, 레벨 10에서 216, 레벨 20에서 413입니다. 처음 식(66, 86, 111, 205)의 약 두 배 높이에 닿았고, 가파른 5배 곡선(431, 1,462)보다는 훨씬 낮은 자리에 둔 셈입니다.

무리 크기는 한 레벨 안에서도 뒤로 갈수록 커지도록 식을 바꿨습니다. 이전 식에서는 레벨 10의 첫 무리가 약 21명, 열 번째 사건의 무리가 약 24명으로 거의 일정했습니다. 새 식에서는 같은 레벨 10에서 첫 무리가 약 12명, 열 번째 사건의 무리가 약 26명입니다. 레벨 20에서는 첫 무리가 약 40명에서 약 22명으로 줄고, 열여덟 번째 사건 무렵의 무리는 약 46명에서 약 76명으로 커집니다. 초반에는 오히려 약간 쉬워지고 후반으로 갈수록 압박이 커지게 해서, 한 레벨을 달리는 동안 긴장이 올라가는 모양을 만들고 싶었습니다.

특수 적 비율도 올렸습니다. 중무장한 브루트(체력이 졸병의 4배)가 나올 확률은 레벨 10에서 8퍼센트이던 것을 12퍼센트로, 상한을 10퍼센트에서 16퍼센트로 높였습니다. 빠르게 달려오는 러너는 모든 레벨에서 20퍼센트이던 고정 확률이 레벨 10에서 30퍼센트, 상한 32퍼센트로 올라갑니다. 거대 병사의 체력 배수는 16에 레벨당 1.8을 더하던 식에서 18에 레벨당 2.4로 바뀌어, 레벨 10에서 졸병 체력의 약 34배가 42배로 올랐습니다. 체력 곡선 변화까지 겹쳐 레벨 10의 거대 병사 체력은 약 3,760에서 약 9,080이 되었습니다.

속도, 포탑, 무기 위력도 같이 손봤습니다

체력과 수만 올리면 단조로워져서 속도도 레벨에 따라 붙게 했습니다. 졸병은 기본 1.5에 레벨당 0.03을 더해 레벨 20에서 2.1까지, 러너는 3.4에 레벨당 0.05를 더해 4.4까지, 거대 병사는 1.05에서 1.15에 레벨당 0.01을 더하는 식으로 바뀌었습니다. 20레벨 이후로는 더 빨라지지 않게 상한을 두었습니다. 거대 병사가 병사를 짓밟는 숫자도 한 번에 5명에서 6명으로 늘렸습니다. 포탑이 총알을 쏘는 간격은 2.4초에서 시작해 레벨마다 0.03초씩 줄고 하한이 1.4초였는데, 지금은 2.0초에서 시작하고 하한이 1.1초입니다.

무기 쪽에서는 해금된 무기가 너무 강해 앞의 변화를 상쇄하고 있었습니다. 샷건의 한 알 위력 배수는 0.5에서 0.4로, 관통포는 연사 배수 0.8에서 0.75로, 위력 1.15에서 1.0으로, 유탄발사기는 연사 0.6에서 0.5로, 로켓포는 0.5에서 0.4로 낮췄습니다. 유탄의 폭발 위력 배수는 7에서 5로, 로켓은 11에서 8로 내렸습니다. 폭발 무기는 무리를 한꺼번에 쓸어 내서 무리 크기를 키운 효과를 가장 크게 지우는 쪽이라 깎는 폭도 가장 크게 잡았습니다(유탄 약 29퍼센트, 로켓 약 27퍼센트).

중기관총수 병과의 해금도 늦췄습니다. 미니건을 든 중기관총수는 처음에는 레벨 3부터 병력 7명마다 한 명씩 승급했는데, 지금은 레벨 5부터 8명마다 한 명입니다. 여기서 사소한 실수도 하나 남아 있습니다. 소스의 상수는 5로 바뀌었는데 같은 줄의 주석에는 “레벨 3부터”라고 옛 숫자가 그대로 남아 있습니다. 동작은 상수를 따르므로 게임에는 문제가 없지만, 개발 노트를 쓰려고 코드를 다시 읽다가 발견했습니다.

봇으로 확인하고, 설명 문구도 맞췄습니다

난이도는 감각만으로 믿기 어려워서, 병사를 자동으로 움직이는 봇 시뮬레이션을 돌려 숫자를 바꾼 뒤의 결과를 확인했습니다. 봇은 절대적인 기준이 아니라 이전보다 확실히 어려워졌는지를 보는 용도였습니다. 시작 병력은 레벨 1에서 5명으로 출발해 레벨 3마다 한 명씩 줄다가 레벨 9부터 2명으로 고정되는 기존 규칙(5에서 2까지)을 유지했고, 이 규칙과 새 체력 곡선이 맞물려 초반에는 여유롭고 중반부터 긴장이 오르는 모양이 되었습니다.

마지막으로 게임 소개 문구를 소스와 대조했습니다. 소개 글에는 브루트 체력이 졸병의 5배라고 적혀 있었는데, 소스의 값은 4배였습니다. 체력 계산식을 바꾸면서 설명 문구는 갱신하지 못한 채 남아 있었습니다. 소개 글의 공략 문구를 소스 기준인 4배로 정정했습니다. 같은 작업에서 상단 진행 막대의 너비를 화면 폭의 60퍼센트에서 38퍼센트로 줄여 표시줄이 넘치던 문제도 고쳤습니다.

이번 작업에서 얻은 판단

첫째, 화면 요소를 키울 때는 그 요소에 딸린 모든 그림 비율을 같이 의심해야 합니다. 도로 폭 하나를 바꿨는데 게이트 글씨가 틀어진 것은, 게이트 패널이 도로 폭에 묶여 있다는 사실을 잊고 있었기 때문입니다. 둘째, 난이도 곡선은 한 번에 크게 바꾸면 방향을 가늠하기 어렵습니다. 체력, 무리 크기, 속도, 무기 위력을 한꺼번에 움직였기 때문에 어느 조정이 체감에 얼마나 기여했는지는 지금도 분리해서 말하기 어렵고, 다음에 손볼 때는 한 번에 한 가지씩 바꿔 보려 합니다. 셋째, 쉬워졌다는 의견은 개편의 의도를 해치는 것이 아니라 숫자가 의도를 못 따라간다는 신호였습니다. 그래서 설계 방향(졸병은 완만하게, 수와 특수 적으로 압박)은 그대로 두고 숫자만 다시 맞췄습니다.

관련 게임 플레이하기

다른 읽을거리

개발노트군단 점령전 연타 배수문, 세 번 고쳐 맞춘 기록군단 점령전의 연타 배수문과 부서지는 벽을 어떤 수치로 세 번 조정했는지, 실패한 두 설정과 최종 상수, 내구도 공식을 소스와 커밋 근거로 되짚은 개발 노트입니다.개발노트게임 소개 문구와 소스가 어긋난 열세 곳 정정 기록게임 소개 문구를 소스 코드와 하나씩 맞춰 보며 바로잡은 열세 가지 사례를 변경 전후 문장, 근거가 된 소스 값, 어긋난 이유, 점검 방식과 함께 적었습니다.개발노트레오니스 개발 노트: 요새 위기 연출과 퍽 누적 재설계위기 시 등장 속도 2배 요청을 잘못 해석해 구현했다가 긴급 호위병 7체로 바로잡은 과정, 퍽 영구 누적과 몬스터 40% 강화의 수치 근거를 정리했습니다.개발노트챔피언 방어전 개발 노트: 3D 번들 한계를 우회한 기록Box3 없이 건물 크기를 재고, Float32BufferAttribute와 AdditiveBlending 없이 연출을 만든 방법, 건설 연출과 공중 몬스터를 구현하며 부딪힌 문제를 정리했습니다.개발노트소리를 직접 합성하며 키운 값들: 긴장 연출과 발사음녹음 파일 없이 코드로 만든 효과음·배경음악 구조와, 레오니스의 긴장 연출·챔피언 울음, 군단 점령전 발사음을 키울 때 바꾼 숫자를 이력으로 정리했습니다.개발노트레오니스 몬스터를 사진 스프라이트로 바꾼 기록레오니스의 몬스터를 도형 그림에서 사진 스프라이트로 바꾼 작업을 SPRITES·SPRITE_CLIPS·SPRITE_H 값과 커밋 시각으로 정리한 개발 노트입니다.