Jump to content

Halo for the 2600 Released at CGE! Download the game here!


Recommended Posts

Halo, one of the decade's most renowned video game franchises, has finally found a home on the Atari 2600! In this special version of Halo, you play the role of Master Chief as he battles his way through 64 screens! Locate weapons and power-ups that will help you defeat increasingly aggressive enemies! Watch for special Shield power-ups that will give you a second chance when engaging an onslaught of Elites!


Halo 2600 was programmed by Ed Fries in just 4K of space. We've made this new game freely available for you to enjoy in your favorite emulator or on real hardware via devices such as the Harmony Cartridge. You can download the game from this thread as well as discuss the game with its creator, Ed Fries. We made a limited number of Halo 2600 cartridges available for those attending the Classic Gaming Expo this weekend! The carts are adorned with a beautiful label designed by Mike Mika.


Do you have what it takes to tackle the four different zones and infiltrate the Covenant base? Can you reach and defeat the final boss? Humanity is counting on you!






  • Like 10
  • Thanks 1
Link to comment
Share on other sites

Hi guys, here's the story of how this game came about:

(note - I wrote this description for a general audience. sorry that you guys will already know the stuff I'm trying to explain below)


Last fall I was in Philadelphia, speaking at a small video game conference. On the way to the airport I was talking about writing games for the Atari 800 in the early 80s and someone suggested that I read the book "Racing the Beam" about programming the Atari 2600. It sounded cool so I did.


After reading the book I thought it might be fun to play around with writing some of my own code for the machine. I hadn't written 6502 assembler in almost 30 years but it turns out it's pretty easy to pick up again since there are so few instructions. I wasn't sure what to write so I created a little Master Chief from Halo and made him run around the screen. Then I created an Elite for him to shoot at. At this point it wasn't my intention to make a full game. I was just screwing around.


The thing you need to realize about the Atari 2600 is that it is an incredibly limited machine. It has only 128 bytes of RAM and without bank switching the maximum program size is just over 4000 bytes. There are just two 8 pixel wide monochrome sprites, two one pixel bullets, a "ball" and a 40 pixel wide background (and even that is exaggerating...). There is no memory to store the screen image like any modern console or PC, instead it has to be drawn a line at a time by changing the values of the registers that control the sprites and background. The processor is so slow that only 76 clock cycles occur while a line of the screen is being drawn, and the simplest 6502 instructions take at least 2 clock cycles. So just to draw an image of the Master Chief is pretty tough. To create a complete game while living within these constraints is much harder.


Fortunately the Atari homebrew community has created a wealth of resources for the wanna be Atari 2600 programmer. There is a fine assembler and several excellent emulators that include all the debugging features any programmer would want. There are also hundreds of pages of example code and documentation to aid you on your quest.


As I became more familiar with the machine I thought it might be possible to make something that was actually fun to play. I also ran into some fans of classic games at the Game Developers Conference in March and they encouraged me to keep going and try to make a finished game. At first I had the player battling through a linear series of rooms. You had to kill all the enemies before it would unlock the walls and let you move to the next room. As you can imagine, this got dull pretty quickly. I was doing it this way because it was relatively easy on the Atari 2600 but what if, instead, I could make a 64 room map the player had to explore, kind of like the old atari game Adventure? To implement this would require that I make an "asymmetric playfield" so that some rooms might have a wall on one side but not on the other. It turns out that's pretty tricky to do on the 2600, at least while you are trying to drawn everything else you want to draw, but I managed to get it working.


I was still worried there wouldn't be enough variety so I created a completely separate kind of level where you were driving a Warthog (jeep from Halo) across a rolling terrain while Banshees circled overhead and dropped bombs. But as I progressed on this I realized it had two problems: First it was too large. I had given myself the limit of 4K for the entire game and my Warthog section was over 1K by itself and it wasn't complete. Second, it wasn't fun. So I cut the Warthog level and tried to focus on making the core game more fun.


To add variety I divided the map into 4 "zones": outdoor, covenant base, ice world, and final boss area. Each had a unique look and some unique enemies. I also played with the atari's ability to stretch and duplicate sprites to create some further surprises for the player. Then I added some pickups the player could find to help them on the way.


At the end of the map I wanted to have a Boss encounter. This posed several problems. First, bosses are supposed to be BIG. How to get that feeling across in my game? Second, it had to be exciting. How could I make the boss encounter different from the rest of the game? I solved the first problem by writing a special Boss kernel for the final room. The rest of the game has what is called a "two line kernel" which means that all pixels on the screen are two scan lines high. What if I switched to a one line kernel for the Boss encounter? That would make the Master Chief half as tall which would you feel like you just walked into a big room and the camera zoomed out to be able to show the boss. Of course this meant I had to do all the processing in one line (only 76 cycles...) instead of two, but I had written the Warthog section with a one line kernel so I knew it was possible for me to do it.


To make the encounter different I made a single large boss that moved up and down the screen. He uses the maximum sprite width to be wide and is 24 pixels tall compared to 12 pixels for my other sprites. I also wanted him to be able to shoot 3 missiles at once. Of course that was a problem because the atari only supports 2 missiles and I need one for the Master Chief to be able to shoot back. I solved this by "multiplexing" the enemy missiles which basically means if there are 3 missiles on the screen I draw one each frame for three frames. That has the effect of making them flicker a bit but it's not bad for fast moving missiles. The great thing was once this was working for the Boss I could also use it in the rest of the game. Up to this point only one enemy could fire at any time because there was only one bullet for them to share, but now they could each have their own virtual bullet and fire whenever they wanted to.


At this point the rough outlines of the game were complete but it needed a lot of polish. For one thing it was brutally difficult. One of my playtesters convinced me to add three lives instead of the original one. Another convinced me that running into trees shouldn't kill you, and another finally got me to make the walls not kill you if you accidentally ran into them. I added the title screen at this time but had some pretty spastic stars which another playtester finally convinced me to clean up. I also added sound effects and a bit of the Halo 2 theme song on the title screen.


All of these changes were made extra difficult because I was completely out of space. Every time I wanted to fix a bug or add a new sound effect I had to go back through the code and rewrite some part of it to do exactly what it was doing before but with fewer bytes of code. At first there were some pretty easy ways to save space but, as you might imagine, this become more and more difficult when I was staring at something I had already rewritten two or three times before.


When a playtester complained that there was nothing after defeating the boss, I added legendary mode, so that if you beat the game you can play all the way through it again with a few parameters tweaked to make it much tougher.


It's around this time that I discovered the existence of what I call "Magic Land". I was working on a bug with the boss encounter and accidentally found myself completely outside the 64 room map. I was wandering through memory that was never intended to be interpreted as part of the map but the code was doing the best it could to interpret what was being thrown at it. Strange, misshapen monsters attacked me in even stranger ways as I wandered through this bizarre land that I had unintentionally created. I left a bug or two in the final game to allow others to find and explore this strange landscape as I did.


One of the last changes I made has to do with the Atari 2600 HMOVE (horizontal move) register. Basically if you want to reposition a sprite horizontally while the screen is being drawn (something I was doing 3 times on every screen.) you have to store a value into HMOVE. You are supposed to do it as the first thing on a scan line and a side effect of doing it is an ugly black line about an inch wide on the left side of the screen. You'll see those black lines on almost all Atari games. In the old days it was kind of hard to see on a phosphor TV display, but on a modern TV or computer monitor it's quite clear. Some games hide it by having a black background (not something I wanted to do) or by doing it every single line so the entire left side of the screen is black (also not great for the look I wanted), so I had kind of accepted that it was inevitable and had learned to ignore it, but every time I showed the game to someone who wasn't familiar with Atari games, one of the first things they would ask me is "what are those ugly black lines?"


When reading through some documentation I noticed that it was possible to do an "early HMOVE" which involved storing to the HMOVE register a few clock cycles before the beginning of the scan line and that in that case it didn't act the way it was supposed to (things moved in a funny way) but if you could do it exactly on the right cycle (cycle 74 in my case) then the black line wouldn't ever appear on the screen. I wrote a simple test program with ducks moving back and forth on the screen to prove to myself that I could compensate for the crazy behavior caused by this early HMOVE, make the ducks move as I wanted them to, and never have to see that ugly black line. That gave me the confidence to go back into my main kernel and implement the early HMOVE in Halo 2600 to get rid of the black lines for good.


That's pretty much the story. I couldn't have made the game without the incredible resources available on AtariAge.com and the many websites it links to. All the work you see in the game is mine except for some of the sprites which were drawn by Mike Mika who was a great encouragement and aid throughout the process. Chris Charla, Colin Williamson, Tom Russo, Ian Bogost, and Albert Yarusso all helped me by playtesting and by trying to talk sense into me when I was being stubborn about not fixing some glaring issue.


I hope you have as much fun playing Halo 2600 as I had making it.


-Ed Fries

  • Like 23
  • Thanks 1
Link to comment
Share on other sites

As an Atari game, this is pretty fun. I've been playing it for almost an hour now. Never played any of the Halo games, but this one definitely has its charm.


The author's provided backstory is quite interesting too.

Edited by Lendorien
Link to comment
Share on other sites

Thanks for all the kind words. I'm happy to answer any questions people have, technical or otherwise.


As for randomization, the positions of the enemies is random within each room but each of the 64 rooms has a pre-assigned set of enemies or objects in it. Doing it this way helped me ramp up the difficulty as you progress through the game and also gives various sections of the game different feelings by having different enemies and objects in them, but you are right it would have more replayability if I could somehow randomize the bad guys. That said, the game gets pretty hard so after playing for a while you may start to appreciate that you can anticipate what you are about to run into when you enter the next room.

  • Like 6
Link to comment
Share on other sites

As for randomization, the positions of the enemies is random within each room but each of the 64 rooms has a pre-assigned set of enemies or objects in it.

After trying again, I stand corrected. There is randomization.


I was focusing on the bonus objects, which are always in the same room. Maybe that's why I didn't notice. Would be cool if they could be moved around, but probably some levels would become too hard or even unbeatable then. And preventing that with random bonus objects would be quite complicated.


Now I notice even a bit "too much" randomization when going back and forth to the same room. ;)

  • Like 1
Link to comment
Share on other sites

Thanks for all the kind words. I'm happy to answer any questions people have, technical or otherwise.


As for randomization, the positions of the enemies is random within each room but each of the 64 rooms has a pre-assigned set of enemies or objects in it. Doing it this way helped me ramp up the difficulty as you progress through the game and also gives various sections of the game different feelings by having different enemies and objects in them, but you are right it would have more replayability if I could somehow randomize the bad guys. That said, the game gets pretty hard so after playing for a while you may start to appreciate that you can anticipate what you are about to run into when you enter the next room.

Ed, have you thought about an enhanced version for Curt's upcoming 7800 Expansion? I can see this going extremely well, as it would be VERY fun to play. I love this version, played it via Stella for a bit, and loved it. Love the opening, too, with the spinning wheel (the halo) and the song playing.


Also, an idea for you: Have a joystick control the masterchielf's movements and a paddle controlling his aim? Just an idea, and really aimed at the 7800 expansion.


Still a great game and I am loving it.

Link to comment
Share on other sites

Thank you a great deal for the insight into the game's creation. Always fun to read the mind behind the game. I've never played a HALO game, so I really have no idea what a Master Chief or an Elite is, but I get the gist. Looks very interesting. I'll give it a go on an emu later. I suppose the always present C&D letter that is on a desk somewhere waiting to be mailed is the cause for the extremely limited release, yes?

Link to comment
Share on other sites

The game is very entertaining. Well done! Nothing at all needs to change, but here are a few comments:


Since the enemies can shoot in all directions and their bullets travel through objects, unlike Master Chief's, you'll soon learn that running is often your best option. In some places I can run through a number of rooms very quickly without having to fight anyone. I wonder if putting up a few additional walls in the room would make the first level a bit more challenging; not that it isn't challenging already, but getting to the boss after only a few attempt leads me to believe the path to the boss isn't as difficult as it should be.


Although the game is supposed to increase in difficulty as you progress, I find that the larger enemies (not including the boss) are much easier to deal with than the smaller enemies. Maybe they belong at the beginning of the level and the smaller harder to hit enemies at the end.


I would love to find the magic level, but if that means I have to get through the second level with my character going half speed, I doubt I'll ever find magic. I really like how the difficulty of level two increases in certain ways, such as, the walls can now kill you, but playing at half speed seemed counterintuitive. Typically, as a game goes on, the speed at which you play increases. This felt like my character was dragging around an anchor and I abandoned the game.


There were only two 'bug-like' items I found, which probably have very reasonable technical explanations. When a room has a bottom wall and your character touches the bottom wall, you'll notice a line that appears near the left hand side of the wall. Also, when you fire just as you're entering a room the bullet starts out behind you, goes through your body and then towards the enemy. Neither is a big deal at all and could be considered part of the charm of the game. Oh, and one time the enemy's bullet traveled through the right side and reentered on the left.


The key metaphor didn't work for me at first, simply because you would normally take a key to a door to unlock it, but you don't carry this key around and you don't see it as part of your inventory. I actually found the first door before the key, and thought the flickering wall was a bug. I didn't realize it was a door until after I found the key and returned to find the wall no longer there.


I really like the game 'as-is', but just wanted to provide some feedback, much of which is very subjective. Again, great job!!!

Edited by shadowdoggie
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...