Look at two pixels wide when detecting collisions with a shot. I believe this solves the problem of shots passing through a centipede.

This commit is contained in:
Jeremy Rand 2021-01-03 23:57:21 -05:00
parent a84d135819
commit 50c924e1ff
2 changed files with 19 additions and 18 deletions

View File

@ -3,14 +3,15 @@ BUGS
This is a list of the software bugs (as opposed to the bugs in the game that you shoot) that still need attention:
* It is possible to shoot between two segments of a centipede. The problem is that there are black pixels between the segments and if things are timed just right (or just wrong), the shot can slot in at those black pixels and end up missing both segments.
* I am not sure how much can be done about this given how collisions are detected.
* The sound is muddy at times on real HW. Especially when lots of stuff is going on, the sound ends up coming out garbled. This isn't happening on emulators where everything is always quite clear. Perhaps I am reaching some limit of the Ensoniq. Do I need to reduce some sampling frequencies perhaps?
FIXED
=======
* It is possible to shoot between two segments of a centipede. The problem is that there are black pixels between the segments and if things are timed just right (or just wrong), the shot can slot in at those black pixels and end up missing both segments.
* I am not sure how much can be done about this given how collisions are detected.
* I have implemented a fix which I believe solves this problem. The shot is a single pixel wide which allows it to slot in between a segment. I have changed the collision code to detect a collision if it is also if there is any pixel on in the byte (ie two pixels wide). That should ensure that the shot cannot pass through a centipede. Note it also makes things slightly easier to hit where before it might have passed right next to.
* I have seen some mushrooms appear suddenly. Sometimes, if I am shooting, the shot "hits" an invisible mushroom which then becomes visible. My guess is that there is something wrong with the code which turns a centipede segment into a mushroom when shot and the tile isn't correctly marked dirty all the time.
* In theory, there shouldn't be a collision with an invisible mushroom but what happens is that when the shot overlaps with the tile, it becomes dirty. At that point, the mushroom will appear on the next frame and a collision can then occur.
* On the latest build (0136579125034f41f8415b496d5ba706e86d65d9) on real HW, I can play a game and finish that game. But when I try to start a second game, I crash. The stack looks corrupted and execution is way off in the weeds somewhere. This isn't happening on either emulator.

View File

@ -100,13 +100,13 @@ drawShot entry
stz collision
lda $0,s
_collision #$000f,#$0
_collision #$00ff,#$0
and #$fff0
ora #$0004
sta $0,s
lda $a0,s
_collision #$000f,#$a0
_collision #$00ff,#$a0
and #$fff0
ora #$0004
sta $a0,s
@ -116,13 +116,13 @@ drawShot entry
tcs
lda $0,s
_collision #$000f,#$0
_collision #$00ff,#$0
and #$fff0
ora #$0004
sta $0,s
lda $a0,s
_collision #$000f,#$a0
_collision #$00ff,#$a0
and #$fff0
ora #$0004
sta $a0,s
@ -132,13 +132,13 @@ drawShot entry
tcs
lda $0,s
_collision #$000f,#$0
_collision #$00ff,#$0
and #$fff0
ora #$0004
sta $0,s
lda $a0,s
_collision #$000f,#$a0
_collision #$00ff,#$a0
and #$fff0
ora #$0004
sta $a0,s
@ -148,10 +148,10 @@ drawShot entry
tcs
lda $0,s
_collision #$000f,#$0
_collision #$00ff,#$0
lda $a0,s
_collision #$000f,#$a0
_collision #$00ff,#$a0
_spriteFooter
@ -179,13 +179,13 @@ drawShotShift entry
stz collision
lda $0,s
_collision #$00f0,#$0
_collision #$00ff,#$0
and #$ff0f
ora #$0040
sta $0,s
lda $a0,s
_collision #$00f0,#$a0
_collision #$00ff,#$a0
and #$ff0f
ora #$0040
sta $a0,s
@ -195,13 +195,13 @@ drawShotShift entry
tcs
lda $0,s
_collision #$00f0,#$0
_collision #$00ff,#$0
and #$ff0f
ora #$0040
sta $0,s
lda $a0,s
_collision #$00f0,#$a0
_collision #$00ff,#$a0
and #$ff0f
ora #$0040
sta $a0,s
@ -211,13 +211,13 @@ drawShotShift entry
tcs
lda $0,s
_collision #$00f0,#$0
_collision #$00ff,#$0
and #$ff0f
ora #$0040
sta $0,s
lda $a0,s
_collision #$00f0,#$a0
_collision #$00ff,#$a0
and #$ff0f
ora #$0040
sta $a0,s
@ -227,10 +227,10 @@ drawShotShift entry
tcs
lda $0,s
_collision #$00f0,#$0
_collision #$00ff,#$0
lda $a0,s
_collision #$00f0,#$a0
_collision #$00ff,#$a0
_spriteFooter