Jump to content

Photo

Kaboom! Deluxe!


35 replies to this topic

#1 SpiceWare ONLINE  

SpiceWare

    Draconian

  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Sat Feb 2, 2019 4:04 PM

NOTE: Current build is in Reply #30
 
 
 
 
In this topic davyK made me aware that the 5200 version of Kaboom! features a 3rd gameplay variation known as Pitch and Catch.  
 
post-3056-0-18927800-1548980092.jpg
 
 
After some back and forth I decided to utilize DEBRO's awesome disassembly of Kaboom! (which can be found at MiniDig) to add this variation to the 2600 version of Kaboom! I believe I have this part working, but it's difficult to test by yourself.  Let know know what y'all think.
 
NOTE: this is an early build, see top of this post for link to the latest version.
Attached File  kaboom_deluxe_20190202_NTSC.bin   4KB   47 downloads
Attached File  kaboom_deluxe_20190202_PAL.bin   4KB   22 downloads
Attached File  kaboom_deluxe_20190202_PAL60.bin   4KB   22 downloads
 
Changes so far are:

  • Revised kernel to capture both paddles on every frame
  • Revised game #2 to use the correct paddle value when alternating players
  • Added game #3, Pitch and Catch.  

I plan to add the sunset skyline and colorful Activision logo next, at which point I'll consider this hack finish and post the source.



#2 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Sat Feb 2, 2019 5:11 PM

I'm aware of these issues:

 

Game 1 - player 2 can move the bomber between rounds, but not while the bombs are dropping.  Player 2 should have no control of the bomber during game 1.

 

Game 2 - likewise the other player can move the bomber between rounds, but not while the bombs are dropping.  Likewise the other player should have no control of the bomber during game 2.

 

Game 3 - between rounds, while the other player can move the bomber, the bomb he's supposed to be holding does not move with him.



#3 TrekMD OFFLINE  

TrekMD

    River Patroller

  • 3,891 posts
  • Location:Coral Gables, FL

Posted Sat Feb 2, 2019 6:22 PM

Cool.  Will be testing this out.  



#4 davyK OFFLINE  

davyK

    Moonsweeper

  • 459 posts
  • Location:Northern Ireland

Posted Sun Feb 3, 2019 11:37 AM

Wow - fast work.

 

Will load this up and give it a go!!!

 

:)

 

 

EDIT: Just gave it a try. Excellent stuff, See what you mean by the bomb not sticking to the bomber but not sure if it's an issue as the bomb drops from where it is displayed the bucket mover hits the action button,

 

 

Seems to work great apart from the outstanding items you mention above. :)


Edited by davyK, Sun Feb 3, 2019 11:44 AM.


#5 Coolcrab OFFLINE  

Coolcrab

    Moonsweeper

  • 414 posts
  • Location:Stockholm

Posted Sun Feb 3, 2019 1:08 PM

This is amazing. Will it be on cart?

#6 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Sun Feb 3, 2019 2:00 PM

Seems to work great apart from the outstanding items you mention above. :)


I've already fixed those issues.  I've tracked down a disassembly of Crackpots and am looking into the skyline and logo.  I suspect I'll do a static logo rather than the scrolling copyright and logo, though I might change my mind.  The skyline might take bit more work than I expected as there's only a single graphic image for the mad bomber and the kernel manipulates it on the fly for the frown/smile/surprise.  It's possible I can update the skyline just after the sta GRP1 instruction, but the timing is variable due to the manipulation logic, which might corrupt the skyline.
 

DrawMadBomber
   lda MadBomberColors,x      ; 4
   eor colorEOR               ; 3
   and hueMask                ; 3
   sta WSYNC                  ; 3
;--------------------------------------
   sta COLUP1                 ; 3 = @03
   lda MadBomber,x            ; 4
   cpx #22                    ; 2         are we drawing Bomber's upper mouth
   bne .checkForLowerMouth    ; 2�        if not check lower mouth
   lda #%01101100             ; 2         Mad Bomber frown graphic
.checkForLowerMouth
   bcs .drawMadBomber         ; 2�
   lda #%01101100             ; 2         Mad Bomber surprise graphic
   bit bomberExpressionState  ; 3
   bmi .drawMadBomber         ; 2�
   lda #%01010100             ; 2         Mad Bomber smile graphic
.drawMadBomber
   sta GRP1                   ; 3
   dey                        ; 2
   dex                        ; 2
   cpx #21                    ; 2
   bcs DrawMadBomber          ; 2�
.colorMadBomberLoop
   lda MadBomberColors,x      ; 4
   eor colorEOR               ; 3
   and hueMask                ; 3
   cpx #3                     ; 2
   bne .colorMadBomber        ; 2�+1
   lda backgroundColor        ; 3
   sta WSYNC                  ; 3

 
If corruption occurs I'll need to clone the current MadBomber graphic:
 

MadBomber
   .byte $00 ; |........|
   .byte $00 ; |........|
   .byte $44 ; |.X...X..|
   .byte $82 ; |X.....X.|
   .byte $82 ; |X.....X.|
   .byte $BA ; |X.XXX.X.|
   .byte $D6 ; |XX.X.XX.|
   .byte $BA ; |X.XXX.X.|
   .byte $D6 ; |XX.X.XX.|
   .byte $BA ; |X.XXX.X.|
   .byte $D6 ; |XX.X.XX.|
   .byte $BA ; |X.XXX.X.|
   .byte $FE ; |XXXXXXX.|
   .byte $FE ; |XXXXXXX.|
   .byte $FE ; |XXXXXXX.|
   .byte $FE ; |XXXXXXX.|
   .byte $FE ; |XXXXXXX.|
   .byte $7C ; |.XXXXX..|
   .byte $38 ; |..XXX...|
   .byte $38 ; |..XXX...|
   .byte $38 ; |..XXX...|
   .byte $6C ; |.XX.XX..|
   .byte $54 ; |.X.X.X..|
   .byte $7C ; |.XXXXX..|
   .byte $6C ; |.XX.XX..|
   .byte $EE ; |XXX.XXX.|
   .byte $FE ; |XXXXXXX.|
   .byte $D6 ; |XX.X.XX.|
   .byte $7C ; |.XXXXX..|
   .byte $7C ; |.XXXXX..|
   .byte $7C ; |.XXXXX..|
   .byte $38 ; |..XXX...|

 
to make 3 distinct images.  Then I'll need to find some RAM I can use as an image pointer to replace the lda MadBomber,x instruction with lda (MadBomberPtr),y (the X to Y also complicates things) as well as logic outside of the kernel to select an image.



#7 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Sun Feb 3, 2019 2:02 PM

This is amazing. Will it be on cart?


Activision game ROMs are not available in the AtariAge database, so I suspect not.



#8 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Sun Feb 3, 2019 2:34 PM

Skyline's going to be more complicated than I thought - the playfield is already being used to black out the left & right side of the screen:

kaboom_deluxe.png

 

in order to hide the HMOVE bars.

kaboom_deluxe_1.png

 

I could use the ball to hide the left side, but that'd require the playfield to be black which would also make the buildings black.  The Mad Bomber would not look good against black buildings.

 

I'll need to think on this.  In the mean time here's updated builds with the fixes in place:

 

Attached File  kaboom_deluxe_20190203_NTSC.bin   4KB   32 downloads

Attached File  kaboom_deluxe_20190203_PAL.bin   4KB   20 downloads

Attached File  kaboom_deluxe_20190203_PAL60.bin   4KB   21 downloads



#9 Thomas Jentzsch OFFLINE  

Thomas Jentzsch

    Thrust, Jammed, SWOOPS!, Boulder Dash, THREE·S, Star Castle

  • 23,931 posts
  • Always left from right here!
  • Location:Düsseldorf, Germany, Europe, Earth

Posted Sun Feb 3, 2019 3:37 PM

How about using P0 for making the sides black? The sprite is not used.



#10 Omegamatrix OFFLINE  

Omegamatrix

    Quadrunner

  • 6,222 posts
  • Location:Canada

Posted Sun Feb 3, 2019 4:13 PM

Skyline's going to be more complicated than I thought - the playfield is already being used to black out the left & right side of the screen:

 

I could use the ball to hide the left side, but that'd require the playfield to be black which would also make the buildings black.  The Mad Bomber would not look good against black buildings.

Consider turning VBLANK on/off to create both borders.

 

The timing would be:

- VBLANK off with a write ending on cycle 25

- VBLANK on with a write ending on cycle 73


Edited by Omegamatrix, Sun Feb 3, 2019 4:13 PM.


#11 davyK OFFLINE  

davyK

    Moonsweeper

  • 459 posts
  • Location:Northern Ireland

Posted Sun Feb 3, 2019 4:26 PM

Top stuff.

 

tbh the Rainbow logo would be enough for me!  :)

 

 

I can see this being a great tournament game at retro events and meets,


Edited by davyK, Sun Feb 3, 2019 4:31 PM.


#12 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Sun Feb 3, 2019 4:36 PM

The bombs are player0.

 

VBLANK is an idea, don't think I can do it for the entire display though as kernel timing is particularly tight when the buckets are being drawn (especially since I added code to read both paddles on every frame). If the 25 and 73 line up exactly with the black as it's currently seen then I might be able to use that just the Mad Bomber kernel, then use the current PF0 method for the rest.

 

What I'm leaning towards is to no longer hide the right 8 pixels, and to use a combination of HMOVE bars and the ball to hide the left 8 pixels.  If I use HMOVE on every scanline during the MadBomber kernel then the playfield skyline can be any color I want, just have to change it to back to black to hide the HMOVE bars on the lower section.



#13 SoundGammon OFFLINE  

SoundGammon

    Stargunner

  • 1,368 posts

Posted Sun Feb 3, 2019 4:40 PM

Is there a hack that makes the buckets disappear from top to bottom rather than the other way around? 

 

It would give the player a little more space to work with when you're down to your last bucket!  



#14 davyK OFFLINE  

davyK

    Moonsweeper

  • 459 posts
  • Location:Northern Ireland

Posted Sun Feb 3, 2019 4:42 PM

Just noticed a little bug @SpiceWare.

 

Game 1 plays just like Game 2 with the latest ROM you updated, It's a 2 player game instead of a 1 player game.


Edited by davyK, Sun Feb 3, 2019 5:21 PM.


#15 Thomas Jentzsch OFFLINE  

Thomas Jentzsch

    Thrust, Jammed, SWOOPS!, Boulder Dash, THREE·S, Star Castle

  • 23,931 posts
  • Always left from right here!
  • Location:Düsseldorf, Germany, Europe, Earth

Posted Sun Feb 3, 2019 4:49 PM

The bombs are player0.

I meant to use it only only in the planned skyline area. Which then would have to be above the top bomb.



#16 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Sun Feb 3, 2019 5:24 PM

Just noticed a little bug @SpiceWorks.
 
Game 1 plays just like Game 2 with the latest ROM you updated, It's a 2 player game instead of a 1 player game.

 
 
Hmm, the variable gameSelection holds the game number of 0, 1, or 2.  However, bit 7 is used to flag for something which means it's sometimes holding $80, $81, or $82.  
 
 
The switch player routine only checks for zero to see if it should or shouldn't swap players. For some reason it's holding $80, which makes the routine think it's a 2 player game. I need to figure out what bit 7 is used for, where and why it's getting set/cleared, then figure out how my changes conflicted with the usage.  As a bandaid I can change it from this: 
 
SwitchToOtherPlayer
   lda gameSelection                ; get the game selection
   beq .skipPlayerDataSwap          ; only game 1 (0 internally) is 1 player
 
to this so it ignores bit 7: 
SwitchToOtherPlayer
   lda gameSelection                ; get the game selection
   and #$7f
   beq .skipPlayerDataSwap          ; only game 1 (0 internally) is 1 player


#17 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Sun Feb 3, 2019 5:32 PM

I meant to use it only only in the planned skyline area. Which then would have to be above the top bomb.


Hmm, currently the position of player0 for the bomb is set immediately after the score is drawn, and the position of player1 for the mad bomber is set on the next scanline. To make this change I'd need to reposition player0 in the middle of drawing the Mad Bomber, but as long as I do it after the jagged part of the skyline is drawn I no longer need to use the playfield for the building as the background could just be set to the building color....

Thanks!

#18 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Sun Feb 3, 2019 5:44 PM

Noticed a couple more glitches.


1) As the bombs move past the first bucket they jump right a few pixels for a few frames
kaboom_deluxe_dbg_b5b99292.png

kaboom_deluxe_dbg_b5b9a2fb.png

kaboom_deluxe_dbg_b5b9ca2b.png


2) If both paddles are turned fully clockwise the scanline count is correct:

Screen Shot 2019-02-03 at 5.33.59 PM.png

but if both paddles are turned fully counter-clockwise the scanline count increases by 1.
Screen Shot 2019-02-03 at 5.34.09 PM.png

#19 Thomas Jentzsch OFFLINE  

Thomas Jentzsch

    Thrust, Jammed, SWOOPS!, Boulder Dash, THREE·S, Star Castle

  • 23,931 posts
  • Always left from right here!
  • Location:Düsseldorf, Germany, Europe, Earth

Posted Sun Feb 3, 2019 5:52 PM

Hmm, currently the position of player0 for the bomb is set immediately after the score is drawn, and the position of player1 for the mad bomber is set on the next scanline. To make this change I'd need to reposition player0 in the middle of drawing the Mad Bomber, but as long as I do it after the jagged part of the skyline is drawn I no longer need to use the playfield for the building as the background could just be set to the building color....

Thanks!

If you do not want to repos P0 later, maybe you can use both missiles instead.


Edited by Thomas Jentzsch, Mon Feb 4, 2019 2:57 AM.


#20 Omegamatrix OFFLINE  

Omegamatrix

    Quadrunner

  • 6,222 posts
  • Location:Canada

Posted Sun Feb 3, 2019 8:45 PM

VBLANK is an idea, don't think I can do it for the entire display though as kernel timing is particularly tight when the buckets are being drawn (especially since I added code to read both paddles on every frame). If the 25 and 73 line up exactly with the black as it's currently seen then I might be able to use that just the Mad Bomber kernel, then use the current PF0 method for the rest.

Yes, that was what I was thinking... using VBLANK jiust where the cityscape is drawn. I believe the timing lines up perfectly.



#21 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Mon Feb 4, 2019 12:48 PM

Noticed a couple more glitches.


Tracked down what was causing the line count to increase:
 

.determineBombColor
   lda bombNumber             ; 3         get the current bomb number
   cmp explodingBombNumber    ; 3         skip the explosion random colors
   bne .skipExplosionColor    ; 2�        if this is not an exploding bomb
   lda BucketColors-1,x       ; 4         get the bucket colors
   and hueMask                ; 3         <----- B&W mode.  Note: no attract mode for the buckets on this path.
   sta WSYNC
;--------------------------------------
   sta COLUP1                 ; 3 = @03
   lda.w randomSeed           ; 4         get the random number
   sta COLUP0                 ; 3 = @10   set the color of the bomb explosion
   jmp .drawBucket            ; 3
   
.skipExplosionColor
   lda BucketColors-1,x       ; 4
   eor colorEOR               ; 3           <----- attract mode
   and hueMask                ; 3           <----- B&W mode
   sta WSYNC                              ; <----- got here @ cycle 74 with both paddles left

 

The addition of the 2nd paddle reading was sometimes causing that last sta WSYNC to occur on cycle 74, it needs to occur no later than cycle 73.

 

The ero colorEOR is used for attract mode, the color cycling common in older 2600 games. During tests it appears the buckets are never onscreen when the attract mode is active, so I commented out this line which fixed the problem.  I also noticed the eor colorEOR is missing from just above the ---- line which seems to confirm it's not needed.

 

Commenting that out also fixed the issue with the bombs jumping to the right as they passed the first bucket.

 

The and hueMask is used for TV Type, it turns the color values to greyscale if set for B&W mode.

 

I'm debating removing both attract mode and B&W mode, neither where common in later games.

 

 

Also fixed the issue with game #1 acting like game #2.

 

Attached File  kaboom_deluxe_20190204_NTSC.bin   4KB   28 downloads

Attached File  kaboom_deluxe_20190204_PAL.bin   4KB   19 downloads

Attached File  kaboom_deluxe_20190204_PAL60.bin   4KB   19 downloads



#22 KevinMos3 OFFLINE  

KevinMos3

    Stargunner

  • 1,589 posts
  • Founder of the Timothy Dalton as Bond fan club
  • Location:Behind YOU!

Posted Mon Feb 4, 2019 9:36 PM

Pardon me for not remembering the rules on sprite widths with doubles or triples, but could you do a double wide (or more) P0 sprite that is repeated (doubled or tripled)?  Or are repeated sprites not stretchable... I don't remember.

 

Could you add another HMOVE above where the bomb never appears, to use P0 up there for buildings?

 

Here's a mockup with the sunset being background color changes and the buildings as a triple P0 sprite (double wide).

Kaboom Elements.png  Kaboom Skyline.png  

 

And a more crappy tripled standard width sprite:

Kaboom Skyline2.png



#23 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Tue Feb 5, 2019 9:49 AM

Nice idea!  The players can be stretched or duplicated, but not both which is disappointing.  

 

As of last night I have a plan of action.  While implementing the rainbow logo:

 

kaboom_deluxe.png

 

I confirmed neither missile nor the ball was used in Kaboom.  Player 0's used to draw the bombs, so I can use missile 0 below the score and above the first bomb to hide the right edge of the screen (while using HMOVE bars to hide the left).  I only need to use this method while drawing the tops of the buildings.  I've already prepositioned missile 0 for this, I turned it on via the debugger for this screenshot:

 

kaboom_deluxe_1.png

 

I'll post a build with the rainbow logo later today after I add in the colors for PAL.  While the Crackpots disassembly is configureable for PAL and PAL60, it only has the NTSC colors for the logo.  I tracked down a PAL ROM for HERO, so I'll be able to get the PAL values from it.

 

H.E.R.O. (1984) (Activision) (PAL) a2.png



#24 SpiceWare ONLINE  

SpiceWare

    Draconian

  • Topic Starter
  • 12,611 posts
  • Medieval Mayhem
  • Location:Planet Houston

Posted Tue Feb 5, 2019 11:29 AM

PAL colors in place, Rainbow logo is finished.

 

ROMS  

Attached File  kaboom_deluxe_20190205_NTSC.bin   4KB   39 downloads

Attached File  kaboom_deluxe_20190205_PAL.bin   4KB   28 downloads

Attached File  kaboom_deluxe_20190205_PAL60.bin   4KB   28 downloads

 

kaboom_deluxe.png

 



#25 Arenafoot ONLINE  

Arenafoot

    Stargunner

  • 1,339 posts
  • videogamestores.net
  • Location:Watson, LA

Posted Tue Feb 5, 2019 6:28 PM

I was expecting a rainbow "Spiceware" logo instead of that one  ;)  






0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users