Space Rocks
Just some brainstorming for a potential remake of Asteroids/Asteroids Deluxe/(and possibly Space Duel), tentatively called Space Rocks (because space literally kicks ass! )
Sprite Usage
Sprites would be used to draw the player's ship, the saucer and the asteroids.
When as asteroid is hit, the following occurs:
- large asteroid -> 2 medium asteroids
- medium asteroid -> 2 small asteroids
- small asteroid -> disintegrates
The initial round starts out with 4 large asteroids. As the game progresses, each wave starts with progressively more asteroids until a maximum of 12 large asteroids is achieved.
12 * 2 * 2 = 48 potential concurrent asteroids (this could occur if none of the small asteroids are destroyed until after all large and medium asteroids are hit).
Add 2 more sprites for player and saucer for a max of 50 sprites. Currently Frantic supports a maximum of 24 sprites and is struggling to process them on the later levels; however in Asteroids we only care about sprite collisions when it involves the ship, saucer, or a missile so I think it can be done.
Shots
In asteroids the player has up to 4 onscreen shots while the saucer has 2. This works perfectly as my kernel supports 6 missiles by flickering both missiles and the ball.
Kernel
The kernel would be quite a bit simpler than in Frantic because there's no need to update the playfield, plus the objects would be a single color due to rotation (each object can still be a unique color though).
KernelLoop: ; at this point the registers hold the following: ; A - graphics for player 0 ; X - enable for missile 0 ; Y - enable for missle 1 sta WSYNC KernelLoopNoWSYNC: sta HMOVE ; 3 3 sta GRP0 ; 3 6 lda #<DS_GRP1 ; 2 8 sta GRP1 ; 3 11 stx ENAM0 ; 3 14 sty ENAM1 ; 3 17 lda #<DS_EVENT_BL ; 2 19 sta ENABL ; 3 21 bmi KernelEvent ; 2 23 - 3 24 if taken lda #<DS_HMP0 ; 2 25 sta HMP0 ; 3 28 lda #<DS_HMP1 ; 2 30 sta HMP1 ; 3 33 lda #<DS_GRP0 ; 2 35 ldx DS_M0 ; 4 39 ldy DS_M1 ; 4 43 jmp KernelLoop ; 3 46
One thing you might notice in this kernel is the use of HMOVE on every line. I noticed in the original asteroids that the large asteroids are drawn by shifting the player left/right on each scanline so they don't look so blocky. I think that's a great idea, so I plan to do the same.
KernelEvent would do one of three things: reposition player 0, reposition player 1, or end-of-kernel.
I think reposition routines should be able to be done in just 2 scan lines for both players because there's no need to update PFx registers like in Frantic (where it takes 5 scan lines to reposition player 0 and 4 for player 1). The reposition routines would also change the color of the player and set if it's to be displayed 1x or 2x in size.
-
2
0 Comments
Recommended Comments
There are no comments to display.