• Advertisement
  • entries
    104
  • comments
    101
  • views
    257787

A C64 Game - Step 80

Sign in to follow this  

1597 views

Did you notice the huge door in the background? It's about time it opens!

step80.png

That's actually pretty simple. At the jump-to-next level code we add a check. Whether the open door animation is shown depends on a bit in the LEVEL_CONFIG byte.

GoToNextLevel 
          lda LEVEL_CONFIG 
          and #$04 
          beq .NoDoorAnim 
          jsr DoorAnim
          
.NoDoorAnim



The actual animation is straight forward. The door location is hard coded, and we simply copy the characters one step to the outer side and replace the innermost characters with empty space.

Notice that we use a method which is not possible that easy in todays code: We have a local code loop until the door is completely opened.
Since there are no events to be handled, messages to be retrieved or other OS specific code required, we can do that.

;------------------------------------------------------------
;open door animation
;------------------------------------------------------------
!zone DoorAnim
DoorAnim 
          lda #0 
          sta LEVEL_DONE_DELAY
          
.DoorAnimLoop 
          jsr WaitFrame 
          inc LEVEL_DONE_DELAY 
          lda LEVEL_DONE_DELAY 
          and #$07 
          bne .DoorAnimLoop 
          
          ;open door (16,11) 
          lda #11 
          sta PARAM2 
- 
          ldy PARAM2 
          lda SCREEN_LINE_OFFSET_TABLE_LO,y 
          sta ZEROPAGE_POINTER_1 
          lda SCREEN_LINE_OFFSET_TABLE_HI,y 
          sta ZEROPAGE_POINTER_1 + 1 
          ldy #17 
          lda (ZEROPAGE_POINTER_1),y 
          dey 
          sta (ZEROPAGE_POINTER_1),y 
          ldy #18 
          lda (ZEROPAGE_POINTER_1),y 
          dey 
          sta (ZEROPAGE_POINTER_1),y 
          ldy #19 
          lda (ZEROPAGE_POINTER_1),y 
          dey 
          sta (ZEROPAGE_POINTER_1),y 
          
          lda #32 
          ldy #19 
          sta (ZEROPAGE_POINTER_1),y 
          ldy #22 
          lda (ZEROPAGE_POINTER_1),y 
          iny 
          sta (ZEROPAGE_POINTER_1),y 
          ldy #21 
          lda (ZEROPAGE_POINTER_1),y 
          iny 
          sta (ZEROPAGE_POINTER_1),y 
          ldy #20 
          lda (ZEROPAGE_POINTER_1),y 
          iny 
          sta (ZEROPAGE_POINTER_1),y 
          lda #32 
          ldy #20 
          sta (ZEROPAGE_POINTER_1),y 
          
          inc PARAM2 
          lda PARAM2 
          cmp #21 
          bne - 
          
          ; 
          lda LEVEL_DONE_DELAY 
          lsr 
          lsr 
          lsr 
          cmp #4 
          bne .DoorAnimLoop 
          
          ;door is fully open now
- 
          jsr WaitFrame 
          inc LEVEL_DONE_DELAY 
          lda LEVEL_DONE_DELAY 
          cmp #200 
          bne - 
          
          rts


Also, since I'm going on vacation this tutorial takes a break until next year. Thanks for your support so far, have fun!
 

step80.zip


Previous Step Next Step

 
Sign in to follow this  


2 Comments


Recommended Comments

Well, unfortunately you'll have to wait until next year.
Or look at the earlier served Retro Remakes site ;)

Share this comment


Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Advertisement