Before tackling the energy bar code though, I needed to code some collision detection so when the player touches a meanie, some energy can be taken away! As a stop gap measure, I used the C64 built-in sprite hardware collision detection register $D01E, which will be changed in the future for reasons I won't explain right now!
Now a collision between sprites can be detected, it's time to subtract some energy! The way I've gone about this is to keep the amount of energy stored in a 'variable' which in my code is currently called 'ply_energy' and which is set to '33' or '$21' at the start of the game. Why such a strange number? Well the energy bar length represented in blocks at the bottom of the screen after the word energy, is 33 chars wide! There you go, count the blocks...
Now, being new to C64 coding, I've absolutely no idea if there is a standard way of doing this but my solution to the energy bar has been to set up the colour RAM at the beginning of the level to the red, yellow and green that you can see and which always remains the same, but then replace each block character in the screen RAM with a space character when energy is taken away.
So quite simply, upon the player touching a meanie, the energy in variable 'ply_energy' is subtracted by one, then the whole energy bar is deleted and redrawn to the new value. This is my delete and redraw the energy bar code:
; energy bar drawing subroutine ----------------------------------
energy_bar
ldy #$00 ; update the energy bar!
lda #$20
clr_energy_loop ; clear the row of chars that display the
sta $07c7,y ; energy bar by printing a line of
iny ; blank spaces!
cpy #$21
bne clr_energy_loop
ldy #$00
lda #$40
drw_energy_loop ; now redraw the energy bar with char $40
sta $07c7,y ; (the block making up the bar)
iny ; equal to the amount of energy
cpy ply_energy ; remaining
bne drw_energy_loop
rts ; go back to wherever this was called from!
And for now, that'll do because it appears to work just fine and dandy!
Next diary entry...
No comments:
Post a Comment