dos33fsprogs/demos/trogdor/do_flames.s
2024-01-26 01:10:05 -05:00

295 lines
3.9 KiB
ArmAsm

;======================================
; do_flames
;======================================
; copy background from $6000, left
; then do the following pattern
; s=short, 1=tall_1 2=tall_2, b=both short
; flames: left: ss1122
; flames: bb
; flames: right 22112211ss
; flames: left ss11221122ss
; FLAME_L = X of left flame
; FLAME_R = X of right flame
; FLAME_BG = type of background
; 0 = blank white
; 1 = blank_white + left_copy
do_flames:
;======================================
; left flame short 2 frames
jsr draw_flame_bg
ldx FLAME_L
jsr draw_flame_small_1
jsr hgr_page_flip
lda #2
jsr wait_ticks
;=================================================
; left tall 1212 roughly 10 frames (1/2 s)
lda #2
sta ANIMATE_COUNT
left_flame_animate1:
; 1
jsr draw_flame_bg
ldx FLAME_L
jsr draw_flame_tall_1
jsr hgr_page_flip
lda #2
jsr wait_ticks
; 2
jsr draw_flame_bg
ldx FLAME_L
jsr draw_flame_tall_2
jsr hgr_page_flip
lda #2
jsr wait_ticks
dec ANIMATE_COUNT
bne left_flame_animate1
;==============================
; both short 2 frames
jsr draw_flame_bg
ldx FLAME_L
jsr draw_flame_small_1
ldx FLAME_R
jsr draw_flame_small_1
jsr hgr_page_flip
lda #2
jsr wait_ticks
;===========================================
; right tall 1212 roughly 10 frames
lda #2
sta ANIMATE_COUNT
right_flame_animate1:
; 2
jsr draw_flame_bg
ldx FLAME_R
jsr draw_flame_tall_2
jsr hgr_page_flip
lda #2
jsr wait_ticks
; 1
jsr draw_flame_bg
ldx FLAME_R
jsr draw_flame_tall_1
jsr hgr_page_flip
lda #2
jsr wait_ticks
dec ANIMATE_COUNT
bne right_flame_animate1
;=============================
; right short 2 frames
jsr draw_flame_bg
ldx FLAME_R
jsr draw_flame_small_2
jsr hgr_page_flip
lda #2
jsr wait_ticks
;=============================
; left short 2 frames
jsr draw_flame_bg
ldx FLAME_L
jsr draw_flame_small_1
jsr hgr_page_flip
lda #2
jsr wait_ticks
;================================================
; left tall 1212 roughly 10 frames (1/2 s)
lda #2
sta ANIMATE_COUNT
left_flame_animate2:
; 1
jsr draw_flame_bg
ldx FLAME_L
jsr draw_flame_tall_1
jsr hgr_page_flip
lda #2
jsr wait_ticks
; 2
jsr draw_flame_bg
ldx FLAME_L
jsr draw_flame_tall_2
jsr hgr_page_flip
lda #2
jsr wait_ticks
dec ANIMATE_COUNT
bne left_flame_animate2
;=============================
; left short 2 frames
jsr draw_flame_bg
ldx FLAME_L
jsr draw_flame_small_1
jsr hgr_page_flip
lda #2
jmp wait_ticks ; tail call
; jsr wait_ticks
; rts
;===============================
; draw_flame_bg
;===============================
draw_flame_bg:
lda FLAME_BG
beq flame_bg_clear
flame_bg_left:
ldy #$7f
jsr hgr_clear_screen
jsr hgr_copy_left
rts
flame_bg_clear:
ldy #$7f
jsr hgr_clear_screen
rts
;===============================
; draw_flame_small
;===============================
; x location in X
draw_flame_small_1:
lda #<left_flame_small
sta INL
lda #>left_flame_small
sta INH
lda #<left_flame_small_mask
sta MASKL
lda #>left_flame_small_mask
bne draw_flame_small_common ; bra
draw_flame_small_2:
lda #<left_flame_small
sta INL
lda #>left_flame_small
sta INH
lda #<left_flame_small_mask
sta MASKL
lda #>left_flame_small_mask
draw_flame_small_common:
sta MASKH
txa
; lda #8
sta SPRITE_X
lda #152
sta SPRITE_Y
jsr hgr_draw_sprite_big_mask
rts
;===============================
; draw_flame_tall
;===============================
; X location in X
draw_flame_tall_1:
lda #<left_flame_big
sta INL
lda #>left_flame_big
sta INH
lda #<left_flame_big_mask
sta MASKL
lda #>left_flame_big_mask
sta MASKH
bne draw_left_flame_common ; bra
draw_flame_tall_2:
; draw right flame
lda #<right_flame_big
sta INL
lda #>right_flame_big
sta INH
lda #<right_flame_big_mask
sta MASKL
lda #>right_flame_big_mask
sta MASKH
draw_left_flame_common:
; lda #8
txa
sta SPRITE_X
lda #54
sta SPRITE_Y
jsr hgr_draw_sprite_big_mask
rts