This tutorial covers the writing of a 2K game for the Atari 2600. Since it's a tutorial, I put significantly more comments in the source code than I normally would. So be sure to download the source and read it along with each blog entry.
The tutorial does assume you have some understanding of 6502 assembly language. If you don't then check out the Easy 6502 tutorial before starting this tutorial - don't worry, it's not a difficult processor to learn*
Let's Make a Game!
goals for the tutorial
Step 1 - Generate a Stable Display
On other systems the video chip generates the display, on the 2600 your program generates the display
Step 2 - Timers
Improve the display generation by using the built in timer
Step 3 - Score & Timer display
using the playfield to display information
Step 4 - 2 Line Kernel
draw the player objects onscreen (X & Y location)
Note: players are known as sprites in modern nomenclature
Step 5 - automate Vertical Delay
finish the Y positioning of the player objects
step 6 - Spec Change
revise our goals
step 7 - draw the playfield
display an arena (like the mazes in Combat)
step 8 - Select and Reset support
Using the Game Select and Game Reset console switches
step 9 - Game Variations
how to implement game variations (number of players, different mazes)
step 10 - "Random Numbers"
how to randomize your game
step 11 - add the ball object
draw the ball onscreen (X & Y location)
step 12 - add the missile objects
draw the missiles onscreen (X & Y location)
step 13 - add sound effects
let's make some noise!
step 14 - add animation
make the humans run instead of glide
simplified version of collect, ROM only
CollectMini source code
source for the simplified version of Collect
* I taught this to myself back in 1982 (I was 15) by reading section 3, Machine Language Programming Guide, of the VIC-20 Programmer's Reference Guide. I didn't have an assembler at the time, so would hand assembly my code, type the results into DATA statements, POKE them into memory, and then finally run them via SYS.
COLLECT TUTORIAL NAVIGATION
<PREVIOUS> <INDEX> <NEXT>