"Game Development in Eight Bits" by Kevin Zurawel Strange Loop Conference・2 minutes read
The talk delves into the technical aspects of NES game development, highlighting the system's limitations and creative solutions developers used to create complex games within those constraints. It explores various elements such as graphics, physics, collision detection, random number generation, saving progress methods, and resources for learning NES game development.
Insights NES games, like Super Mario Bros., efficiently use memory by encoding levels with set decoration to minimize data storage, achieving complex gameplay within the system's constraints. Contra's collision detection method, using point versus rectangle, showcases innovative approaches to handling complex interactions in fast-paced games, highlighting the creativity required to overcome technical limitations in NES game development. Get key ideas from YouTube videos. It’s free Recent questions What are the key components of the Nintendo Entertainment System (NES)?
The NES features a 6502 CPU, custom PPU for graphics, 2KB system RAM, and 2KB video RAM, with no permanent storage or operating system.
Summary 00:00
"Game Development on NES: Creative Constraints" The talk is titled "Game Development in 8 Bits: Stupid NES Tricks" and focuses on the Nintendo Entertainment System (NES) released in 1985. The NES features a 6502 CPU running at 1.79 MHz, a custom PPU for graphics, 2KB of system RAM, and 2KB of video RAM, with no permanent storage or operating system. The NES processes data in 8-bit, representing everything as numbers between 0 and 255, with games fitting into 40KB of space on cartridges. Graphics on the NES are handled through tiles in pattern tables, with each table holding 256 tiles, and games like Super Mario Bros. using layers for backgrounds and sprites. Backgrounds on the NES are grid-based, with 960 bytes needed for a screen, while sprites have 256 bytes of RAM for 64 sprites on screen, each sprite tile requiring four bytes. Super Mario Bros. levels are encoded efficiently, with set decoration allowing repeated patterns to minimize data storage, reducing level data to 101 bytes for World 1-1. Physics in NES games like Super Mario Bros. achieve smooth movement using fixed-point fractions (8.8 format) for position tracking, allowing for realistic acceleration and movement. Collision detection in NES games is simplified using basic math operations available on the 6502 CPU, with games like Super Mario Bros. using fixed-point fractions for precise positioning. The NES's limitations in memory and processing power required developers to use creative techniques like tile-based graphics, layering, and efficient data encoding to create complex games within the system's constraints. 16:01
"Contra: NES Collision Detection and RNG" Contra, an NES port of a popular Konami arcade game, allows for two-player simultaneous play, with each player having their own controller. Collision detection in Contra is complex due to the fast-paced gameplay with numerous moving objects and bullets. The game features a wide variety of shapes for player characters and enemies, making collision detection challenging. Contra's developers implemented a unique collision detection method using point versus rectangle, with the player always represented as a point. Random numbers are crucial in games like Tetris and Final Fantasy, simulating dice rolls and determining outcomes. The NES lacks a built-in random number generator, requiring game developers to devise their own methods. Contra's approach to random number generation involves adding the current frame number to a byte of memory during idle moments. Early NES games used passwords for saving progress, with games like Mega Man 2 and Punch Out employing different systems. Dragon Quest 2 utilized passwords in Japan, requiring players to copy down a poem-like code to save progress. Nintendo's alternative to passwords was the Famicom Disk System, allowing for writable disks with copy protection measures to prevent unauthorized use. 31:45
"NES Game Development: Tips and Resources" Dragon Warrior (US release of Dragon Quest 1) writes save files multiple times with checksums to prevent loading corrupted data; if checksums don't match, the game checks subsequent copies until finding a valid one or prompts to start a new game. Embracing simple, even "dumb" solutions to problems can be valuable in game development, prioritizing functionality over perfection; hard-coding random numbers for Final Fantasy was preferred over perfecting a random number algorithm. Resources for learning NES game development include Nathan Altus's book "I Am Error" from 2015, the NES Dev Wiki for comprehensive information on NES workings, and a tutorial series on making NES games in assembly language for those with programming experience. The initial seed pointer into the random number table for Final Fantasy is based on frames waited before pressing start, ensuring varied gameplay experiences; NES hardware features like pattern tables, MMC1 chips for saving, and CHR RAM for real-time tile changes enable complex game effects. The Game Genie intercepts and alters RAM values between the cartridge and NES system, allowing players to modify game data; the lifespan of NES game batteries varies, with some still functional while others degrade over time.