Jump to content





Announcing Draconian

Posted by SpiceWare, in Draconian 28 March 2014 · 3,907 views

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:
Attached Image
 
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:
Posted Image
 
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.
Attached Image
 
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
Attached Image
 
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.
Attached Image
 
Diagnostic display showing processing time remaining for Vertical Blank and Overscan:
Attached Image
 
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:
Attached Image
 
An early build displayed the condition using a colored character:
Attached Image
Controls:
  • 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)
ROM
Attached File  draconian_20140328.bin (32KB)
downloads: 211
 
Source
Attached File  Draconian_20140328.zip (454.37KB)
downloads: 135




It's been a real blast seeing Darrell working on this for the last couple of weeks. I really never expected anything to come out of that blog post (hence the category "Stupid Game Ideas"), so it's pretty amazing seeing this starting to come to life. Bosconian was always one of my favorite arcade games, so it's nice to see it getting some homebrew lovin'.

 

Guess I should post some more Stupid Game Ideas. You just never know… :ponder:

 

Incidentally, the reason we went with the name Draconian is because of Darrell's tradition of using new names for his ports of arcade games (Medieval Mayhem, Frantic). Draconian, incidentally, means "excessively harsh or severe". But I'm sure he'll add selectable difficulty levels. ;)

  • Report

Another neat project to follow :)

  • Report
This early build also is reminiscent of Sinistar, which would look beautiful in this kernel - and taunting with AtariVox!
I don't recall ever playing arcade Bosconian so I'll check MAME and see if it brings any memories back.
  • Report

I bet Sinistar would work well with it.  

 

I forgot to mention how many objects this is currently keeping track of:

  • 150 sprites
  • 20 missiles
  • 128 stars

The program flow works like this:

  • OverScan - process game logic
  • Vertical Blank - prep all the datastreams to show the current frame
  • Display Kernel - shows the current frame

Most of those 150 sprites, 128 of them, are the stationary asteroids and mines.  Only the player's ship can collide with them, so there won't be much overhead in OverScan.  

 

The large number of sprites and missiles do impact Vertical Blank as those routines have to figure out which objects are in the visible portion of the screen so it can attempt to display them.

  • Report

Most of those 150 sprites, 128 of them, are the stationary asteroids and mines.  Only the player's ship can collide with them, so there won't be much overhead in OverScan.
 
Actually, the enemy ships can collide with the stationary objects.
 
However, the stationary objects are positioned in such a way that the collision detection routines only need to look at 8 of the 128 stationary objects.  The sector is divided up into 32 horizontal bands. 4 stationary objects are randomly positioned (X and Y offset) within each band.  Since the player or enemy can only straddle 2 bands at once, then only the 8 stationary objects within those bands needs to be compared with for collision processing.
  • Report

Awesome work.  You helped inspire me to learn VCS dev with Stay Frosty 2.  Now I'm really inspired!

  • Report

Wow ... you da man ! I will be watching this for sure .

  • Report

Wonderful work, as always.  It's amazing what you guys can pull off on our beloved 2600. :)

  • Report
Looks better than Mission 3000 AD! I said in my review of that game that Bosconian on the 2600 was a fool's errand, but you're well on your way toward proving me wrong.
  • Report

 

Draconian, incidentally, means "excessively harsh or severe".

If anyone here has ever read some of the Dragonlance novels then they will have heard of 'Draconian' before. In the novels Draconians were a race created by the kidnapping of the good dragons eggs and twisting them with black magic as they hatched. This resulted in a humanoid type creature. They served as assualt soldiers for the evil army.

  • Report
Wow. You have a game I have never seen or played before. Learn something new every day.

Question? Vat is dat Rabbi saying'? Log Om. Halert halert.
It really sounds like a Jewish Rabbi announcer.

Sound effect-wise it is between Galaxian and Galaga.
  • Report

The wiki entry for Bosconian lists
 

Throughout the game, a digitized voice alerts the player to various events:

  • "Blast off!" (start of a round)
  • "Alert! Alert!" (enemies approaching)
  • "Battle stations!" (formation attack)
  • "Spy ship sighted!" (self-explanatory)
  • "Condition red!" (enemy attacks become more aggressive; occurs when the player takes too long to clear a round, or misses the spy ship)

The game's from 1981.  It was still uncommon for games to use Digitized Speech back then due to the expense, Synthesized Speech was more common.

  • Report
Ouch - I should have included instructions for turning on the phosphor mode in Stella.
 
  • Report
Instructions added.
  • Report

Awesome... as usual!

  • Report

This is very cool, really looking forward to it. I assumed from the name that this was more of a port of the Tandy Coco version of Draconian but is this in name only?

  • Report

Thanks!

 

It's a coincidence, we had a dozen name ideas before we decided to go with Draconian.  A couple days later Nathan found your video and we debated changing the name but decided not to.

 

A few of the other names we considered were Atarian, Space Fortress Attack, Stellar Assault and Space Infiltrator

  • Report

Suggestion: Maybe a PF score with alternating on/off scan lines (like in Ed's) for the final build so it will be dimmer. (We're in space, and it is kind of blinding :) )

  • Report
Nathan's not yet done his magic with the digit graphics. It's possible what he comes up with will be smaller than my test graphics, which are purposely large so as to establish the size of the area we have to work with.

The original score/radar area, the last screenshot above with the green G, was even more overwhelming :)


My test graphics for 5:
PFdigit5:
        .byte zz_____XXX ; 0
        .byte zz_____XXX ; 1
        .byte zz_____XXX ; 2
        .byte zz_____X__ ; 4
        .byte zz_____X__ ; 5
        .byte zz_____X__ ; 6
        .byte zz_____XXX ; 7
        .byte zz_____XXX ; 8
        .byte zz_____XXX ; 9
        .byte zz_______X ; 10
        .byte zz_______X ; 12
        .byte zz_______X ; 13
        .byte zz_____XXX ; 14
        .byte zz_____XXX ; 15
        .byte zz_____XXX ; 16   
Alternating those scan lines would be this, which doesn't look quite right to me.
PFdigit5:
        .byte zz_____XXX ; 0
        .byte zz________ ; 1
        .byte zz_____XXX ; 2
        .byte zz________ ; 4
        .byte zz_____X__ ; 5
        .byte zz________ ; 6
        .byte zz_____XXX ; 7
        .byte zz________ ; 8
        .byte zz_____XXX ; 9
        .byte zz________ ; 10
        .byte zz_______X ; 12
        .byte zz________ ; 13
        .byte zz_____XXX ; 14
        .byte zz________ ; 15
        .byte zz_____XXX ; 16   
A shorter 5, which would be less bright:
PFdigit5:
        .byte zz_____XXX ; 0
        .byte zz_____XXX ; 2
        .byte zz_____X__ ; 4
        .byte zz_____X__ ; 6
        .byte zz_____XXX ; 7
        .byte zz_____XXX ; 9
        .byte zz_______X ; 10
        .byte zz_______X ; 13
        .byte zz_____XXX ; 14
        .byte zz_____XXX ; 16   
 
An alternating short 5 would be
PFdigit5:
        .byte zz_____XXX ; 0
        .byte zz________ ; 2
        .byte zz_____X__ ; 4
        .byte zz________ ; 6
        .byte zz_____XXX ; 7
        .byte zz________ ; 9
        .byte zz_______X ; 10
        .byte zz________ ; 13
        .byte zz_____XXX ; 14
 
  • Report

I'm also thinking about scrolling messages thru the score display, like the PLAYER 1 and PLAYER 2 messages in Space Rocks, which will probably impose some design constraints on size and style of the numbers.

  • Report

Search My Blog

Recent Entries

Recent Comments

Latest Visitors

0 user(s) viewing

0 members, 0 guests, 0 anonymous users