A while back, Nathan posted some well thought out mockups detailing how to do Bosconian on the Atari 2600. There was a bit of discussion, including a suggestion by supercat for drawing the stations using players instead of the playfield. But nothing came of it - until today.
Two weeks ago I approached Nathan about possibly using the routines from Space Rocks to implement his ideas. Those routines seemed ideal as they support objects with unique colors as well as the ability to set their size and do the left/right shifting for supercat's station suggestion. I expressed the desire to have something to post today, which is the eight year anniversary of that blog post.
After that I decided Nathan's original idea of using the playfield would look better (less flicker) so it would make sense to use Frantic's routines instead. One problem I had was Bosconian can have a lot of shots flying around and Frantic's routines were limited to just 6 shots. So I started to revise it to support missile repositioning. Ended up having to drop the ball object to make that work but I was able to figure out how to reuse the missile objects. Tricky part was keeping the size changes of the missiles and players in sync (as each player/missile pair uses a single register to control their sizes). The solution was to only worry about the player size when repositioning the player, and likewise for the missile size and its repositioning. After all the objects have been repositioned, then run a "clean up" routine that fixes all the size changes. If you care to look in the code, available below, check out function FixSizes().
I then had second thoughts about using the playfield due to the shear amount of data that would be moving around due to the desire to use single line resolution for the station detail:
So I decided to drop the playfield and add back the ball object. That's when I figured out that Slick Kernel that can reposition an object on every scanline. Since I could reuse the objects so frequently, I decided to update COLUPF when repositiong the ball instead of CTRPPF. This means the ball is a fixed size, but each instance of the ball can be a unique color.
One thing not really worked out was the radar display. Nathan's mockup included the ingenious idea of using an indicator on the edges of the display:
But recently Ed Fries posted Rally X were he'd worked out a rather slick radar implementation that shows the flags, cars and player position all in different colors without any flicker.
I thought that would work well for Bosconian. Since the radar uses both players, the normal 6-digit score routine can't be used in the same screen section as the radar. Since the radar would look odd all by itself, I decided to go old-school and use the playfield to display the score and lives information.
After a couple weeks of late night coding sessions, we have something to show. It's not yet a playable game, though you can fly around the sector (or quadrant, we haven't decided ).
Start of the menu
Game screen. I'm rather pleased with how the starfield turned out. The arrangement and color is randomly generated at the start of each round. Each star maintains its color, even as they move in the background.
Diagnostic display showing processing time remaining for Vertical Blank and Overscan:
The divider line and corners of radar are used for the "Condition Color". Above you can see Green and Yellow - it can also be Red:
An early build displayed the condition using a colored character:
- Left Difficulty - A= Diagnostic (time remaining in Vertical Blank and OverScan)
- Left Difficulty - B = score display (currently just counts up and shows in hex to test the digits)
- Right Difficulty - A = freeze ship (useful for looking at station damage)
- Right Difficulty - B = ship moves
- SELECT = return to menu
- START = start game
- Joystick = move around in sector/quadrant
- Fire = shoot (collision detection is not yet in place)
Please remember this is very early build. You'll see issues such as flight angles(I'm look at you 45° ) that are not compensating for the non-square pixels as well as occasional jitter. Using the diagnostic display I can tell that Vertical Blank is overrunning when there's a lot of objects onscreen (see level 6), and Over Scan is sometimes overrunning when you start a new level. I believe that's due to the level init routines that prevent the randomly placed asteroids and mines from overlapping each other or the stations.
If you're checking this out with Stella, be sure to turn on phosphor mode!
- open Draconian in Stella
- hit TAB for the in-game-menu
- select Game Properties
- Select the Display tab
- change Use Phosphor to Yes
- click OK
- select Exit Menu
- Reload the ROM (Control-R)