trogdor: animated flames

This commit is contained in:
Vince Weaver 2024-01-20 13:48:33 -05:00
parent 5770d7ca01
commit 81828eae07
5 changed files with 320 additions and 59 deletions

View File

@ -39,8 +39,9 @@ qload.o: zp.inc hardware.inc music.inc qload.s \
gr_offsets.s \
wait.s wait_a_bit.s \
lc_detect.s \
hgr_clear_screen.s hgr_copy_fast.s \
text_print.s start.s \
hgr_table.s gs_interrupt.s \
hgr_table.s gs_interrupt.s hgr_page_flip.s \
zx02_optim.s wait_keypress.s hardware_detect.s \
pt3_lib_detect_model.s pt3_lib_mockingboard_detect.s \
pt3_lib_mockingboard_setup.s interrupt_handler.s \
@ -87,6 +88,9 @@ qload.inc: generate_common QLOAD
./generate_common -a 0x1200 -s zx02_full_decomp qload.lst >> qload.inc
./generate_common -a 0x1200 -s zx_src_h qload.lst >> qload.inc
./generate_common -a 0x1200 -s zx_src_l qload.lst >> qload.inc
./generate_common -a 0x1200 -s hgr_clear_screen qload.lst >> qload.inc
./generate_common -a 0x1200 -s hgr_copy_fast qload.lst >> qload.inc
./generate_common -a 0x1200 -s hgr_page_flip qload.lst >> qload.inc
####

View File

@ -1,11 +1,18 @@
hgr_clear_screen_black:
ldy #0
hgr_clear_screen:
lda DRAW_PAGE
beq hgr_page1_clearscreen
lda #0
beq hgr_page2_clearscreen
hgr_page1_clearscreen:
tya
ldy #0
hgr_page1_cls_loop:
sta $2000,Y
@ -47,7 +54,7 @@ hgr_page1_cls_loop:
hgr_page2_clearscreen:
tya
ldy #0
hgr_page2_cls_loop:
sta $4000,Y

View File

@ -192,6 +192,9 @@ PT3_ENABLE_APPLE_IIC = 1
.include "gr_fast_clear.s"
.include "text_print.s"
.include "gr_offsets.s"
.include "hgr_clear_screen.s"
.include "hgr_copy_fast.s"
.include "hgr_page_flip.s"
.include "pt3_lib_detect_model.s"
.include "pt3_lib_mockingboard_detect.s"

View File

@ -12,74 +12,236 @@ trogdor_main:
; init
;======================================
lda #$00
sta DRAW_PAGE
sta clear_all_color+1
lda #$04
sta DRAW_PAGE
jsr clear_all
;======================================
; draw opening scene
;======================================
; clear screen to white0
lda #$0
sta DRAW_PAGE
; sta FRAME
; sta SECONDS
lda #<trog00_graphics
sta zx_src_l+1
lda #>trog00_graphics
sta zx_src_h+1
lda #$20
jsr zx02_full_decomp
ldy #$7f
jsr hgr_clear_screen
; set to HIRES PAGE1
bit SET_GR
bit HIRES
bit FULLGR
bit PAGE1
;======================================
; draw SCENE 1
;======================================
; scroll in zoomed in trogdor from right to left
; for 60 frames (roughly 2s)
; decompress trogdor screen to offscreen $6000
lda #<trog00_graphics
sta zx_src_l+1
lda #>trog00_graphics
sta zx_src_h+1
lda #$60
jsr zx02_full_decomp
lda #$60
jsr hgr_copy_fast
jsr wait_until_keypress
; draw left flame
; TODO: can remove these?
lda #<left_flame_small
sta INL
lda #>left_flame_small
sta INH
lda #<left_flame_small_mask
sta MASKL
lda #>left_flame_small_mask
sta MASKH
; current, DRAW_PAGE=0, active page=1
lda #$20
sta DRAW_PAGE
lda #8
sta SPRITE_X
; clear to white
ldy #$7f
jsr hgr_clear_screen
lda #152
sta SPRITE_Y
jsr hgr_page_flip
jsr hgr_draw_sprite_big_mask
;======================================
; draw SCENE 2
;======================================
; draw right flame
; draw flames
; left flame short 2 frames
; left tall 1212 roughly 10 frames (1/2 s)
; both short 2 frames
; right tall 1212 roughly 10 frames
; right short 2 frames
; left frame short 2 frames
; left tall 1212 roughly 10 frames (1/2 s)
; left short 2 frames
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
;======================================
; left flame short 2 frames
lda #24
sta SPRITE_X
; clear to white
ldy #$7f
jsr hgr_clear_screen
lda #54
sta SPRITE_Y
ldx #8
jsr draw_flame_small_1
jsr hgr_page_flip
jsr hgr_draw_sprite_big_mask
lda #2
jsr wait_ticks
;=================================================
; left tall 1212 roughly 10 frames (1/2 s)
lda #2
sta ANIMATE_COUNT
left_flame_animate1:
ldy #$7f
jsr hgr_clear_screen
ldx #8
jsr draw_flame_tall_1
jsr hgr_page_flip
lda #2
jsr wait_ticks
ldy #$7f
jsr hgr_clear_screen
ldx #8
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
; clear to white
ldy #$7f
jsr hgr_clear_screen
ldx #8
jsr draw_flame_small_1
ldx #24
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:
ldy #$7f
jsr hgr_clear_screen
ldx #24
jsr draw_flame_tall_2
jsr hgr_page_flip
lda #2
jsr wait_ticks
ldy #$7f
jsr hgr_clear_screen
ldx #24
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
; clear to white
ldy #$7f
jsr hgr_clear_screen
ldx #24
jsr draw_flame_small_2
jsr hgr_page_flip
lda #2
jsr wait_ticks
;=============================
; left short 2 frames
; clear to white
ldy #$7f
jsr hgr_clear_screen
ldx #8
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:
ldy #$7f
jsr hgr_clear_screen
ldx #8
jsr draw_flame_tall_1
jsr hgr_page_flip
lda #2
jsr wait_ticks
ldy #$7f
jsr hgr_clear_screen
ldx #8
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
; clear to white
ldy #$7f
jsr hgr_clear_screen
ldx #8
jsr draw_flame_small_1
jsr hgr_page_flip
lda #2
jsr wait_ticks
;=============================
; blank screen
ldy #$7f
jsr hgr_clear_screen
jsr hgr_page_flip
jsr wait_until_keypress
@ -101,16 +263,16 @@ finished:
; start music
lda SOUND_STATUS
and #SOUND_MOCKINGBOARD
beq no_music
cli ; enable sound
no_music:
; lda SOUND_STATUS
; and #SOUND_MOCKINGBOARD
; beq no_music
; cli ; enable sound
;no_music:
;0123456789012345678901234567890123456789
merry_text:
.byte " MERRY CHRISTMAS!!! MERRY CHRISTMAS!!! ME"
;merry_text:
; .byte " MERRY CHRISTMAS!!! MERRY CHRISTMAS!!! ME"
@ -134,3 +296,87 @@ hposn_high = $1f00
.include "hgr_sprite_big_mask.s"
;.include "graphics/flame_sprites.inc"
;===============================
; 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

View File

@ -119,20 +119,21 @@ TEMPY = $E4
XPOS = $E5 ; gr_plot
YPOS = $E6 ; gr_plot
COLOR_MASK = $E7 ; gr_plot
FRAMEL = $E8
FRAMEH = $E9
;FRAMEL = $E8
;FRAMEH = $E9
FRAME = $E8
SECONDS = $E9
BTC_L = $EA ; audio
BTC_H = $EB ; audio
MASKL = $EC ; gr_putsprite_mask
MASKH = $ED
FRAME = $EE
; local
SPRITE_Y = $F2
SPRITE_X = $F3
CURRENT_ROW = $F4
ANIMATE_COUNT = $F5
;==============================================
; $FC-$FF we use for in/out pointers