Jump to content

Recommended Posts

Arkanoid

The era and time of this story is unknown. After the mothership “Arkanoid” was destroyed, a spacecraft “Vaus” scrambled away from it. But only to be trapped in space warped by someone……

Download link below 

 

Arkanoid-Title.thumb.png.23cd53b44094583f281f362b2a45612e.png

 

Arkanoid-Intro.thumb.png.f2f6eca248774472472186989948773d.png

 

Arkanoid-Level1.thumb.png.8f4d9491ef6ff1aa9a1c8d7b650fbfbe.png

 

How to play

You control a paddle (the spacecraft Vaus) at the bottom of the screen which you use to deflect an energy ball towards rows of “Bricks” at the top the screen, thus destroying them and eventually clearing the screen to progress to the next level.  Certain bricks when destroyed release power-up capsules which grant additional powers such as capturing the energy ball, equipping your Vaus with a laser cannon or opening a warp gate allowing you to escape to the next level.

Arkanoid-Level2.thumb.png.4d32e468de2b70a3209a3e598b7dc48a.png

 

Arkanoid-Level3.thumb.png.f3841e94752ee73043c5cb41e721a1af.png

 

 

Arkanoid-Level4.thumb.png.3980bf8224719eb926ea61d60df919fc.png

 

The final 33rd stage is a confrontation between the Vaus and the entity “Doh”.  To destroy the Doh and return from distorted space, hit the Doh repeatedly with your energy ball whilst avoiding the deadly projectiles he spits from his mouth.

Arkanoid-Doh1.thumb.png.2fe999d6c0f30ac7dffb7d8044fe1c40.png


Controls

Move the Vaus left and right to direct the energy ball back towards the bricks. The position the ball hits the Vaus will determine the direction of the energy ball. 

To change settings, on the Titlescreen press Select to change controller and left difficulty switch to change between Novice and Arcade

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

  • Title/High Score/Credits, Intro, Outro and Game Over screens
  • Difficulty - novice (3 lives) or arcade (2 lives). 20,000, 60,000, 60,000+ for additional lives
  • Music (Pokey) and sound effects (Pokey and TIA)
  • Controls: paddle, driving controller, trakball, joystick, Amiga or ST mouse (press Select to change controller)
  • Variable speed ball movement and collisions
  • All 33 levels and final DOH level
  • 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
    • Slow (S) - slow the speed of the ball
    • Disruption (D) - split the ball into 3
    • Extra Life (P)
  • Brick animations (start of level)
  • Vaus animations (transitions between normal, laser and large or any combination)

In progress/to be started:

  • Finalise intro/outro animations (in progress)
  • Flying enemies (in progress)
  • Brick animations (specific bricks on collision with the ball)
  • High Score entry
  • Lives indicator
  • Fix ball collision sounds

 

Demo 

The game is currently in beta and the demo release contains the first 10 levels and generally full functionality of the game.  The game will be available for purchase on cart in the near future from AtariAge.

 

Pokey Sound

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.78b.a78

 

Emulation

The A7800 emulator is the recommended emulator for playing Arkanoid on your computer and provides full support for the Pokey music contained in the game.  The ProSystem emulator is no longer supported.

 

Credits

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

  • Mike Saarna (code)
  • Bobby Clark (music and sound)
  • Marco Sabbetta (additional graphics)
  • Robert Tuccitto, Steve Ramirez (testing)
  • John Calcano (box, cart and poster design)
  • Al Yarusso, CPUwiz (AtariAge)

 

Latest release

Demo release - contains first 10 levels + DOH level

20210103.arkanoid.demo.zip

 

 

Previous releases

20191022.arkanoid.demo2.zip

  • Like 40
  • Thanks 1
Link to comment
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 7
Link to comment
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

Link to comment
Share on other sites

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
  • Like 1
Link to comment
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
Link to comment
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.

Link to comment
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 5
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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
Link to comment
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
Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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