Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Draculinio
Draculinio

Posted on

     

Writing a NES game day 12, The Aqualate!

Now that the main character can shoot, it should shoot something, so I need to create enemies.
When I was starting, my 7 year old daughter passed by my computer, asked me what I was doing and told me that she wanted to create the testing monster.

Image description

She called this "The Aqualate". I needed this to be on screen and needed to make it move on its own, so I needed to create some of this beautiful code.

First of all, I need 3 variables, one for the position in X, one for the position in Y and one for the stage of movement it is (we will go over it briefly).

 ax: .res 1 ; Aqualate x position ay: .res 1 ; Aqualate y position al: .res 1 ; Aqualate in the loop
Enter fullscreen modeExit fullscreen mode

For now I put some initial values to place it somewhere

LDA #$50STA axLDA #$80STA ay
Enter fullscreen modeExit fullscreen mode

Now, I need a fixed pattern for the enemy, let's say an easy one, so let's make the Aqualate move in squares. Here comes the third variable into the game. The position status, the position has 4 status ($00, $01, $02 and $03), every status has a place and in every cicle the al variable increments in one and changes the place of ay and ax. If incrementing the variable results in $04, then it goes to $00 again.

aqualate:    LDA #$00 ;in the original position x+1, y-1    CMP al    BNE :+    LDA ax    CLC    ADC #05    STA ax    LDA ay    SEC    SBC #05    STA ay    :    LDA #$01 ;position 2 x+1, y+1    CMP al     BNE :+    LDA ax    CLC    ADC #05    STA ax    LDA ay    CLC    ADC #05    STA ay    :    LDA #$02 ;position 3 x-1, y+1    CMP al    BNE :+    LDA ax    SEC    SBC #05    STA ax    LDA ay    CLC    ADC #05    STA ay    :    LDA #$03 ; position 4 x-1, y-1    CMP al    BNE :+    LDA ax    SEC    SBC #05    STA ax    LDA ay    SEC    SBC #05    STA ay    :    ;update    LDA al    CLC    ADC #01    STA al    LDA #05    CMP al    BNE :+    LDA #00    STA al    :    RTS
Enter fullscreen modeExit fullscreen mode

And now in the engine zone, in every cicle I need to call this function

JMP aqualate
Enter fullscreen modeExit fullscreen mode

The last part is placing it into the screen, for that I assigned the aqualate the addresses from $0214 to $0217. So I only need to put this into the updatesprites function

;Aqualate ($0214 to $0217)    LDA ay    STA $0214    LDA #$02    STA $0215    LDA #$00    STA $0216    LDA ax    STA $0217
Enter fullscreen modeExit fullscreen mode

Image description

And about Megaman 1, well, I could beat Cutman, but the rest is terribly hard. I have no skills :(

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

Fenicio del código. Retro developer, el que hace que cursorjobs.com sea lo que es.
  • Location
    Buenos Aires, Argentina
  • Work
    Owner of cursorjobs
  • Joined

More fromDraculinio

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp