Stealing the Secrets of the NES - Agon Light Tilemaps in C
Early computers weren’t powerful enough to draw full-screen moving graphics, so they had to use clever tricks. Let’s explore how Nintendo’s techniques for creating tile-based games on the NES can be applied to modern hardware. Using these methods, I built a scrolling tilemap system for the Agon Light using C programming.
However, the real evolution came with games like Zelda and Super Mario Bros., which featured larger worlds and scrolling screens. The NES, despite its limited hardware capabilities, managed to create a continuous world by treating the screen as a grid and using tiles to build the display.
The Agon Light doesn’t have a built-in tilemap system, so we need to program it from scratch. This project builds on a previous one where we loaded and drew bitmap graphics. Now, we’ll extend those techniques to create a scrolling tilemap system.
First, we need a set of tile graphics. I chose assets from the Kenney website due to their appealing art style. We convert these graphics into the RGBA2222 format, similar to our bitmap process.
A tilemap is essentially an array where each element represents a tile ID. We can draw these tiles on the screen using a nested for loop.
To implement scrolling, we need to draw the tiles off-screen and slide them into view. This technique ensures that only the necessary tiles are drawn, optimizing performance for our 8-bit machine.
Our initial implementation worked but wasn’t efficient. We realized that constantly redrawing the entire screen was slowing down the performance. To optimize, we applied a technique known as “dirty rectangles,” where only the parts of the screen that change are redrawn.
Creating a scrolling tilemap system for the Agon Light using C programming was a challenging yet rewarding project. By applying techniques from the NES, we were able to optimize the performance and achieve smooth scrolling on modern hardware.