컴퓨터/IT 인사이트

컴퓨터게임 - 슈퍼마리오1가 40KB로 제작할 수 있는 이유

달서비 2026. 2. 3. 23:36

마리오 - pixabay

1985년, 닌텐도에서 출시된 슈퍼마리오 브라더스는 게임 산업의 한 획을 그었습니다. 지금 플레이해도 손색없는 게임성을 자랑하지만, 현대의 고화질 사진 한 장보다도 작은 40KB(그래픽 8KB + 프로그램 32KB) 안에 방대한 월드를 담아냈습니다. 이번에는 닌텐도가 자원을 어떻게 극한으로 재활용했는지에 대한 아이디어를 정리해 보겠습니다.

 

수풀과 구름의 비밀

슈퍼마리오 1-1 (수풀과 구름)

슈퍼마리오의 하늘에 떠 있는 구름과 땅 위의 수풀은 똑같은 모양을 가지고 있습니다. 두 오브젝트의 차이점은 색깔입니다.

구름 오브젝트의 색상(흰색)만 초록색으로 바꾸어 재사용했습니다. 별도의 그래픽 데이터를 사용하지 않고 색상만 바꾸어 메모리를 획기적으로 아꼈습니다.

 

8x8 타일의 퍼즐 맞추기

출처 : https://www.spriters-resource.com/nes/supermariobros/asset/52571/

패미컴 게임의 모든 그래픽은 8x8 픽셀 크기의 '타일' 이라는 단위로 저장이됩 니다. 해당 타일을 코드로 조작하여 다양한 모습을 만들고 이를 통해 그래픽 롬의 한계를 극복하였습니다.

 

타일 이미지에서 3시 방향에 있는 타일셋을 이용하여 수풀과 구름과 같이 에셋(전체이미지)을 만들어 냈습니다.

 

데이터를 설명하기

슈퍼마리오 용량

일반적으로 게임을 코딩할 때 화면 전체 화면에다가 어떤 픽셀로 보여줄지에 대한 코딩을 진행합니다. '1번 칸은 벽돌, 2번 칸은 null' 이런 방식으로 모든 칸의 정보를 저장 후 제공하게 됩니다. 하지만 해당 방식의 경우 40KB로 어림도 없습니다. 그러므로 데이터를 설명하여 표기하였습니다.

 

예를 들어 다음과 같은 방식입니다.

  • 토관 같은 경우 입구에다가 아래로 내려주세요.

이런 식으로 명령어 형태로 저장했습니다.

이를 이용하여 각 스테이지를 아주 적은 용량의 텍스트 데이터처럼 저장할 수 있었습니다.

 

화면이 깜박거리는 꼼수 플리커링(Flikering)

버블버블 플리커링 이미지

옛날 게임을 하신 분들은 오브젝트가 많아질 때 화면이 깜빡깜빡 하는 현상을 본적이 있습니다.

패미컴 같은 경우에는 한 줄에 표시할 수 있는 오브젝트의 개수가 8개로 제한되어 있습니다. 하지만 더욱더 많은 오브젝트가 필요한 경우를 위해 개발자는 방법을 마련했습니다. 개수가 넘어가면 캐릭터들을 번갈아 보여주어 우리 눈에는 모두 있는 것처럼 보이게 속이는 기술입니다. 요즘 모니터에는 바로 눈에 보이지만 예전 CRT 모니터의 경우 잔상이 남아 이를 이용했습니다.

 

코딩에서 용량을 줄이는 방법

코딩을 할 때 용량을 줄이는 가장 좋은 방법은 자원의 반복과 규칙화입니다. 슈퍼마리오는 이를 극한까지 이루어냈습니다.

  • 반복되는 패턴 찾기: 중복되는 리소스를 분리하여 하나로 통합합니다.
  • 연산으로 대체하기: 이미지를 새로 그리는 대신 색상값 변경(Palette)이나 반전(Flip) 연산을 활용합니다.

이는 개발자들의 집념으로 만든 하나의 작품입니다. 오늘날 기가바이트 단위의 게임이 나오는 시대에 40KB는 최적화란 무엇인가 생각하게 만듭니다.

 

Reference

https://hcs64.com/files/I%20Am%20Error.pdf

 

https://youtu.be/5ZXOV1ma35g?si=__yWQ4gvepdYyct7