레오니스 개발 노트: 요새 위기 연출과 퍽 누적 재설계
개발노트 · 2026-10-08 · GamePool 편집팀
레오니스는 요새(성채)를 지키며 동물 챔피언을 소환해 몰려오는 몬스터를 막아 내는 게임입니다. 하루 사이에 같은 파일을 연달아 다섯 번 고쳤는데, 요새 체력이 바닥날 때의 연출, 등장량, 레벨업 능력, 몬스터 강화가 서로 얽혀 있어서 한 가지를 바꿀 때마다 다음 수정이 정해졌습니다. 그 흐름과 각 숫자를 고른 이유를 변경 기록에서 다시 읽으며 적습니다. 중간에 요청을 잘못 해석한 일도 있어서 숨기지 않고 적었습니다.
출발점: 요새 체력이 30% 아래로 떨어지면
게임에는 이미 “요새 위기” 장치가 있었습니다. 요새 체력이 30퍼센트 아래로 내려가면 경고음과 함께 긴급 호위병이 3체 나오는 단순한 장치였습니다. 문제는 이 순간의 느낌이 약하다는 것이었습니다. 경고음과 문구는 있었지만 화면에 있는 적은 그대로였고, 호위병 3체는 평소 몹 사이에 섞였습니다. 그래서 위기가 한눈에 느껴지도록 연출을 더 넣기로 했습니다.
적 전군 각성: 크기와 능력 +30%
첫 번째로 넣은 것이 적 전군 각성입니다. 위기가 선언되는 순간 화면에 있는 모든 적이 붉은 기운을 두르고 덩치가 커지며 강해집니다. 소스에서는 크기 배율을 0.7배속으로 올려 1.3까지(약 0.43초) 키우고, 충돌 반경, 체력과 최대 체력, 공격력, 이동 속도에 모두 1.3을 곱합니다. 이미 각성한 적은 건너뛰고, 위기 이후에 새로 나오는 적은 처음부터 각성 상태로 등장해서 위기 순간에만 강해지고 끝나는 일이 없게 했습니다.
크기와 체력, 공격, 이동 속도에 같은 1.3 하나를 곱하도록 해서 규칙을 한 줄로 설명할 수 있게 했습니다. 체력과 공격과 속도가 함께 오르니 실제 위협은 30퍼센트보다 훨씬 크게 느껴질 것이라고 판단했고, 그 판단이 맞는지는 아직 더 지켜봐야 합니다. 연출도 함께 붙였습니다. 경고음과 포효, 폭발음, 화면 흔들림 0.6, 그리고 배경음악의 템포를 40퍼센트 올리고 낮은 불협화음과 심장 박동을 얹었습니다. 전투가 끝나거나 새로 시작되면 이 긴장 상태를 곧바로 풀어 주도록 두 군데에 해제 호출도 넣었습니다.
요청을 잘못 해석한 부분
이어서 등장량을 건드렸습니다. 평상시 몬스터 등장량을 1.3배로 올렸고, 요새 위기 때 “등장 속도 2배”를 추가하라는 요청이 있었습니다. 저는 이것을 문자 그대로 받아들여서, 위기가 선언되면 몬스터 출현표가 2배 빠르게 진행되도록 만들었습니다. 평상시 등장량은 출현 간격을 나누는 값으로 구현했습니다. 기존 식이 1.5로 나누던 자리를 1.5에 1.3을 곱한 값(1.95)으로 바꿨고, 간격의 하한 0.55초는 그대로 두었습니다.
그런데 이 요청의 뜻을 다시 확인해 보니 “긴급 호위병 7체 출격”이었습니다. 출현표의 진행 속도를 올리라는 말이 아니라, 위기의 순간에 호위병이 눈에 띄게 많이 튀어나오라는 뜻이었습니다. 속도 2배 구현은 문구를 그대로 옮긴 결과였고, 의미를 확인하지 않은 채 구현한 제 해석 실수였습니다.
바로잡은 방식은 이렇습니다. 위기 때 출현표를 2배로 돌리던 코드를 통째로 없애고, 대신 설정 값 하나(긴급 호위병 수)를 만들어 기본값을 7체로 정했습니다. 이전에는 3체가 0.5초 간격으로 나와 1초면 끝났는데, 이제는 7체가 0.4초 간격으로 2.4초에 걸쳐 쏟아집니다. 출현 위치도 3개 열로 나누어 14씩 어긋나게 배치했습니다. 호위병의 종류는 단계에 따라 달라서, 지역 단계 9 이상이거나 2장 이후에는 엘리트, 5 이상이면 특수형, 그 아래는 근접형입니다. 위기 알림 문구도 “긴급 호위병 7체 출격”으로 숫자가 설정 값에서 바로 나오게 바꿨습니다.
레벨업 능력이 사라지는 문제
여기까지 오자 다른 불편이 눈에 들어왔습니다. 전투 중 경험치가 차면 능력 세 가지 중 하나를 고르는 레벨업이 있는데, 고른 능력이 그 전투가 끝나면 모두 사라졌습니다. 새 단계에 들어가면 다시 처음부터였습니다. 단계를 거듭해도 이전에 고른 선택이 전혀 남지 않는 구조였습니다. 그래서 능력을 세이브에 영구 누적하기로 했습니다.
영구 누적으로 바꾸면 곧바로 수치가 폭주할 위험이 있어서, 능력 11종 모두에 최대 레벨을 두고 1레벨당 효과를 대폭 줄였습니다. 기존에는 한 번 고를 때 결계 반경이 10퍼센트 곱해지고, 공격력이 8퍼센트 곱해지는 식으로 효과가 컸습니다. 새 규칙은 레벨당 더하는 방식입니다. 결계 반경은 레벨당 5퍼센트에 최대 8레벨, 군량(사기 회복)과 기도(신성력 회복)는 레벨당 10퍼센트에 최대 10레벨, 공격력은 6퍼센트에 최대 10레벨, 이동 속도는 4퍼센트에 최대 6레벨, 체력은 6퍼센트에 최대 10레벨입니다. 최대 사기와 최대 신성력은 레벨당 15에 최대 10레벨, 영웅 체력은 5퍼센트에 최대 10레벨, 발리스타는 10퍼센트에 최대 5레벨, 소환 대기시간은 4퍼센트 감소에 최대 8레벨입니다. 이를 모두 합치면 끝까지 모을 수 있는 레벨은 97입니다.
요청에서 직접 정해 준 값은 사기와 신성력 능력을 10레벨까지로 하는 것이었고, 나머지 능력의 최대치는 효과가 겹쳤을 때 극단적으로 강해지지 않도록 제가 정했습니다. 이동 속도 6레벨(+24퍼센트)과 발리스타 5레벨(+50퍼센트)처럼 한 번 쌓이면 체감이 큰 능력은 낮게, 회복 속도처럼 쌓여도 전투를 뒤집지는 않는 능력은 10레벨까지 열었습니다. 최대 레벨에 도달한 능력은 선택지 풀에서 빠지고, 11종을 모두 채우면 레벨업 때 능력 대신 금화 40을 받습니다. 중복되던 능력(기도의 가호와 깊은 기도가 모두 신성력 회복 +15퍼센트)은 하나로 합쳤습니다. 12종이 11종이 된 이유입니다.
화면에 보이는 레벨 숫자도 다시 정의했습니다. 표시 레벨은 영구 누적 레벨의 합에 이번 전투에서 오른 단계를 더한 값이고, 경험치 곡선과 오라 단계는 이번 전투에서 오른 단계만 기준으로 삼았습니다. 이렇게 하지 않으면 누적 레벨이 쌓일수록 경험치 요구량이 계속 커져 단계를 거듭할수록 전투 중 레벨업이 불가능해집니다.
저장하고 적용하는 방식
영구 누적은 저장 방식에서 실수하기 쉬운 부분이라 세 가지를 신경 썼습니다. 능력을 고르는 순간 세이브에 바로 기록해서 전투 도중 창을 닫아도 방금 고른 능력이 남게 했습니다. 세이브를 불러올 때는 각 능력의 레벨을 0에서 최대 레벨 사이로 잘라 내서, 옛 데이터나 손으로 고친 값이 최대치를 넘지 못하게 했습니다. 전투를 시작할 때는 보유한 레벨만큼 각 능력의 1레벨분 효과를 반복해서 적용하고, 전투 중에 고르는 능력은 그 자리에서 1레벨분만 적용합니다. 선택 카드에는 “Lv.3 → 4 / 10”처럼 현재 레벨과 최대 레벨을 같이 보여 줘서, 이 선택이 얼마나 쌓인 상태에서 고르는 것인지 알 수 있게 했습니다.
같은 날 함께 들어간 소리 작업
위기 연출 커밋에는 소리 작업도 같이 들어갔습니다. 아군 챔피언 9종이 공격할 때와 맞을 때 각자 다른 울음소리를 내도록 표를 만들었고, 영웅은 맞을 때의 소리만 따로 두었습니다. 미어캣은 높은 찍찍 소리, 가디언 고릴라는 포효와 발 구르는 소리를 겹치는 식입니다. 같은 소리가 한꺼번에 쌓여 귀가 아프지 않도록 같은 챔피언의 공격 소리는 0.12초, 피격 소리는 0.22초 안에 다시 나오지 않게 막았고, 음높이는 매번 8퍼센트 안팎으로 흔들었습니다. 무기 휘두르는 소리와 타격음도 너무 작아서 크기를 올렸는데, 타격음은 0.13에서 0.24로, 금속 마찰음은 0.12에서 0.2로 높였습니다.
몬스터 40% 강화의 근거
마지막으로 몬스터를 강화했습니다. 퍽이 영구 누적되면 단계가 올라갈수록 아군이 계속 강해지는데 몬스터는 그대로라서, 쌓인 능력 때문에 후반이 시시해질 것이 분명했습니다. 모든 몬스터의 체력과 공격력에 곱하는 배율 하나(1.4)를 만들었습니다. 보스와 관문 수호자도 같은 표를 쓰므로 함께 강해집니다. 이전에 체력 1.3과 공격 1.15이던 보정은 체력 1.82, 공격 1.61로 올랐습니다.
1.4라는 크기를 비교해 보면, 공격력 능력을 끝까지 모았을 때 +60퍼센트, 체력 능력도 +60퍼센트입니다. 몬스터 +40퍼센트는 두 능력을 끝까지 모아야 비로소 앞서는 크기이고, 능력을 거의 못 모은 상태에서는 전보다 확실히 어려워진 숫자입니다. 그래서 퍽 누적 구조와 한 세트로 보아야 하는 변경입니다.
얻은 교훈
이번 작업에서 가장 큰 교훈은 “몇 배”라는 요청을 받으면 무엇이 몇 배인지를 먼저 확인해야 한다는 점입니다. 출현표 진행 속도를 2배로 바꾸는 코드는 작성은 쉬웠지만 의도와는 정반대였고, 직접 플레이해 보고서야 어긋남을 알았습니다. 두 번째는 영구 성장 구조를 넣을 때는 성장 상한과 적 강화를 한 세트로 설계해야 한다는 점입니다. 퍽 누적만 넣고 몬스터를 그대로 두었다면 후반 밸런스는 무너졌을 것입니다. 이 다섯 번의 수정은 모두 같은 날 이어서 진행했지만, 위기 연출에서 시작해 서로의 약점을 메우듯 이어졌고, 지금은 요새가 무너질 때 화면이 한눈에 달라 보이는 상태가 되었습니다.