Lack of time, part 2
Turns out the lack of time was also occuring during the overscan when processing fireball collisions.
The fireballs are 2 pixels wide and 4 pixels tall; but, because I'm using a 2 line kernel, I can consider it 2 pixels tall.
in the original routines, the process for fireball collisions on the grey castle was:
if BrickHit(x,y) then RemoveBrick(x,y) elseif BrickHit(x,y+1) then RemoveBrick(x,y+1) elseif Brick(x+1,y) then RemoveBrick(x+1,y) else BrickHit(x+1,y+1) then RemoveBrick(x+1,y+1) endif
where x,y is the top left of the fireball and x+1,y+1 is the bottom right of the fireball.
This weekend I was playing Super Breakout for the High Score Club and noticed that the ball would occasionally pass thru a brick. That lead me to realize they only tested the left side of the ball when a collision occured. I decided to do the same. After making the change, I ran MM in Stella for a few hours today with the following break in the debugger to confirm the screen problem had cleared up:
breakif { _scan == #263 }
Since I'm only testing 1 corner, I picked the corner closest to the king for each castle: grey uses x,y, blue uses x+1,y, purple uses x,y+1 and green uses x+1,y+1.
It works OK, but I'm not totally thrilled with the change. If processing time allows, I plan to revise the routines to check the 2 opposite corners of a fireball, grey would either check(x+1,y) and (x,y+1), or possible (x,y) and (x+1,y+1) depending on how tests go.
5 Comments
Recommended Comments