.dw nmi .dw reset .dw 0
; Procedura wywoływana w kodzie inicjalizacyjnym init_jump_variables: lda #$00 sta jumping lda #$d0 ; Gdy postać stoi na ziemi sta coord_y lda #$00 sta velocity lda #$0a sta acceleration lda #$00 sta jump_dir ;początkowy kierunek skoku: ; *#$00 - W górę ; *#$01 - W dół ; Procedura skoku postaci wywołowywana w każdej klatce handle_jump: ; Na początek należy sprawdzić czy postać skacze lda jumping cmp #$01 bne end_handle_jump jump_up: lda jump_dir cmp #$00 bne jump_down lda velocity ; \ clc ; \ v = v + a adc acceleration ; / sta velocity ; / lda coord_y ; \ sec ; \ y = y - v sbc velocity ; / sta coord_y ; / ; ; a = coord_y cmp #$a0 ; if(coord_y <> 160) bne update_sprite_y ; W następnym NMI bohater ma się nadal wznosić ; else lda #$01 ; Ustaw kierunek na przeciwny sta jump_dir ; jmp update_sprite_y jump_down: lda jump_dir cmp #$01 bne jump_up lda velocity ; \ sec ; \ v = v - a sbc acceleration ; / sta velocity ; / lda coord_y ; \ clc ; \ y = y + v adc velocity ; / sta coord_y ; / cmp #$d0 ; if(coord_y <> 208) bne update_sprite_y ; W następnym NMI bohater ma nadal spadać ; else lda #$00 ; Ustaw kierunek na przeciwny (zostanie on użyty przy następnym skoku) sta jump_dir ; lda #$00 sta jumping update_sprite_y: lda coord_y clc adc #$08 sta $0200 sta $0204 lda coord_y sta $0208 sta $020C end_handle_jump: rts