Jump to content

Recommended Posts

This is my first attempt at an Atari 7800 game and is programmed in 7800basic using Atari Dev Studio.

 

Arkanoid

arkanoid-title.thumb.png.6b30ea6a460553581b0fdfbc606a6639.png

 

arkanoid-intro.thumb.png.475666ce33c14a09967398c19b24b172.png

 

Multi-colored backgrounds

arkanoid-level1-new.thumb.png.6a0bdc01fea57f9d9720421c4ea9ce88.png

 

arkanoid-doh-new.thumb.png.cc25ab535fdf16412f6afae8dba5ce4c.png

 

WIP Videos

Note: these are now out of date and will be updated soon.

Basic gameplay

 

DOH Level

 

How to play
The player controls the "Vaus", a space vessel that acts as the game's "paddle" which prevents a ball from falling from the playing field, attempting to bounce it against a number of bricks. The ball striking a brick causes the brick to disappear. When all the bricks are gone, the player goes to the next level, where another pattern of bricks appears. There are a number of variations (bricks that have to be hit multiple times, flying enemy ships, etc.) and power-up capsules to enhance the Vaus (expand the Vaus, multiply the number of balls, equip a laser cannon, break directly to the next level, etc.), but the gameplay remains the same.

Controls
Players use the joystick or paddles to move the Vaus left and right and direct the ball back towards the bricks. The position the ball hits the Vaus will determine the angle and direction of the ball. 

 

Note: When playing on real hardware, insert a joypad/joystick into the left port and the paddles (if used) into the right port.  The menu system on the title requires the joystick to make changes but once the paddle is selected you can use those buttons to start the game. 

 

[Testing] To change levels press the Select key (or E key in A7800).

State of the game
This is an early work in progress release. The following has been completed:

  • Title/High Score, Intro (in progress), Outro (in progress) and Game Over screens
  • Difficulty - easy (3 lives, 20,000, 60,000, 60,000+ for additional lives) or hard (2 lives, 60,000, 100,000, 60,000+ for additional lives) (ball speed to be added)
  • Music (Pokey) and sound effects (Pokey and TIA)
  • Vaus - controls: joypad (press button 1 for double speed and button 2 to fire vaus laser), joystick (press button for double speed and fire vaus laser), and paddle (press button to fire vaus laser)
  • Ball movement and collisions (in progress)
  • All 32 levels with multi-colored backgrounds and final DOH level (in progress) 
  • Capsules layout, selection rules, dropping and animations.  Activity on collection:
    • Enlarge (E) - makes the vaus bigger
    • Laser (L) - destroy bricks with your laser weapon
    • Catch (C) - catch and hold the ball, press button to release (auto-releases after a period of time)
    • Break (B) - open a warp gate and leave the level - 10,000 bonus points
    • Extra Life (P)
  • Most sprites and objects have been rendered
  • Brick animations (specific bricks on collision with the ball)
  • Vaus animations (transitions between normal, laser and large or any combination)

In progress/to be started:

  • DOH level (in progress) - add spewing objects and collisions
  • High Score entry
  • Capsules - activity on collection:
    • Disruption (D) - break the ball into 3
    • Slow (S) - Slow the speed of the ball
  • Flying objects
  • Finalise variable ball movement, speed and brick collision

 

Pokey Support

Arkanoid currently requires Pokey support to hear the music (you will not hear anything without it) but most sound effects (using TIA) will be heard regardless. A separate release with TIA music will be made available in the future.

 

Note: if you are using A7800 to play the game you will need to activate the XM Expansion Module cart to hear the POKEY sound for the time being:

command line:
a7800 a7800 -cart1 xm -cart2 arkanoid.bas.a78

 

Testing
All testing is currently completed in A7800. Some testing has been completed on real hardware.

 

Help

Thanks to the following people who though their contributions in coding knowledge, wisdom, guidance and testing are helping to create this game:

  • Mike Saarna (code)
  • Bob DeCrescenzo (code)
  • Bobby Clark (music and sound)
  • Marco Sabbetta (additional graphics)
  • Robert Tuccitto, Steve Ramirez, Kevin Mosley (testing)
  • John Calcano (box, cart and poster design)

 

 

Latest release

20190716 - 20190716.arkanoid.zip

Previous releases

20190713 - 20190713.arkanoid.zip

20190711 - 20190711.arkanoid.zip

20190706 - 20190706.arkanoid.zip

20190704 - 20190704.arkanoid.1.zip

20190704 - 20190704.arkanoid.zip
20190629 - 20190629.arkanoid.zip

 

 

  • Like 24

Share this post


Link to post
Share on other sites

I have assembler code to handle paddles (used in Crazy Brix and Super Circus AtariAge). If there is enough time, we should be able to use it (how many DLIs are being used?)

  • Like 6

Share this post


Link to post
Share on other sites

Hey guys would love any help with that to get it going. I'm sorry Bob I'm not entirely sure how to measure that - still very new to the 7800. Any suggestions?

Share this post


Link to post
Share on other sites

Looks beautiful so far! A good Arkanoid port would be an insta-buy for me. Hopefully the paddle support can be figured out.

 

Btw, I look forward to trying out Atari Dev Studio next time I dive into 7800 programming.

  • Like 6

Share this post


Link to post
Share on other sites

Wow, excellent start on the port! Someone tried this like 8 years ago, but didn't get that far.

  • Like 2

Share this post


Link to post
Share on other sites

Btw, I look forward to trying out Atari Dev Studio next time I dive into 7800 programming.

Karl - Atari Dev Stuio also incorporates bB and dasm for 2600 development

Share this post


Link to post
Share on other sites
Posted (edited)

Thanks everyone! been great learnings so far and like that I have a little more freedom than the 2600 offers. In between Atari Dev Studio updates I'll keep working away on it.

 

If anyone can offer any suggestions to my programming issues please sing out. And if you have managed to try this on real hardware I'd be greatful to know also.

Edited by mksmith

Share this post


Link to post
Share on other sites

Karl - Atari Dev Stuio also incorporates bB and dasm for 2600 development

 

Yeah, I know... I am in the middle of a project on the 2600 side that uses custom build scripts, etc. I may check it out anyway, but more likely I will try switching when I start a new project.

  • Like 1

Share this post


Link to post
Share on other sites

Holy crap - I just checked it out... This looks amazing! We need to get paddle support in this game.

Great job so far!

  • Like 7

Share this post


Link to post
Share on other sites

Hey Bob,

 

Been doing a quick search for your paddle stuff. Do you have a little mod I can call (i'd assume I may need to call it at various times) during an update? I'm not sure on the amount of time available (drawwait may help...)

 

Certainly willing to have a crack at getting it in.

Share this post


Link to post
Share on other sites

You need to call it during a DLI.

 

Here's the code from Super Circus AtariAge. I use two DLIs; one at the top of the screen and one at the bottom. (We know which one it is by the 'DLIFLG' variable - $00 is the top, $01 is the bottom.) The one at the top gets the paddle reads. The one at the bottom updates all of the movable objects.

 

OUTP0 contains the value of paddle 0, and OUTP1 contains the value of paddle 1 (both in the right controller port. You would use INPT0 and INPT1 for the paddles in the left port):

;  KERNAL - MAINTAIN THE ON-SCREEN DISPLAY
DLI       
          PHA                            ;STACK REGISTERS
          TXA
          PHA
          TYA
          PHA
          CLD

          LDA     DLIFLG
          BEQ     DLITOP
          JMP     DLIBOTTOM
DLITOP
          LDA     #$01
          STA     DLIFLG
DLIPADDLES
          LDA     #$00
          STA     INPTCTRL               ;PADDLES

          LDY     #124                   ;STANDARD PADDLES USE 104, 'BEST ELECTRONICS' USE 108  (OR 112 FOR ALL)
DLIPLOOP
          STA     WSYNC
          LDA     INPT2
          BMI     DLISKIP0
          STY     OUTP0
DLISKIP0
          LDA     INPT3
          BMI     DLISKIP1
          STY     OUTP1
DLISKIP1
          DEY
          BNE     DLIPLOOP

          LDA     #$80
          STA     INPTCTRL
          JMP     DLIOUT

;  THIS ROUTINE TAKES CARE OF THE LAST DLI ON THE SCREEN, THE 'VERTICAL BLANK
;  ROUTINE'.
DLIBOTTOM
          LDA     #$00
          STA     DLIFLG                 ;RESET FOR TOP DLI
          INC     RTLOCAL+1              ;INCREMENT CLOCK
          BNE     DLICONT
          INC     RTLOCAL
DLICONT
          JSR     LOADER                 ;LOAD UP NEXT FRAME
DLIOTHER
          JSR     TUNER                  ;DO TUNES
          JSR     RAND                   ;UPDATE RANDOM NUMBER
DLIOUT
          PLA                            ;UNSTACK AND LEAVE
          TAY
          PLA                            ;THIS IS WHERE MOST DLI'S LEAVE
          TAX
          PLA
NULLRTI
          RTI

I hope this helps. I'm not sure how to inject ASM code in basic, hopefully someone can help...

  • Like 4

Share this post


Link to post
Share on other sites
Posted (edited)

Thanks Bob! Certainly easy enough to inject asm with 7800basic - there are various ways (I did some stuff previously with bB). Just to make it work now! Maybe I can ask RevEng to help ;-)

Edited by mksmith

Share this post


Link to post
Share on other sites

Wow...I, uhhh....need this.

  • Like 5

Share this post


Link to post
Share on other sites

This is a buy for me as well. Loves me some Arkanoid. But take your time and enjoy your craftsmanship !

  • Like 5

Share this post


Link to post
Share on other sites
Posted (edited)

Thanks guys - would love to one day release a cart then my wife might understand the time and joy I get back from all this retro stuff! Anyway hopefully one day!

 

Bob, I've managed to trim it down to the following code which I call at the start of my main loop:

DLIPADDLES
          LDA     #$00
          STA     INPTCTRL               ;PADDLES

          LDY     #124                   ;STANDARD PADDLES USE 104, 'BEST ELECTRONICS' USE 108  (OR 112 FOR ALL)
DLIPLOOP
          STA     WSYNC
          LDA     INPT2
          BMI     DLISKIP0
          STY     OUTP0
DLISKIP0
          LDA     INPT3
          BMI     DLISKIP1
          STY     OUTP1
DLISKIP1
          DEY
          BNE     DLIPLOOP

          LDA     #$80
          STA     INPTCTRL
DLIEXIT
          RTS

Through A7800 I activate the paddle for joy2 and I'm getting readings from OUTPT0 and OUTPT1! Now the question is what am i getting back and how can I tie that back to the paddle control! Will have a scrounge around the forums...

 

If anyone is interested to set this up in 7800basic:

  • I inline the code (from an external file) at the end of my main bank (using inline paddles.asm)
  • dim vars for OUTP0 and OUTP1
  • call temp1=DLIPADDLES() to process it
Edited by mksmith
  • Like 4

Share this post


Link to post
Share on other sites
Posted (edited)

I've added a new build with the following changes:

  • Paddle support?? Attach you paddles to the right port and change the controls to paddles (left/right on joystick) on the splash screen. You will need to most likely press the fire button on the joystick to start (not sure!!)
  • Added another 4 levels

Thanks to PacManPlus (Bob) for the assembly! Hopefully it will work as I cannot test it on real hardware. For the time being you will require both the joystick (left) and paddles (right) to be plugged in when using the paddle controller as I don't know whether the buttons map to existing (joy) functionality...

Edited by mksmith
  • Like 6

Share this post


Link to post
Share on other sites

Holy cow, what an amazing first 7800 project post. mksmith, between Atari Dev Studio and this, you're on fire! :)

 

 

  • I'm using a 128kBANKRAM rom as I need to store some lookup tables in ram memory (for restoring the background under the bricks and (current) level brick hit tables) - is there a better way?
Do all the backgrounds tile like the screen you've captured? You could store the character indexes in a 4x4 rom table, and use that to restore tiles. For hit tables, I tend to use the characters themselves, but that means you'll either need a single tile counter variable to check when they're all gone, or you need to scan the characters to check that condition - this can be spread across a few frames, for minimal CPU impact.

 

 

 

  • With the amount of background tiles it appears my font cannot draw anything more than around 6 characters or so on a single line so have to spread them over multiple lines :_( (ie. 'player 1' , 'round xx', 'game over').

 

You can do one of two things here. #1.Don't plot the background tiles on the lines with score info, since they're empty anyway. #2.Manipulate the background characters to draw the letters and digits you want.

 

#1 is the easiest. #2 is the hardcore way to minimize the number of objects you're updating in a frame. Salvo uses #2, but I'd say only use that method if you're pushing the number of moving objects hard.

 

 

 

  • For the same reason I can't display the number of lives at the bottom using images (might need one for 4 lives, 3 lives, 2 lives etc maybe??)

 

Not sure. Certainly 7800basic can display sprites at the bottom of the screen. :) Here you might consider using characters and updating the background directly, since the code isn't that complicated.

 

 

 

  • Not sure if DoubleBuffer will help with any of this but it appears due to the screenheight set at 224 this cannot be used (screen jitters)

 

Yeah, this is an outstanding bug. There's a rounding error somewhere I need to track down.

 

Double buffering would only help if you're dropping frames and getting object glitching as a result.

  • Like 3

Share this post


Link to post
Share on other sites

This looks great. I'll buy one on cart in a flat second.

  • Like 1

Share this post


Link to post
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.

Guest
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.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...