Jump to content
IGNORED

Centipede "Arcade" - hack for VCS/2600?


Arenafoot

Recommended Posts

Has anyone ever attempted to do the above title? I was looking at "Missle Command TB" in the hacks department of AA......and thinking about getting a trak-ball for my 2600 to play Centipede with and got wondering if there was a better version of Centipede (aka Centipede Arcade) and trak-ball compatible.

 

If not I wonder if Thomas would start writing "Centipede Arcade TB"?????

Link to comment
Share on other sites

...As it currently exists. What is required is a more-extensive hack to the display portion in order to free cycles for reading the controllers on at least half of the scanlines. Should be possible by utilizing Superchip ram for game variables so you have native ram to use for a self-modifying kernel section.

  • Like 2
Link to comment
Share on other sites

Looking deeper into this...it looks like most busy scanlines can be cut down to 54-60 cycles. There's a lot of code intentionally wasting cycles to set/clear gfx registers right at the end of lines...but this can be fixed by shuffling the order around a little. Rom saved in the process, so all that would need to be done is to find a couple of bytes of temp ram.

  • Like 5
Link to comment
Share on other sites

I am guessing here, but I believe they are playfield pixels and are set at that width. Adding a top would make them triple wide. To make them look like mushrooms would take a major rewrite or staring over.

 

That's what I thought. With all the 80's arcade revivals going on here at Atariage a new 2600 version of Centipede or Millepede with mushrooms and trackball support would be great.

Edited by WildBillTX
  • Like 2
Link to comment
Share on other sites

Is there any way to change the shape of the Mushrooms from blocks?

 

 

Not without excessive flicker. The only way to draw mushrooms that look like mushrooms would be to use the player objects, but those are already flickered a lot to draw all the enemy insects.

 

As an example of what you'd be in for, I built a couple Robotron tests with an early build of Space Rocks to see how bad the flicker would be when the robots converged on you - it was worse than the ghosts in Pacman.

 

You can find those tests at the bottom of this blog entry, they're called spacerocks75.bin and spacerocks100.bin. Read in the comments of that blog entry for more info about those tests.

  • Like 1
Link to comment
Share on other sites

Looking deeper into this...it looks like most busy scanlines can be cut down to 54-60 cycles.

After looking at my old code here, I suppose you need about 27 cycles (per axis) for determining the direction and updating the X- or Y-position variable accordingly. Using this code:



.left
  dec axis          ; 5
  jmp .exit         ; 3 = 27  
  ...
  ldy last          ; 3
  lda SWCHA         ; 4
  and #%11          ; 2
  sta last          ; 3
  eor NextLeftTab,y ; 4  works like cmp for beq
  beq .left         ; 2/3
  eor #%11          ; 2
  bne .exit         ; 2/3
  inc axis          ; 5 = 27
.exit

It would be nice to be able to read one axis in one line, but for that you would have to cut down the existing code to 49 cycles, not sure if that is possible. So it looks like you have to read one axis in two lines. Then the responsiveness would be identical to my MCTB hacks.

 

BTW: IIRC I alternated axis between frames.

Link to comment
Share on other sites

Back when I knew nothing about the guts of the VCS, I assumed that the mushrooms would be able to have the same kind of damage as the shields in Space Invaders.

 

Since the shields in Space Invaders were all player0 without flicker, I'm guessing they were 3 medium-spaced copies of player0. How was the individual pinpoint damage to them done? I don't even know how pinpoint damage would be done to one sprite with no copies.

Link to comment
Share on other sites

The bitmaps are held in ram. The initial pattern for a shield is copied from rom to 3 arrays. Hardware collision detection and a formula to pinpoint location does the rest to update the arrays.

Thanks. I wonder if that can be done using batari Basic? I'd like to play around with that kind of pinpoint damage.

 

Speaking of Space Invaders, here is an old unfinished bB version by batari:

 

atariage.com/forums/topic/76213-space-invaders/page-2#entry1516782

Link to comment
Share on other sites

BTW: IIRC I alternated axis between frames.

If reading the controller on every other frame is passable, a simpler method would be to flicker the playfield, and use a 3rd bank to deal with the controller instead of using all that cycle time for PF updates (and have some usable scratch ram too). A quick hack shows that a flickered playfield does not pose a gameplay problem.

 

Set controller to CX-80 Mouse in Stella.

Cent.asm

Cent.bin

Edited by Nukey Shay
  • Like 1
Link to comment
Share on other sites

By using PF flicker, I've found enough time for 80 consistent TB updates (60 of those being enough time to handle both axis). This does not even include scanlines outside of the mushroom kernel loop. Passable?

To have a trackball option?

Extremely acceptable to me.

 

Great idea to get another whole entire frame!

 

The big question, "Will the same technique for my most-favorite of all time on the 2600 Millipede?"

Link to comment
Share on other sites

By using PF flicker, I've found enough time for 80 consistent TB updates (60 of those being enough time to handle both axis). This does not even include scanlines outside of the mushroom kernel loop. Passable?

Worth a try.

 

MCTB only scans during the main kernel display (lines 56..220, every 2nd line) and that works very well. So I have 83 reads per axis every 2 lines.

Link to comment
Share on other sites

Movement test assembly and binary above. I borrowed the score variables for temps until I can isolate some ram. X-axis seems to function alright (tho border wrapping needs to be fixed), but Y is a no-go. This variable seems to be shared. The branch to use the alternate bank also needs a branch to skip over it when dying (so you can't move the explosion around).

Link to comment
Share on other sites

Are you going for mouse pointer like movement where fast moves jump lots of pixels and small slow moves jump single pixels?

 

If it is just like "holding the joystick left speed" then there is no advantage of using a trackball because it would play like a trackball in digital "joystick mode" instead of dynamic analog movement.

 

I never got Missile Command Track Ball working so I don't know how the trackball movement works.

Link to comment
Share on other sites

Trackball = the faster you move the ball in a direction, the faster the screen object moves in that direction. As Thomas pointed out - the more samples taken during the kernel, the faster the object's "top speed" will be. BTW MCTB can be set to CX-80 Mouse in Stella so you can use your computer's mouse & button as the trackball controller.

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