Jump to content
IGNORED

SuperPong 2600


LS_Dracon

Recommended Posts

espire8 came up with some MM sequel ideas over the holidays. I was to busy with Stay Frosty to look into them at the time.

 

My idea would be to have the two paddles for each side be at different Y positions. This would introduce some strategy as to which ball should be targeted by the upper or lower paddle.

 

Still, one ingredient I rather like here is the idea of having the paddles be in front of the corresponding knights which are the actual targets. A player who saw the enemy about to break through could try to get his knight out of the way, but would leave his castle undefended in the area near the ball. Not sure how well that would work out in practice. If the ball ricochets between the back wall and the bricks, any knight back there would be pretty much dead and the breakthrough itself might was well represent the 'win'. If it doesn't ricochet, then it may be too easy for a player to dodge the enemy.

 

Perhaps the knights could move side-to-side on a 'sidewalk'; a missile that hits the sidewalk will knock a hole in it. Knights would be able to jump over small holes, but adjacent hits would produce an obstacle which would block movement of both the knight and his paddle.

Link to comment
Share on other sites

Paddles support added! All credits to SpiceWare ;)

And no graphic lost! :cool:

 

Also, recoded score code, and now this game get a downgrade to 2k :P

 

Is hard to test this version, I'll try to do some AI, soon.

 

- Added Paddles support (both players), Tnx to SpiceWare.

- Some codes changes

- now it's 2k

Nice! How about animated paddles? ;)

superpong_anim.gif

 

Also, will you be putting 'english' on the paddles, so you can change the direction that the ball is returned?

 

I have others ideas, "Super" means new things, for exemple the "Blind Mode"!

When ball cross the middle, it vanish, and you need figure where the ball is, you can see more or less if take attention in middle line, this is the reason of that bright, what you think?

I like that idea! There are quite a few variations you could do:

  • Blinking ball - in addition to blind mode, the ball could blink on and off throughout the game
  • Morphing paddles - the paddles would continually change shape, and affect how the ball gets returned (could also be controlled by the player's button) - admittedly, this sort of thing could push the game over 4K
  • Marching paddles - as a volley continues, the players' paddles gradually move towards each other, giving less reaction time
  • Sticky paddles - can catch and fire the ball, but rather than just serving at normal speed, ball gets fired at super-speed
  • Super-english - not only would applying english to the paddles change the ball's direction off the paddle, it would actually cause its trajectory to curve in mid-air

Link to comment
Share on other sites

About ideas, The missile was used for middle line, ok, can be removed, but kernal had now 4 cicles left...

I have others ideas, "Super" means new things, for exemple the "Blind Mode"!

When ball cross the middle, it vanish, and you need figure where the ball is, you can see more or less if take attention in middle line, this is the reason of that bright, what you think? :)

 

Ah.I got it.

Edited by Devin
Link to comment
Share on other sites

New version!

 

- Blind Mode only

- Dummy (invencible) artificial inteligence, for play test pourpose only.

- Lack sound for this effect.

- No variable for switch modes yet.

 

Nice! How about animated paddles?

Sorry Nathan, not possible, the current sprite code need more than 350 bytes for a single frame, this means 3 frames = 1 kb icon_sad.gif

 

This game in 2 kb is a kind of challenge for me.

 

And about your ideas, the Sticky paddles is a good one, I think in one mode, after 4 or 5 hits the ball increase to very fast speed, I'll try both ideas.

And the ball get a yellowish color effect, like blazing, sounds good?

Edited by LS_Dracon
Link to comment
Share on other sites

The animated paddles could be done using a mask - it would require the current "350 byte" image to have #%11111111 replace the current image, then you would store each Frame w/out having to worry about extra 0 padding. The kernel code would change to:

	lda (P0graphicPtr),y
and (P0maskPtr),y
sta GRP0
lda (P0colorPtr),y
sta COLUP0

Only problem is you're then looking at 6 extra cycles per paddle (the and(),y is normally 5 but we know it will occasionally cross the page) and there's not much chance of freeing up 12 more cycles in your single line KERNEL.

Edited by SpiceWare
Link to comment
Share on other sites

Only problem is you're then looking at 6 extra cycles per paddle (the and(),y is normally 5 but we know it will occasionally cross the page) and there's not much chance of freeing up 12 more cycles in your single line KERNEL.

 

Two major keys to single-line kernels:

 

  • Subdivide the screen into zones, such that there will be at least one relatively vacant zone between filled zones. In the somewhat-vacant zone, there will be time for decision-making. In the filled zone there won't be any need for decision-making.
     
    In an early version of Toyshop Trouble, the player sprite had 15 bytes of zero padding above and below; zones were 16 lines high. In the area between rows of toys, I had enough time to decide whether the player would be within the zone below and set up a pointer to either point to the player shape (with appropriate offset) or at 16 blank bytes. In the last scan line of the 'easy' zone, I set up that pointer for the next 'easy zone'.
     
    In a later version, I had far too many elf shapes (26 of them!) to make that technique practical. Consequently, I used two 16-byte buffers to hold the elf shape in the only easy zone and the only hard zone in which it appeared. The decision logic thus set the pointer for each shape to either the RAM buffer or 16 bytes of zeros. Alternatively, I could have used two versions of my toy kernel--one which showed the player shape and one which did not.
     
  • Unroll the kernel, and de-interleave the graphics data. This technique is used in E.T. and in the Stella's Stocking menu. A 2x interleave can easily save five cycles every other scan line; a 4x interleave can save 15 cycles every four scan lines. Done properly, this approach may still allow single-line motion. Further, thanks to VDELBL, a two-line update interval for the ball may still result in single-line motion of that object.
     
    Incidentally, this technique has another bonus: since an object that would have taken e.g. 16 bytes in one page will now take 8 or 4 bytes in each of two or four pages, it's much easier to eliminate page crossings on data fetches. For example, using maskdraw on a 192-line screen with 4x unrolling, you could avoid page crossings if you avoid putting objects in the first or last 48 bytes of a page (that leaves 160 bytes/page for objects).

In SuperPong, if you use 'ordinary' paddles, it will be possible to divide the screen into at most five zones. The code for a zone where both paddles are drawn might be something like:

not_bothpaddle_zone_end:
 lda (bothzoneptr0),y
 sta GRP0
 lda (bothzoneptr1),y
 sta GRP1
 ...
 iny
 cpy zone_end
 bne not_bothpaddle_zone_end
 rts

The "rts" instruction would take the code to the next zone (the stack would be set up before starting the kernel). Since the zone before the 'both paddles' zone and the zone after will each have at most one paddle, there will be time to 'absorb' the six cycles of the RTS.

Edited by supercat
Link to comment
Share on other sites

What's new:

 

- Added console switch support - Reset and Game Select.

- Select "GAME A" to play normal "Tennis for Two", or "GAME B" to play in Blind Mode

- Then press paddle button to start (left mouse button, if you play in emulator)

- Added sound efect for Blind Mode, and others small fixes.

- Changes in players size

- Artificial inteligence still invencible.

S_Tf2_SWCHB.bin

Edited by LS_Dracon
Link to comment
Share on other sites

  • 4 weeks later...
  • 5 years later...

Wow the last update was in 2008. What a shame!

 

How about "Super Pawng"?

 

I'll keep with Super Pong, This is a non-profit project an I hope "Atari" understand it.

 

BTW who is the Pong owner? I mean, the Atari arcade games was owned by Midway, they went bankrupt in 2009 or so...

(searching) It seems Midway and his intellectual property (such Pong) now belongs to Warner Bros.

 

Well here's a new version, I was testing new codes and decided to update this little project:

 

1 - New score engine, based on Combat code, you need 21 points to win.

2 - New title logo and game mode fonts

3 - Some code optimizations.

 

The dumb AI is just a placeholder, I still need to code a good AI for this game.

 

Press select switch to select games modes, Type A = normal game, Type B = blind mode and paddle button to start.

 

On emulators, you must set "Paddle" as controllers.

 

Edit : Forget to say, the sprite animation was removed but I have plans to add it again.

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

No, Midway only had the rights to the post crash "Atari Games" arcade games (there was a legal battle over this and Midway lost the rights to the older Atari games). All of the arcade games before then went to infogrames (which is now called Atari). However, "infoatari" has had finacial issues as of late, though they were the current owers of pong if they aren't anymore. Pong definitely didn't go to Warner Bros since Midway didn't own the rights to it when they shut down.

 

Edit: Looks like the current "Atari" still owns the rights to Pong since they are still selling the iOS Greatest Hits app and have a new game called Pong World.

Edited by BrianC
Link to comment
Share on other sites

Wow, glad you decided to come back to this! Looks nice!

Thanks!

 

No, Midway only had the rights to the post crash "Atari Games" arcade games (there was a legal battle over this and Midway lost the rights to the older Atari games). All of the arcade games before then went to infogrames (which is now called Atari). However, "infoatari" has had finacial issues as of late, though they were the current owers of pong if they aren't anymore. Pong definitely didn't go to Warner Bros since Midway didn't own the rights to it when they shut down.

 

Edit: Looks like the current "Atari" still owns the rights to Pong since they are still selling the iOS Greatest Hits app and have a new game called Pong World.

 

Really sad what happens with the Atari brand until today.

 

What? No votes for "Super Bong"?

Hehe, let me wait for the C&D letter from Infogames first.

Edited by LS_Dracon
Link to comment
Share on other sites

New version, what's new:

 

-Color cycling on the score once the game ends (game over)

 

-Ball's horizontal speed increase every 7 hits, there's no limit of how fast it can be, I'll leave it for fun purpose, next demo I'll fix a speed limit. After 44 hits the game crashes, who can do it?

 

Invincible cpu AI just to test the new horizontal speed changes.

 

Next version I'll try to implement AI (finally) and fix bugs. Actually I'm already working on AI but was disabled for now. I'm aware of the bug where ball get crazy sometimes (rolling vertically), I need to figure why it's happens, very difficult to track.

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

Any chance you'll take this to the next level and go interlaced?

http://www.atariage....ws/Interlacing/

It's a good idea, following Supercat tip to split kernel into zones, I can free up some bytes and duplicate sprite resolution.

 

Doesn't interlacing drop the frame rate to 30Hz, instead of the 60Hz?

 

You need at least 2 frames (30Hz) to show all details of the image. You can't see all sprite details when it's moving anyway so I can keep the motion at 60Hz.

I'm going to make some tests and see if it worth.

Edited by LS_Dracon
Link to comment
Share on other sites

Hi people.

As promised, here is the AI code.

 

This new code is better than what I did before, the player moves and feels like controlled by human.

 

It's very hard, so I need feedbacks to know if this AI level is ok or I need to make it a bit easier.

 

The logic of the code is on the image below, if the ball is on red area, the player will not move, if ball goes to cyan area, player move to up and if ball goes to yellow area, player moves down.

Also the speed of player changes according ball distance, if ball is far, player moves slower, just like how I play the game. Also there's no need to move the player if the ball is going to another direction, it's not makes sense and don't feel like a human playing.

 

There's a bug when the player goes too much to down and then appear at top, I'll fix it.

 

Besides that, I have no extra rom for interlacing screen, sorry. I need the last bytes to code game mode select for Player vs Player or Player vs Cpu.

Edit : As you can see in the score, the CPU beat me by 1 point :P

Enjoy.

post-10940-0-64255800-1375044150_thumb.jpg

Edited by LS_Dracon
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...