
1985년 컴퓨터로 게임 카메라를 직접 만든다면?
요즘 게임 개발은 Unity나 Unreal Engine 같은 강력한 엔진이 카메라 시스템부터 충돌 처리까지 다 해주잖아요. 그런데 만약 우리에게 64KB 메모리밖에 없는 1982년산 컴퓨터, Commodore 64(C64) 한 대만 주어진다면 어떨까요? 이번에 소개할 글은 바로 그런 환경에서 BASIC 언어 하나로 젤다 스타일의 탑뷰(overhead view) 카메라를 구현하는 과정을 다룬 튜토리얼이에요.
탑뷰 카메라가 뭐냐면, 마치 헬리콥터에서 내려다보는 것처럼 캐릭터를 위에서 바라보는 시점이에요. 옛날 "젤다의 전설"이나 "포켓몬"을 떠올리면 딱이죠. 캐릭터가 화면 끝에 도달하면 화면이 따라 움직이면서 새로운 지역이 나타나는, 그런 방식 말이에요. 지금 보면 별것 아닌 것 같지만, 당시엔 메모리와 CPU 성능이 너무 제한적이라 이걸 구현하는 것 자체가 도전이었어요.
어떻게 동작하는가: 타일맵의 시작
핵심 아이디어는 타일맵(Tilemap) 이라는 개념인데요, 게임 세계를 작은 정사각형 그림 조각들의 격자로 표현하는 방식이에요. 풀 한 칸, 나무 한 칸, 돌 한 칸… 이렇게 미리 만들어둔 그림 조각들을 격자에 배치해서 큰 맵을 만드는 거죠. 레고로 큰 풍경을 만드는 것과 비슷하다고 보면 돼요.
C64에서는 PETSCII라고 하는 문자 기반 그래픽을 활용해요. 화면이 40x25 글자로 이루어져 있는데, 각 글자 위치에 풀, 길, 벽 같은 "문자"를 그려서 맵을 표현하는 거예요. BASIC 코드로 보면 대략 이런 흐름이에요. 먼저 큰 맵을 2차원 배열에 저장해두고, 화면에는 그 일부만 보여줘요. 캐릭터가 화면 가장자리에 가까워지면 보여주는 영역을 한 칸씩 이동시키면서 다시 그리는 방식이죠.
여기서 재밌는 트릭이 등장해요. 매 프레임마다 화면 전체를 다시 그리면 너무 느리거든요. 그래서 화면이 스크롤될 때 새로 나타나는 한 줄(또는 한 열)만 그려주는 식으로 최적화해요. 8비트 시절 개발자들이 어떻게 성능을 짜냈는지 엿볼 수 있는 부분이에요. 또 캐릭터의 좌표는 "월드 좌표(맵 전체에서의 위치)"와 "화면 좌표(현재 보이는 영역에서의 위치)"로 분리해서 관리해요. 이건 사실 지금의 3D 게임에서도 똑같이 쓰이는 개념이거든요.
옛날 기법이지만 여전히 현역인 이유
타일맵과 카메라 분리는 사실 모바일 2D 게임, 인디 게임에서 지금도 표준이에요. Godot, Unity의 Tilemap 시스템, 픽셀 아트 게임을 만드는 Aseprite + LDtk 같은 도구들 전부 이 원리를 그대로 계승하고 있어요. "Stardew Valley"나 "Undertale" 같은 히트작도 결국 이 구조 위에서 만들어진 거예요.
비슷한 레트로 학습 자료로는 PICO-8이라는 "가상 8비트 콘솔"이 유명한데요, 일부러 화면 해상도와 색상, 메모리를 제한해두고 그 안에서 게임을 만들게 하는 환경이에요. PICO-8이 "가짜 레트로"라면 C64 BASIC 튜토리얼은 "진짜 레트로"인 셈이죠. 또 최근 한국에서도 "바이브 코딩"이라는 흐름과 맞물려, AI에게 시키지 않고 직접 한 줄 한 줄 짜보는 학습법이 다시 주목받고 있어요. 이런 옛날 코드를 따라 쳐보는 게 알고리즘과 메모리 감각을 키우는 데 의외로 좋은 훈련이 되거든요.
한국 개발자에게는 어떤 의미일까
당장 실무에 C64 BASIC을 쓸 일은 없을 거예요. 하지만 이런 자료가 가치 있는 이유는, 현대 프레임워크들이 "마법처럼 자동으로" 해주는 일들을 직접 손으로 풀어보면 비로소 그 원리가 보이기 때문이에요. 화면 스크롤이 왜 끊겨 보이는지, 왜 viewport와 world 좌표를 따로 두는지, 왜 dirty rectangle 기법이 필요한지… 이런 질문들에 대한 답이 이 작은 BASIC 코드 안에 다 들어있거든요.
특히 게임 개발에 관심 있는 분이라면, 주말에 에뮬레이터(VICE 같은 거)를 깔고 따라 해보는 걸 추천해요. 30분이면 환경을 만들 수 있고, 결과물이 눈에 바로 보이니까 재미도 있어요. 프론트엔드 개발자라면 캔버스(Canvas) API로 같은 걸 구현해봐도 좋고요.
마무리
40년 된 컴퓨터의 한계 속에서 만들어진 카메라 시스템이지만, 그 안에 담긴 아이디어는 오늘도 살아 숨 쉬고 있어요. 가끔은 이렇게 뿌리를 더듬어보는 게 새로운 프레임워크를 하나 배우는 것보다 더 큰 깨달음을 주기도 해요.
여러분은 "옛날 방식"을 직접 구현해보면서 배운 게 있나요? 추상화된 도구만 쓰다 보니 놓치게 된 기초가 있다고 느낀 적 있는지 궁금해요.
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공