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

슈퍼마리오의 하늘에 떠 있는 구름과 땅 위의 수풀은 똑같은 모양을 가지고 있습니다. 두 오브젝트의 차이점은 색깔입니다.
구름 오브젝트의 색상(흰색)만 초록색으로 바꾸어 재사용했습니다. 별도의 그래픽 데이터를 사용하지 않고 색상만 바꾸어 메모리를 획기적으로 아꼈습니다.
8x8 타일의 퍼즐 맞추기

패미컴 게임의 모든 그래픽은 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
'컴퓨터 > IT 인사이트' 카테고리의 다른 글
| 보안 - SQL 인젝션 원리와 예방방법, DB를 지키는 방법 (1) | 2025.09.04 |
|---|---|
| 디자인패턴 - 디자인패턴(Design Pattern)에 대하여 알아보자 (2) | 2025.05.06 |
| 네트워크 - OSI 7 Layer에 대해 알아보자 (0) | 2025.04.18 |
| 포트포워딩 - 로컬 서버를 외부에 공개해보자 (0) | 2025.04.09 |
| 무선통신 - 2.4GHz / 5GHz 대역이 면허 없이 사용 가능한 이유 (0) | 2024.12.09 |