Jump to content
IGNORED

Anyone think Ballblazer is possible on the 2600?


Recommended Posts

  • 1 month later...

I've now made some rotofoils.

 

I wanted to make them scale nicely when you go back/forward, so they grow one pixel left and right when they move a scanline down. The downside of this is that the rotofoils look too small when they are at the horizon (just compare them with a tile and see).

I'm afraid that if I do it the correct way, the scaling will be less smooth. Please let me now what you think.

 

I also made the rotofoils gently dissapear at the horizon, just like the original ballblazer.

 

Movement left/right is not implemented yet.

 

 

How to test: move forward/backward (but not too much :))

post-15728-0-73118000-1312226109_thumb.png

rotofoil_test.bin

Link to comment
Share on other sites

...The downside of this is that the rotofoils look too small when they are at the horizon (just compare them with a tile and see).

I really wouldn't have noticed if you hadn't pointed it out, and nobody is going to care when the game is playing.

 

Good progress! :thumbsup:

Link to comment
Share on other sites

This one is handcrafted (the previous one was calculated), just tweaking around until it looks good.

 

By handcrafted do you mean multiple copies of the sprite at different "zoom" levels?

Yes, for each "zoom level" (every time the rotofoil gets a scanline closer) there is a different copy of the sprite. I figured out this would be the fastest way to make the rotofoils.

Link to comment
Share on other sites

This one is handcrafted (the previous one was calculated), just tweaking around until it looks good.

 

By handcrafted do you mean multiple copies of the sprite at different "zoom" levels?

Yes, for each "zoom level" (every time the rotofoil gets a scanline closer) there is a different copy of the sprite. I figured out this would be the fastest way to make the rotofoils.

 

Hahahahah!! Why don't you just say it's Pre-rendered MipMapping!

Is it possible to add some detail on the "closest" or largest renderings? Like a window or just some stripes of a sort? Something like in the first rotofoil test?

ballblazer_rotofoil_test.bin

also, doesn't the first test have faster grid-scrolling action too?

 

But either way, this is really really looking up! Just take your time to make it perfect and have fun while doing so.

Edited by Keatah
Link to comment
Share on other sites

Yes, for each "zoom level" (every time the rotofoil gets a scanline closer) there is a different copy of the sprite. I figured out this would be the fastest way to make the rotofoils.

 

Do you think it'll have much impact on the ROM size?

The rotofoil is now about 1.5K, so this fits in one bank, however, if I want more representations of the rotofoil it might be a problem. But for now, I keep it simple.

 

Hahahahah!! Why don't you just say it's Pre-rendered MipMapping!

Is it possible to add some detail on the "closest" or largest renderings? Like a window or just some stripes of a sort? Something like in the first rotofoil test?

ballblazer_rotofoil_test.bin

also, doesn't the first test have faster grid-scrolling action too?

 

But either way, this is really really looking up! Just take your time to make it perfect and have fun while doing so.

:D

 

I can add windows by cutting a bit out of the current sprites.

 

The first test seems faster indeed. I checked with the 5200 version and that version seems to be even faster!

 

I have to tweak a bit with friction and acceleration I guess. I now chose values which produced a checkerboard that looks nice in motion.

Edited by roland p
Link to comment
Share on other sites

I was curious how you planned on putting in the goal posts and ball?

I want to use the missiles for the goalpost and the ball for the 'plasmorb'. The width will have coarse steps but the height will have fine steps so I hope it looks ok.

Edited by roland p
Link to comment
Share on other sites

  • 2 weeks later...

Is the "DEC $84" only to get the 5 cycles delay or is the counter actually used? If not, you could use "PHA:PLA" instead of "DEC $84:NOP" to save 1 byte for every occurrence.

Thanks, it is used for delay so it can be optimised. This is my sleep macro, I removed the LDA instructions because they trash the A register:

 

	MAC _SLEEP            ;usage: SLEEP n (n>1)
.CYCLES     SET {1}

IF .CYCLES < 2
	ECHO "MACRO ERROR: '_SLEEP': Duration must be > 1"
	ERR
ENDIF

IF .CYCLES = 2
	NOP
ENDIF

IF .CYCLES = 3
	NOP 0
ENDIF

IF .CYCLES = 4
	NOP
	NOP
ENDIF

IF .CYCLES = 5
	DEC DUMMY
ENDIF

IF .CYCLES = 6
	;lda ($80,X)
	NOP
	NOP
	NOP
ENDIF

IF .CYCLES = 7
	PHA
	PLA
ENDIF

IF .CYCLES = 8
	;lda ($80,X)
	;NOP
	NOP
	NOP
	NOP
	NOP
ENDIF

IF .CYCLES = 9
	DEC DUMMY
	NOP
	NOP
ENDIF

IF .CYCLES = 10
	DEC DUMMY
	DEC DUMMY
ENDIF

IF .CYCLES = 11
	DEC DUMMY
	NOP
	NOP
	NOP
;		STA $8000,X	;5
;		LDA ($80,X)	;6
ENDIF

IF .CYCLES = 12
	JSR WasteTime12
ENDIF

IF .CYCLES = 13
	DEC DUMMY
	DEC DUMMY
	NOP 0
	;STA $8000,X
	;LDA ($80,X)
	;NOP
ENDIF

IF .CYCLES >= 14
	JSR WasteTime14 - [.CYCLES - 14]
ENDIF

ENDM

 

I borrowed some code from this topic:

 

http://www.atariage.com/forums/topic/180714-request-for-programming-tips/page__view__findpost__p__2264304

Link to comment
Share on other sites

That is a fine macro. I may have to use that one someday-- thanks for sharing.

 

-John

 

It needs this table:

;WasteTime SUBROUTINE 
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80
    .byte $80    ;+0    36   cycles 
    .byte $80    ;+1    35 
    .byte $80    ;+2    34 
    .byte $80    ;+3    33 
    .byte $80    ;+4    32 
    .byte $80    ;+5    31 
    .byte $80    ;+6    30 
    .byte $80    ;+7    29 
    .byte $80    ;+8    28 
    .byte $80    ;+9    27 
    .byte $80    ;+10   26 
    .byte $80    ;+11   25 
    .byte $80    ;+12   24 
    .byte $80    ;+13   23 
    .byte $80    ;+14   22 
    .byte $80    ;+15   21 
    .byte $80    ;+16   20 
    .byte $80    ;+17   19 
    .byte $80    ;+18   18 
    .byte $80    ;+19   17 
    .byte $80    ;+20   16 
    .byte $04    ;+21   15
WasteTime14
    nop          ;+22   14 
WasteTime12
    rts          ;+23   12

 

Thanks to Omegamatrix :)

Edited by roland p
Link to comment
Share on other sites

Nice. I used to have 2 Wait... sub routines (one ofr the even and one for the odd delayes), so this one evens saves on byte. Also in the macro

  IF .CYCLES = 11
               DEC DUMMY
               NOP
               NOP
               NOP

is the same pattern, hence

  IF .CYCLES = 11
               PHA
               PLA
               NOP
               NOP

 

saves one more. Not sure if it's relevant for 32 KB, but who knows.

 

BTW: The way you bounce off at the playfield limits feels and looks really cool!

Link to comment
Share on other sites

  • 2 weeks later...

Now I've included:

 

- horizontal motion of the rotofoil, including motion behind the horizon.

- rotofoil scales a little at the horizon.

- masking left/right of grp0 and grp1

 

The masking of the double and quad sized rotofoils may seem a little weird, but this is the best I could do.

 

I have to fix a few glitches but the rotofoil display seems pretty much finished now. Maybe I could increase the resolution of vertical placement by alternating the STA GRP0 and STA GRP1 and use VDEL for nudging the rotofoil a scanline up/down.

rotofoil_test2.bin

post-15728-0-19632100-1314370011_thumb.png

Edited by roland p
  • Like 3
Link to comment
Share on other sites

Cool! :thumbsup:

 

I implemented the same masking for Chun Li as well. Works great for single sized sprites, and while it looked odd at first for double and quad sprites, it is much better than the wrap-around graphics or having sprites disappear as soon as they touch the edge of the screen.

Link to comment
Share on other sites

This is cool. I'm pretty sure there's not enough raster time left for this, but maybe you might use the M0/M1 to overlap the 0..3 clipped pixels at position 0.33 and 156..159. This would work at least in case there is no transparent area inside the rotofoil.

Edited by JAC!
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...