Jump to content
IGNORED

Anyone think Ballblazer is possible on the 2600?


Recommended Posts

Then we would not have any color left for the other player's ship. So 1 player, its missile and the ball are the way to go here.

Oops. thats right. Another cost reducing feature there ;D

 

I thought about a reflected PF, maybe using PF1 and PF2 only. Though I am not sure which solution will be better combinable with smoothing.

I thought about using asymmetric playfield.

 

The grid could be stored into tables. I could use 6 bytes per line for: PF0,PF1,PF2,PF0,PF1,PF2. For storing every version for a line like 11110000111100001111 etc. I would need 4x6 bytes (for 11110000... 011110000... 001111... etc.), flip colors for more versions. for a 20 line grid I need 4x6 + 5x6 + 6x6 .... + 24x6 = 1764 bytes so that would be doable.

 

code could look like

	LDX OFFSET_LINE0;2

LDA LINE0,X;4
STA PF0;3
INX;2

LDA LINE0,X;4
STA PF1;3
INX;2

LDA LINE0,X;4
STA PF2;3
INX;2

LDA LINE0,X;4
STA PF0;3
INX;2

LDA LINE0,X;4
STA PF1;3
INX;2

LDA LINE0,X;4
STA PF2;3

52 cycles

 

Not sure here too. Maybe a combined solution (2 color writes and 4-6 PF writes per scanline).

I should give it a try, it definitly will make the code less butt-ugly then the current.

Edited by roland p
Link to comment
Share on other sites

I thought about using asymmetric playfield.

The grid could be stored into tables. I could use 6 bytes per line for: PF0,PF1,PF2,PF0,PF1,PF2. For storing every version for a line like 11110000111100001111 etc. I would need 4x6 bytes (for 11110000... 011110000... 001111... etc.), flip colors for more versions. for a 20 line grid I need 4x6 + 5x6 + 6x6 .... + 24x6 = 1764 bytes so that would be doable.

Can you explain the math behind that? Are you talking about the different possible configurations in each PF row?

 

I don't think ROM tables will work here, especially when we also consider the higher resolution required for smoothing. So either we calculate on-the-fly inside the kernel or we precalculate into RAM outside.

 

BTW: The original Atari 5200 game displayes 47 rows for the board. The topmost grid is 16 pixel wide, increasing two pixel each row and using a total screen width of 168 pixel. So in the upmost row, 11 squares are displayed, at the bottom only 2 or 3.

Link to comment
Share on other sites

I thought about using asymmetric playfield.

The grid could be stored into tables. I could use 6 bytes per line for: PF0,PF1,PF2,PF0,PF1,PF2. For storing every version for a line like 11110000111100001111 etc. I would need 4x6 bytes (for 11110000... 011110000... 001111... etc.), flip colors for more versions. for a 20 line grid I need 4x6 + 5x6 + 6x6 .... + 24x6 = 1764 bytes so that would be doable.

Can you explain the math behind that? Are you talking about the different possible configurations in each PF row?

Yes.

 

Assume the first line has 4 pixels on and 4 pixels of. If you want to store all versions of the line, you would first need 4 versions:

1111000011110000111100001111000011110000 (0)

0111100001111000011110000111100001111000 (1)

0011110000111100001111000011110000111100 (2)

0001111000011110000111100001111000011110 (3)

 

When the playfield is scrolled, the following lines will be displayed: 0 1 2 3 and then with colors inverted again: 0 1 2 3 and then repeat the sequence.

 

I use 6 bytes instead of 5 because of the weird PF0 behaviour.

 

I don't think ROM tables will work here, especially when we also consider the higher resolution required for smoothing. So either we calculate on-the-fly inside the kernel or we precalculate into RAM outside.

There are only 128 bytes of RAM right? Or can memory be added? I found no way yet to do everything in the kernel, 76 cycles is just not much...

Link to comment
Share on other sites

...

I use 6 bytes instead of 5 because of the weird PF0 behaviour.

Understood.

 

There are only 128 bytes of RAM right? Or can memory be added?

Currently no boards with additional RAM exist, but there is one in the pipeline. Also one could use the Supercharger, which offers a lot of additional RAM.

 

Anyway, I would prefer doing the game inside the usual 128 bytes limitation. Especially new boards with more RAM seem like cheating to me. And when using the Supercharger, you cannot make carts.

 

I found no way yet to do everything in the kernel, 76 cycles is just not much...

That's part of the fun! Finding the necessary cycles. :)

Link to comment
Share on other sites

Some further brainstorming:

 

Original 5200 version: 168x47 pixel board, topmost square 16 pixels wide -> 11 squares horizontally, bottom square 16+(47-1)*2 = 108 pixel wide. 21 squares horizontally in total.

 

Converted into an Atari 2600 screen with 152 pixel (8 pixel lost due to HMOVE blanks), the topmost square would have to be ~15 pixel wide. Then we would get 11 squares horizonally too. And the bottom square would be maybe 101 pixel wide. And the screen would be 44 pixel tall.

 

Displaying 11 squares in the topmost row seems almost impossible now. So either we cheat there (so that nobody notices) or we increase the square size.

 

For cheating, we could split the kernel into 2 (or more) parts, which are drawn differently. E.g. at the very top (~25%), at the left and right corners, we "simulate" the pattern with a combination of repeated objects and PF graphics. And below we switch to a (more) correct representation. So that maybe 10% of the screen are cheated and the other 90% are correct.

 

Or, if we increase the square size to e.g. 24 pixel (7 squares) for the topmost row. To maintain the same scope from the total game area visible, we would reduce the 21 horizontal squares to e.g. 14 (21*16/24).

Link to comment
Share on other sites

Thomas,

 

I think I'll stay with the 'change the background on the fly' method. It's the only thing that works at the moment. it does checkerboard+brown borders + possibly upgradable to antialiassing. It just takes too much time to start all over again (I'm just a beginner, I've to lookup every opcode/register/dasm feature). Please feel free to experiment yourself. I hope you're not upset, I really appriciate you're enthousiasm on the subject.

 

Roland.

Link to comment
Share on other sites

I hope you're not upset, I really appriciate you're enthousiasm on the subject.

I am not upset, not at all. Actually I had (and still have!) a lot of fun with this. I hope you don't mind, if I continue working on this too?

 

BTW: Should I open my own thread for this? That way I won't disturb your project.

Link to comment
Share on other sites

I am not upset, not at all. Actually I had (and still have!) a lot of fun with this. I hope you don't mind, if I continue working on this too?

No problem! I don't remember having the exclusive rights on homebrewing Ballblazer :D

 

BTW: Should I open my own thread for this? That way I won't disturb your project.

Well, this isn't actually my thread too. But seperating the two will keep things easier to follow I guess.

Link to comment
Share on other sites

Hi Thomas,

 

I think that using 2 missles and 1 ball would make things really smooth.

 

a) PF graphics (slightly lower resolution, but easier to handle)

Hi Thomas, how would you do the ceckerboard when using PF graphics? and are the brown borders still possible?

 

 

I really think these discussions on higher-resolution grids are kind of unnecessary. I'd rather see work put into making the chequerboard functional, with inertia/acceleration, and put some sprites up for the ship/ball. I truly think the resolution is nice AS IS. In fact, I kind of like the slight chunkiness, it adds character. Better to spend the time making it somewhat playable than fiddling about with arcane techniques for line smoothing. Those sorts of things can come later, IF cycles are available.

 

My 2c.

Link to comment
Share on other sites

Back on track. Changes so far:

 

- left/right Accelaration is now possible! Be careful, no collision detects yet.

- Increased internal horizontal resolution to 256 pixels per tile. This makes the calculations (acceleration, positions of players etc.) a lot easier. Hint: Try to move slow, it looks very cool.

- Vectors for moving the checkerboard are now calculated on the fly, in the overscan, as it would consume now 1K of rom if precalculated.

- Vectors are pretty accurate now, only a glitch when you cross a tile.

 

I've the feeling that the checkerboard which runs at 60fps is much faster than the 5200 version, which looks like it runs at 30fps.

ballblazer.bin

Edited by roland p
Link to comment
Share on other sites

Back on track. Changes so far:

 

- left/right Accelaration is now possible! Be careful, no collision detects yet.

- Increased internal horizontal resolution to 256 pixels per tile. This makes the calculations (acceleration, positions of players etc.) a lot easier. Hint: Try to move slow, it looks very cool.

- Vectors for moving the checkerboard are now calculated on the fly, in the overscan, as it would consume now 1K of rom if precalculated.

- Vectors are pretty accurate now, only a glitch when you cross a tile.

 

I've the feeling that the checkerboard which runs at 60fps is much faster than the 5200 version, which looks like it runs at 30fps.

 

This works as well as I hoped/expected it would. Well done, you've already done a remarkable job. The inertia/acceleration is good. Now it's time to get the checkerboard in, no?

 

Cheers

A

Link to comment
Share on other sites

Excellent! :thumbsup: I also would like to see the checkerboard soon.

 

But while you are are stuck, how about adding friction? Reduce speed by a constant or speed based (e.g by 1/(2^n) of the current speed). This should be easy to implement and work very well.

Link to comment
Share on other sites

Excellent! :thumbsup: I also would like to see the checkerboard soon.

 

But while you are are stuck, how about adding friction? Reduce speed by a constant or speed based (e.g by 1/(2^n) of the current speed). This should be easy to implement and work very well.

 

Nothing has been easy so far :P

I checked Ballblazer for the 5200 again. It looks like:

- Ship's acceleration is lesser at higher speed, until accelleration reaches 0

- Ship's de-acceleration (Brakes) is very high.

- The friction is lower at low speeds. Ship keeps moving slowly after deacceleration

Link to comment
Share on other sites

Nothing has been easy so far :P

Easy as an Atari 2600 category. :D

 

I checked Ballblazer for the 5200 again. It looks like:

- Ship's acceleration is lesser at higher speed, until accelleration reaches 0

- Ship's de-acceleration (Brakes) is very high.

- The friction is lower at low speeds. Ship keeps moving slowly after deacceleration

That sounds like some speed related friction as I described above.

Link to comment
Share on other sites

We now have a checkerboard!

 

Excellent work - that looks awesome! I'm amazed at what you have been able to accomplish using just playfield colouring and delays.

 

I notice that the checkerboard actually extends underneath the playfield at the edges (Alt-N in Stella). I don't suppose it would be possible to make it slightly wider?

 

Chris

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