Now that I have my first version of the character, and he can move, I need to make him so something else. Remember that you can check the status of the code in my github repo.
I created a simple sprite for bullet which is a 2 colors circle (redoing sprites into something better is a problem for future me) and created 3 variables for this: sx (shoot in x axis), sy (shoot in y axis) for the position of the shoot every frame and a shootStatus to see if it is actually firing something or not (maybe in the future I can delete this variable and use a special value in sx and clean 1 byte?)
For making this work, I added the shoot behaviour to button B in the engine sector:
bButton:
CMP #%01000000
BNE bDone
LDA #$01
STA shootStatus
LDA p2x
STA sx
LDA p1y
STA sy
bDone:
After that, I see if the shooting is active and I jump to a shooting "function"
;Shooting update
LDA #$01
CMP shootStatus
BNE :+
JMP shoot
:
And then the shoot part:
shoot:
;for now it will only shoot to the right.
LDA sx
CLC
ADC #01
STA sx
RTS
As you can see I place a lot of comments, the code in assembly is not that "self readable" as other languages.
Now, I have to update the sprites refresh to make all this visible.
LDA sy
STA $0210
LDA sx
STA $0213
LDA #$00
STA $0212
LDA #$01
CMP shootStatus
BEQ isShooting
LDA #$FC
STA $0211
JMP shootDone
isShooting:
LDA #$30
STA $0211
shootDone:
As it is a one tile sprite, I only need 4 positions in memory, so I assigned it the $0210 to $0213 space.
(tomorrow we will talk about the other thing that appears on the screen)
On the other hand, to keep me MORE motivated I am playing some nes games lately. Not only Final Fantasy in japanese to learn, but I started Rockman (Megaman)
If you have a child that loves video games, show them the old Nintendo games, for them this all will be in nightmare level.
Top comments (2)
Loving this series!! 🔥
You're making progress. Keep going!