Jump to content

  • Log In with Google      Sign In   
  • Create Account





A C64 Game - Step 80

Posted by Endurion, in C64 08 December 2012 · 868 views

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

Attached Image

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!


Previous Step Next Step

Attached Files






Ooooooo What could be inside that room?
Well, unfortunately you'll have to wait until next year.
Or look at the earlier served Retro Remakes site ;)

December 2014 »

S M T W T F S
 123456
78910111213
1415161718 19 20
21222324252627
28293031   
PARTNERS