If you've ever played the original Interceptor arcade game, please leave a comment below about your experience.
Usually when I write these BASIC games, I save the detailed graphics for last. I start with just blocks for the sprites and don't spend too much time initially on the appearance. Rather, I try to nail down the game logic first, then polish it up. This time, I did it backwards. The look was most important to get right first; then, the logic would fit in the rest of the allowed code space. This turned out to be a challenge - at one point 6 lines were dedicated to set up, which is too much. I finally got the setup (screen drawing, sprite definition, initialization, etc.) down to four lines in the final version.
From an online video, it appears the game is the familiar blue and white motif of Atari's graphics 0 and 8 modes where pixels are one television scan line tall and one-half color clock wide. The plastic overlay is a darker blue or black color. The timer and score are displayed in large text at the bottom with a dark blue background. So in my version, I wanted three colors: light blue field, dark blue border, and white sprites and text. This led me to choose graphics mode 7, which is half the resolution (two scan lines by one color clock). I tried graphics 15, which has one-scan-line vertical resolution and is available on the 800XL, early on but concluded the extra resolution didn't add to the visual quality of my limited version. I also use double-line double-wide player sprites, which match the graphics 7 resolution. Only using half the vertical resolution in graphics 7 vs. 15 also saved on characters and commands in the code.
To simplify the game, all the enemy planes fly solo with no wingmen There are up to 3 planes on the screen at one time, one each flying left, right and vertical. This uses three of the four sprites. The fourth player is an explosion graphic that is switched in when you score a hit. To create the explosion, I took a technique from Yars Revenge to create a random pattern without storing the data: point to a location in memory that already has data (e.g., into the code itself). I point to location 95 for 17 bytes that contain a bunch of OS registers. (This technique is described in the great book Racing the Beam about the Atari VCS platform.) The biggest sacrifice made, due to both line count and speed limitations of BASIC, is the drawing of the projectiles. In the original, these are rapidly moving small lines. In mine they are solid lines. I tried some animation, but it took up too much code space. There might be some optimization that can be done, but I feel it works. After all, the BASIC version is humble nod to the original.
No comments:
Post a Comment