Orbital Defense — 지구를 지켜라, 궤도 위의 전략
나선 궤도를 따라 접근하는 적 함선을 막기 위해 5종의 방어 위성을 배치하는 궤도 타워 디펜스. 밸런스와 전략 설계 과정을 공유합니다.
시작 — 타워 디펜스를 우주에 올리면
타워 디펜스 장르는 오랜 역사를 가지고 있습니다. 적이 일직선 경로를 따라 오고, 타워를 세워 막는 구조. 단순하지만 깊은 전략성이 매력입니다.
이 장르를 우주 궤도 위로 올리면 어떨까 하는 생각이 출발점이었습니다. 직선이 아닌 곡선 경로, 고정이 아닌 공전하는 타워, 그리고 중력이라는 변수. Orbital Defense는 이 세 가지 차별점에서 시작되었습니다.
궤도 시스템 — 케플러가 만든 전장
게임의 가장 큰 특징은 동심원 궤도 5개로 이루어진 전장입니다. 안쪽 궤도일수록 빠르게 공전하는데, 이건 실제 케플러 법칙을 반영한 것입니다.
const angularSpeed = BASE_SPEED / Math.sqrt(radius / innerRadius);
안쪽 궤도의 타워는 빠르게 돌기 때문에 넓은 영역을 커버하지만, 같은 적에게 오래 사격하기 어렵습니다. 바깥 궤도의 타워는 느리게 돌지만 적이 사정거리에 더 오래 머뭅니다. 어디에 뭘 배치하느냐가 전략의 출발점입니다.
적도 마찬가지입니다. 외곽 궤도에서 스폰된 적 함선은 나선형으로 안쪽 궤도를 향해 접근합니다. 한 바퀴 돌 때마다 조금씩 안쪽으로 파고드는 셈입니다. 중앙의 지구에 도달하면 HP가 깎이고, HP가 0이 되면 게임 오버입니다.
밸런스의 핵심 — 경우의 수와의 싸움
타워 디펜스에서 가장 어려운 건 밸런스입니다. 타워 5종, 적 5종, 궤도 5개, 업그레이드 3레벨 — 조합의 수가 기하급수적으로 늘어납니다.
궤도별 에너지 예산
초기에는 궤도당 타워 개수를 제한했습니다. 하지만 비싼 타워 1개와 싼 타워 3개가 같은 제한을 받는 건 불공평했습니다. 그래서 궤도별 에너지 예산 시스템을 도입했습니다.
| 궤도 | 예산 | 특징 |
|---|---|---|
| 1 (최내곽) | 60 | 좁은 공간, 빠른 공전 |
| 2 | 80 | |
| 3 | 100 | 균형 잡힌 중간 궤도 |
| 4 | 120 | |
| 5 (최외곽) | 140 | 넓은 공간, 느린 공전 |
레이저 위성(비용 20)은 최내곽에 3개까지 배치할 수 있지만, 중력 앵커(비용 45)는 1개만 가능합니다. 이 제한이 "어디에 뭘 놓을까"라는 고민을 만들어냅니다.
적의 다양성
5종의 적은 각각 다른 대응 전략을 요구하도록 설계했습니다.
드론은 가장 기본적인 유닛이지만, 수가 많습니다. 레이저 위성의 즉발 공격이 효과적입니다.
코멧은 궤도를 무시하고 직선으로 돌진합니다. 나선형 방어 배치를 무력화하기 때문에, 내곽 궤도에 요격 타워가 필요합니다.
캐리어는 느리지만 체력이 높고, 궤도를 전환할 때마다 미니 드론을 방출합니다. 일찍 처리하지 않으면 전장이 드론으로 가득 찹니다.
스텔스는 평소에는 보이지 않습니다. EMP 위성의 탐지 범위에 들어와야 비로소 드러나는데, 발각되기 전까지 타워에 직접 접근해서 사보타지합니다. EMP 배치가 필수인 이유입니다.
보스는 다른 적과 반대 방향으로 공전합니다. 타워가 한쪽 방향에 맞춰 배치되어 있으면 사각지대가 생기고, 범위 공격으로 여러 타워를 동시에 타격합니다.
전략 요소 — 선택에 무게를 싣다
중력 앵커
가장 고민이 많았던 타워입니다. 데미지가 없는 타워를 플레이어가 만들까? 결론은 "경로 변형"이라는 유일무이한 가치를 부여하는 것이었습니다.
중력 앵커는 주변 적의 이동 경로를 실시간으로 굴절시킵니다. 적이 타워 밀집 구역을 더 오래 통과하게 만들 수 있고, 코멧의 직선 돌진을 우회시킬 수도 있습니다. 잘 배치하면 다른 타워의 효율이 2배 이상 올라갑니다.
물리 엔진에서는 실제 중력 가속도 공식을 사용합니다.
const g = gravityAccel(G, mass, dx, dy, softening);
enemy.x = orbitPos.x + gx;
enemy.y = orbitPos.y + gy;
돌진 모드
각 웨이브에는 제한 시간이 있습니다. 시간이 지나면 "돌진 모드"가 활성화되어 모든 적의 속도가 3배로 증가하고, EMP 스턴도 무효화됩니다. 이건 "수비만 하면 안 된다"는 메시지입니다. 적극적으로 공격해서 시간 안에 정리해야 합니다.
제한 시간 안에 웨이브를 클리어하면 남은 시간에 비례해 에너지 보너스를 받습니다. 빠른 클리어 → 더 많은 자원 → 더 강한 타워 배치라는 선순환을 만들었습니다.
업그레이드 vs 수량
타워는 3레벨까지 업그레이드할 수 있습니다. 레벨이 올라가면 사거리, 데미지, 공격 속도가 모두 증가합니다. 하지만 업그레이드 비용으로 새 타워를 살 수도 있습니다. Lv3 레이저 1개 vs Lv1 레이저 3개 — 어느 쪽이 나을까요? 정답은 상황에 따라 다르고, 그 판단이 게임의 재미입니다.
20웨이브 캠페인 설계
웨이브 구성은 학습 곡선을 의식해서 설계했습니다.
| 구간 | 내용 | 의도 |
|---|---|---|
| 1~3 | 드론만 등장 | 기본 조작 학습 |
| 4~6 | 코멧 첫 등장 | 직선 돌진 대응법 학습 |
| 7~9 | 캐리어 등장 | 고체력 + 미니 드론 대응 |
| 10 | 미니 보스 | 중간 관문 |
| 11~14 | 스텔스 등장, 전 유형 혼합 | EMP 필수성 체감 |
| 15~19 | 다방향 동시 스폰, 대규모 | 본격적인 전략 시험 |
| 20 | 최종 보스 | 클리어! |
캠페인 클리어 후에는 무한 모드가 해금됩니다. 웨이브가 진행될수록 적의 체력, 속도, 수량이 10%씩 증가하며, 얼마나 오래 버틸 수 있는지가 도전 목표입니다.
렌더링 — Canvas + HTML 하이브리드
게임 씬(궤도, 적, 타워, 발사체, 파티클)은 Canvas 2D로 그리고, UI(HUD, 타워 바, 업그레이드 패널)는 HTML+CSS로 구현했습니다. 이 구조의 장점은 명확합니다.
- Canvas: 60fps 애니메이션, 수학 기반 렌더링 (궤도, 중력장 등고선)
- HTML: 접근성, 반응형, i18n 대응이 용이
지구는 단순한 원이 아닌 4개의 대륙 패치 + 구름 + 대기 림라이트를 가진 미니어처 행성으로 표현했습니다. 게임 오버를 피해야 하는 대상에 애착이 생기게 하려는 작은 장치입니다.
사운드 디자인
모든 효과음은 Web Audio API로 순수 합성합니다. 외부 오디오 파일은 하나도 없습니다.
레이저는 사인파 스윕(1000→2000Hz), 미사일은 노이즈 버스트 + 저음 드론, EMP는 와이드 노이즈 + 하이패스 스윕. 각 타워의 공격 사운드가 다르기 때문에, 소리만으로도 전장 상황을 파악할 수 있습니다.
BGM은 긴장감 있는 앰비언트로, 저음 드론 위에 펄스 리듬이 깔립니다. 웨이브가 진행될수록 자연스럽게 긴장감이 올라가도록 설계했습니다.
마치며
Orbital Defense를 만들면서 가장 많이 고민한 건 "공평한 어려움"이었습니다. 플레이어가 져도 "내 전략이 부족했구나"라고 느끼게 하고, 이기면 "좋은 판단이었어"라고 느끼게 하는 것. 운이 아닌 판단으로 결과가 갈리는 게임을 만들고 싶었습니다.
5종의 타워, 5종의 적, 5개의 궤도, 중력이라는 변수 — 이 요소들이 만드는 조합 공간은 넓지만, 그 안에서 최적해를 찾아가는 과정이 타워 디펜스의 본질적인 재미라고 생각합니다. 궤도 위에서 지구를 지키는 당신의 전략을 기대합니다.