Jump to content
IGNORED

Catch - a new Keypad controller homebrew for the Atari 2600


Recommended Posts

The Accu-Pick 2600 robots get a break from farm work to practice their catching skills.  Help them successfully catch the ball in 1 of 3 possible landing locations or let them try to do it themselves with 4 varying A.I. skill levels.  But beware!  The red Squiffal-ball seemingly has a mind of its own when travelling through the air.  The game ends when the first player gets 10 points or when the game clock expires. 

 

                          CatchV1NTSC.png.9b900b754f35f526eeac17f6c5f2782f.png CatchBeta2Play.png.792c8fa1acc5fb33f4e2ff3f3e727ea7.png

Current Version (Complete):

V1 ROM (NTSC):     Catch[V1][NTSC].bin

V1 ROM (PAL60):    Catch[V1][PAL60].bin

Instructions:           Catch Documentation.pdf         

 

 

Previous Versions:

Spoiler

Beta 1 ROM (NTSC):    Catch[Beta1][NTSC].bin

Beta 1 ROM (PAL60):   Catch[Beta1][PAL60].bin

Instructions:               Catch Beta 1 Documentation.pdf

 

Beta 2 ROM (NTSC):   Catch[Beta2][NTSC].bin

Beta 2 ROM (PAL60):  Catch[Beta2][PAL60].bin

Instructions:               Catch Beta 2 Documentation.pdf

 

 

 

 

Following ElectroBall and Berry Fun!, my new game Catch is my 3rd homebrew for the Atari 2600.  For my third game I decided to try and make something using the Keypad controllers after multiple suggestions on integrating Keypad support for Berry Fun! (one big reason I didn't do it for that game is because I didn't have enough actual clock cycles to do game logic and read from the Keypad).  The artwork for Berry Fun! also inspired the "robot claw" sprite to indicate where to catch the ball, as opposed to the original Blip! placement of [1], [2], and [3].  Game development started in the summer of 2023 and was completed with an hour here and an hour there when I had some spare time.   Beta 1 was wrapped up at the end of 2023, but didn't make its "debut" on the scene until 2024.  Beta 2 was complete in mid-January 2024.  The game was officially declared "complete" on March 9, 2024 (the only difference between the final V1 ROMs and the B2 ROMs is changing of "B2" to "V1" on the title screen).  If there turns out to be a bug in the game I'll look to fix it, but I was not planning on any new overall developments (instead I will turn my attention to my next game, a return to the more standard Joystick control).

 

This game is in a sense is a "port" of the Tomy handheld Blip! game, which itself was a port of Pong.  So this is a port of a port (port^2?).  While developing it I put in further goals on what I wanted to do for this:  Try to lean into the "port" aspect of game development as much as possible (my other two games were "heavily inspired" by other games but could be considered original), use the Keypad controllers, make this a 4K game (no bank-switching!), use a single line display kernel, add in an options menu and keep it "Couch Compliant".  At the moment I'm able to do all of that (and currently have 3 bytes of ROM space left over).  I definitely had to use a lot of ROM space saving tricks and arrange my graphics data so that they fit into 2 256 byte spaces to avoid wasting any sort of ROM space.  I didn't have enough space for an opening music jingle, but with Keypad support I was able to program in the ability to generate tones with each Keypad, allowing people to come up with their own jingles.

 

I used Darrell Spice. Jr's joystick/keypad sample code as a starting point, then Darrell was kind enough to send me an updated sample code on how to read both controllers at the same time (included here 2keypads.zip for posterity).  I did some additional space saving optimization, switching from SLEEP macro commands to a DELAY_X_CYCLES macro to do a loop to wait for each line of the keypads to be read.  I also used some of the delay time to generate some random numbers, added in an option to not read the keypads for certain situations (when a player scores, for example), as well as add support for the computer to decide what key to press (and not have the human override it).  My "even more optimized" Keypad reading subroutine code and the DELAY_X_CYCLES macro (and web link to OmegaMatrix's original post on it) can be downloaded here:  ReadKeyPad_V2.asm.   This is version 2 of my keypad code, which has dozens of bytes of savings due to waiting to assign my final keypad values at the very end of the subroutine.  With those byte savings I was able to add a "Medium" ball speed and have the version and year displayed on the title screen.  Because of how I did the "Medium" speed, it is technically closer to "Fast" than to "Slow" ("Slow" ball takes 106 frames to cross the screen, "Medium" takes 75 frames to cross the screen, and "Fast" takes 58 frames to cross the screen) but "Medium" definitely feels like a cross between "Slow" and "Fast" .. so mission accomplished!

 

This game gave me some incentive to buy a used copy of Blip! from E-bay for further study to closely study it.  The mechanical construction of this game is quite interesting.  It essentially operates on a wheel, and after a certain period of time eventually loops around to repeat the same pattern.  One of the options in the game is to use the exact same pattern or use one that is completely random.  The original game is also really hard, and I think some of the movements of the ball (especially near the edge) borders on ridiculous.  I did a pseudo-adaptation of the ball movement, having it be a little "squirrely" as it travels to not make it blindingly obvious where it was going to end up, but also not completely unpredictable.   On the original game the instructions explicitly say "anticipate" where the ball will land, as if they knew it's just a complete crap shoot from the player perspective where it will land.  Depending on how my concentration goes I vary between being able to catch the ball and not catch the ball so some skill is involved.

 

The default options from game load-up are as close to the original as I could get.  2 human players, a "fast" ball (which travels roughly the same speed as the original), follows the "wheel pattern" of the original (starting at a random point in the wheel each game), and plays for 99 seconds (depending on how I wound up the game, I was getting games ranging from the low 70's to mid 120's in seconds, but I think this is a game best played in short bursts).  But I've also added in the ability to do shorter games, a slower ball, completely randomized ball placements, and 4 varying computer skill levels (from an A.I. that just makes a guess each time to an A.I. that will get it perfectly each time, and all skill levels in between).

 

Instructions are attached underneath the ROMs (available in NTSC and PAL60 flavors).  For those that don't want to read instructions, any button on the lowest part of the Keypad serves the ball, any button on the 2nd to lowest part of the Keypad selects the bottom row to catch the ball, any button on the 2nd to top part of the Keypad selects the middle row to catch the ball, and any button on the top part of the Keypad selects the top row to catch the ball.  The left Keypad controls player 1, and the right Keypad controls player 2.

 

Please enjoy!  If you've wished for another homebrew game that used the Keypad like an arcade controller, your prayers have been answered.  Using Keypads certainly limits the game's availability across all available platforms (not playable on Javatari, not playable on Argon, currently unplayable on 2600+), but it was an interesting exercise making a game for this particular controller.

 

 

Edited by littaum
Updated for Completed V1
  • Like 7
  • Thanks 1
Link to comment
Share on other sites

I just watched the ZPH video. Nice game. But why not support ALSO regular joystick-controls? 

Could be done by UP for 1st, RIGHT for 2nd, DOWN for 3rd position.

 

I mean, it is a cool and fun feature to support the keypad, but it would be even better to support more control options.

 

Big advantages would be:

- much more people can play it 

- compatible to the 2600+

- no hard buttons to press = fatigue

Link to comment
Share on other sites

Thanks for all of the positive comments, both on the ZPH stream and in the forums.  I'm glad people definitely get the vibe to the Blip! hand-held, as that was certainly my intention.  I'm going through the code with a fine toothed comb to free up more space to try and get a "Medium" ball speed in the game (already got 7 whole bytes freed up from an unnecessary sprite color setting!).

 

The first generation keypad controls definitely look like they are finger killers.  The keypads I have access to are the Star Raiders-style keypad and the Sesame Street-used big blue kid's controller keypad which are a bit easier on the fingers.  I would have been interested to be a fly on the wall when the kid's controller was introduced - it seemed like the Sesame Street games could have easily been joystick games but Atari wanted to sell controllers.

 

Supporting both Joysticks and Keypads would be difficult to do in a 4K ROM space, and one of the main things I was looking to recreate is the tactile feel of pressing on buttons to catch the ball.  Having this be controlled by a Joystick would certainly make it a heck of a lot more accessible, but sometimes mass appeal and maximum compatibility is not the point to Atari 2600 homebrew. :)  Watching the ZPH stream adds a new hurdle to keypad games:  Harmony Encore needs a joystick to get to the game, but when the game is launched if the keypad isn't plugged in the game gets auto-started from the menu.  There are also quite a few pong games out there (including A Game of Ball, the first example program in Oscar Toledo G's book which does do joystick control of the pong paddles) but having this be a keypad game and based on the Tomy handheld game gives the game its uniqueness in this crowded pong market.

 

 

  • Like 3
Link to comment
Share on other sites

I was able to get some pretty hefty space saving by optimizing the Keypad code.  I used the X & Y registers (swapping between X & A at a few points) to store the eventual keypad values and did final assignments at the end of the subroutine rather than throughout.  This resulted in dozens of bytes of savings, allowing me to add a "Medium" ball speed and to add the version # and year on the title screen, with 3 bytes left over!  NTSC and PAL60 Beta 2 versions have been included in the first post, as well as V2 of the sample keypad code.  Enjoy!

 

 

  • Like 2
Link to comment
Share on other sites

  • 1 month later...

Update:  I've seen no bug reports and have not found any myself, so I've edited the first post to make "official" V1 complete binaries for Catch.  The only difference between the Beta 2 binaries and the V1 complete binaries is that I've changed the title screen from "B2" to "V1".  I had a slight alarm in testing the final version on my 7800 w/CRT when the "TV" icons for the CPU players on the title screen had a mushed in right hand side.  I was thinking somehow I got my timings off between emulation and a live system.  Turns out my CRT just had its contrast settings set to the maximum.  Once it was set to a more reasonable level the graphics appeared normal.

 

 

  • Like 2
Link to comment
Share on other sites

  • 1 month later...

I also, used to own a Tomy Blip! game when I was a kid, so I know exactly the inspiration this new homebrew came from, I'll try here out with my CX21 Video Touch Pad that I got for Star Raiders and see hoe she plays!!!

  • Like 1
Link to comment
Share on other sites

What a gem!  I love these BLip games for the Atari 2600, don't you guys?   

 

How does CATCH fit into the Atari 2600 game library?   By the numbers... 

 

Spoiler

12 VIDEO GAME VERSIONS OF TOYS: AFAIK, Catch becomes one of 12 Atari 2600 games that are video game versions of kids' toys. 

 

Spoiler

1. Blip (Tomy) - Catch (homebrew)
2. Connect Four (Milton Bradley) - Four Play (homebrew)
3. Dark Tower (Milton Bradley) - Dark Keep (homebrew)
4. Etch-a-Sketch (Ohio Art)  - Stella Sketch (homebrew) 
5. Blip Basketball (Mattel) - Blipsketball (homebrew)
6. Blip Football (Mattel) - BLip Football (homebrew)
7. Operation (Milton Bradley) - M*A*S*H (Operating Room)
8. Rubik's Cube (Ideal) - Atari Video Cube

9. Rubik's Cube (Ideal) - Rubik's Cube 3D (homebrew)
10. Simon (Milton Bradley) - Off Your Rocker (prototype)

11. Simon (Milton Bradley) - Video Simon (homebrew)

12. Touch Me! (Atari) - Brain Games - Touch Me

 

9  GAMES THAT USE THE KEYBOARD CONTROLLER (OR ATARI KIDS CONTROLLER OR STAR RAIDERS VIDEO TOUCH PAD): AFAIK, Catch becomes one of 9 Atari 2600 games that use a keyboard controller.  

 

Spoiler

1.  Alpha Beam with Ernie

2.  BASIC Programming

3. Brain Games

4. Catch (homebrew) 

5. Codebreaker

6. Holey Moley (homebrew)

7. Hunt 'n' Score - Memory Match

8. Star Raiders

9. Tap-a-Mole (homebrew)

 

6  PADDLE-TYPE GAMES THAT LET YOU CATCH THE BALL: AFAIK, Catch becomes one of only 6 Atari 2600 games paddle-type games that let you catch the ball.  

 

Spoiler

1. Breakout
2. Catch (homebrew)
3. Warlords
4. Medieval Mayhem (homebrew) 
5. Fireball
6. Paranoid (homebrew) 

 

2  PADDLE-TYPE GAMES WHERE THE BALL MOVES IN WEIRD WAYS: AFAIK, Catch becomes one of only 2 Atari 2600 games where the ball moves in weird ways!   

 

Spoiler

1. Catch (homebrew)

2. Mondo Pong (homebrew)

 

Errors/omissions?  Please kindly send me a PM.  Thanks!  

Edited by Living Room Arcade
  • Like 1
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...