---
title: "제다이 아카데미 소스코드에 남아 있던 2000년대 게임 개발자의 분노"
published: 2026-05-19T21:15:03.000Z
canonical: https://jeff.news/article/2943
---
# 제다이 아카데미 소스코드에 남아 있던 2000년대 게임 개발자의 분노

Raven Software가 2013년에 공개한 Jedi Outcast와 Jedi Academy 소스코드에는 당시 내부 개발 코멘트가 거의 그대로 남아 있었고, 그 안에는 Quake 3 엔진 위에서 복잡한 광선검 전투와 AI, 애니메이션, 오디오, Win32 도구를 억지로 굴리던 흔적이 가득함. 단순 웃긴 욕설 모음이 아니라, 오래된 게임 엔진을 제품 요구사항에 맞춰 비틀어 쓰던 현장의 기술 부채를 보여주는 타임캡슐에 가깝다.

- Raven Software가 2013년에 공개한 Jedi Outcast와 Jedi Academy 소스코드가 다시 화제가 됨
  - 당시 Disney가 Lucasfilm을 인수하고 LucasArts가 문을 닫던 시기라, 개발자들이 자기 작업물이 영영 창고에 박힐까 봐 급하게 코드를 온라인에 풀었다는 배경이 있음
  - 문제는 급하게 공개하다 보니 내부 개발 주석이 정리되지 않았고, 그 결과 2000년대 초반 게임 개발 현장의 날것 그대로가 남아버림

- 가장 큰 웃음 포인트는 주석에 남은 분노인데, 그냥 욕설 모음이 아니라 기술 부채의 화석에 가까움
  - 세이브 팝업을 최소 1초는 보여줘야 해서 일부러 바쁜 대기 루프를 돌린 코드가 있었고, 개발자는 그 해킹을 다시 해야 하면 버스 앞으로 뛰어들겠다는 식으로 적어둠
  - AI_Jedi.cpp 쪽에는 봇이 포스 파워를 쓰고 3D 맵을 돌아다니게 만들다가 “그냥 점프해”, “그냥 강제로 해” 같은 체념형 코멘트가 남아 있음
  - MP3 디코딩 쪽에서는 엔진 시간이 꼬여 과거 오디오 샘플을 요청하자 “시간 여행이 필요하냐, 그냥 포기”에 가까운 주석도 나옴

- 광선검 전투 시스템은 특히 괴물 같은 코드였던 모양임
  - 핵심 파일로 언급된 bg_saber.c는 광선검 근접 전투를 처리하는 거대한 5천 줄짜리 switch 스파게티에 가깝다고 설명됨
  - Jedi Academy가 높은 숙련도 천장을 가진 멀티플레이 게임으로 기억되는데, 그 기반이 이런 코드였다는 게 묘하게 현실적임

- Quake 3 엔진을 싱글플레이 액션 게임으로 비틀어 쓰던 흔적도 많음
  - Quake 3 엔진은 기본적으로 멀티플레이 구조라 모든 것이 client 취급을 받았고, 이걸 싱글플레이 캠페인과 NPC 시스템에 맞추려다 이상한 충돌 버그가 생김
  - NPC끼리 빠르게 부딪히면 서로 죽는 문제를 제대로 고치기보다, 플레이어가 아닌 client끼리는 충돌 피해를 안 받게 하는 식으로 우회한 사례가 소개됨

- 3D 수학과 애니메이션 쪽도 만만치 않음
  - G2_bones.cpp에서는 팔다리 절단을 위한 커스텀 스켈레탈 애니메이션 시스템을 다루다가 관절 각도를 수동으로 덮어써야 했던 흔적이 나옴
  - g_client.cpp에는 마우스 yaw에 따라 플레이어 척추를 돌리려다 히트박스나 모델이 망가지는 문제를 겪은 코멘트가 남아 있음
  - r_surface.cpp의 내부 모델 뷰어 쪽에서는 3D 행렬 변환과 surface math에 질린 개발자가 수학 코드 자체를 포기하는 듯한 주석을 남김

> [!NOTE]
> 이 글의 재미는 “개발자가 욕을 했다”가 끝이 아님. 상용 게임은 출시 일정, 하드웨어 제약, 엔진 구조, 툴 버그가 겹치면 꽤 높은 확률로 이런 식의 임시방편 위에 서게 됨.

- Win32와 MFC 도구 코드에서는 시대감이 더 진하게 남음
  - 내부 ModView 도구에서 문서 제목 표시를 강제로 갱신하려고 아주 노골적인 함수명을 만든 사례가 언급됨
  - Microsoft 프레임워크가 문서 이름과 커맨드라인 스위치를 마음대로 처리해서, 개발자가 포인터를 따로 저장해 제목을 다시 덮어쓰는 식의 우회로를 만들었다고 함

- 하드웨어와 데이터 호환성 문제도 당시 개발자의 스트레스를 잘 보여줌
  - ATI 그래픽카드가 별 이유 없이 GL_STACK_OVERFLOW를 보고하는 경우를 예외 처리했다는 주석이 나옴
  - Lucas 쪽 데이터에 비ASCII 문자가 많이 들어와서 이를 보정해야 했고, TCHAR 버전은 컴파일이 안 된다는 식의 불평도 남아 있음
  - `MAX_STRING_ENTRIES 4096` 같은 하드코딩에도 “그래, 하드코딩이다. 신경 안 쓴다”는 식의 체념이 붙어 있음

- 그래도 이 코드가 완전히 흑역사만은 아님
  - Jedi Academy는 지금도 광선검 전투 감각과 멀티플레이 숙련도로 회자되는 게임임
  - OpenJK 팀이 이 스파게티를 정리하고 유지하면서, 당시 상용 코드가 커뮤니티 보존 프로젝트로 이어진 사례가 됨

---

## 기술 맥락

- 이 코드베이스에서 핵심 선택은 Quake 3 Engine 위에 Jedi Academy의 복잡한 액션 게임플레이를 얹은 거예요. 왜냐하면 새 엔진을 만드는 것보다 검증된 렌더링·네트워크·툴 체인을 활용하는 편이 출시 일정에 훨씬 유리했을 가능성이 크거든요.

- 대신 비용은 엔진의 원래 가정과 게임 요구사항이 계속 충돌하는 형태로 나타나요. 멀티플레이 FPS용 구조에 싱글플레이 NPC, 광선검 근접전, 절단 애니메이션, 차량, 포스 파워를 붙이면 예외 처리가 자연스럽게 늘어날 수밖에 없어요.

- 주석에 보이는 욕설은 단순한 감정 배설이라기보다 “왜 이 코드가 이렇게 생겼는지”를 알려주는 운영 기록에 가까워요. 세이브 팝업을 일부러 기다리게 하거나, NPC 충돌 피해를 조건문으로 막는 코드는 깔끔한 설계보다 당장 게임이 깨지지 않게 하는 선택이었을 거예요.

- OpenJK 같은 프로젝트가 의미 있는 이유도 여기에 있어요. 출시용 코드는 완벽한 교과서가 아니라 당시 제약의 결과물이고, 오픈소스 커뮤니티는 그 위에서 동작 보존과 정리를 동시에 해내야 하거든요.

## 핵심 포인트

- 2013년 Disney가 Lucasfilm을 인수하고 LucasArts가 정리되던 시점에 Raven Software 개발자들이 Jedi Outcast와 Jedi Academy 소스코드를 공개함
- 갑작스러운 공개였기 때문에 내부 주석이 정리되지 않았고, 광선검 전투, 세이브 UI, AI, 충돌 처리, 오디오 버퍼, Win32 도구 관련 분노 섞인 코멘트가 그대로 남음
- 핵심 전투 파일인 bg_saber.c는 광선검 근접 전투를 거대한 5천 줄짜리 switch 스파게티처럼 처리했다는 언급이 나옴
- OpenJK 팀이 이후 이 코드를 정리하고 게임을 계속 살려 왔다는 점도 함께 언급됨

## 인사이트

이 글은 웃긴 욕설 주석 모음처럼 보이지만, 실제로는 레거시 엔진 위에서 복잡한 게임플레이를 구현할 때 어떤 식으로 임시방편이 누적되는지 보여주는 좋은 사례임. 특히 게임 개발자나 오래된 C/C++ 코드베이스를 만지는 사람이라면 웃다가 갑자기 표정이 굳는 포인트가 많다.
