; TROGDOR 2024 .include "hardware.inc" .include "zp.inc" .include "qload.inc" .include "music.inc" .include "flames.inc" trogdor_main: ;====================================== ; init ;====================================== ; clear screen to white0 lda #$0 sta DRAW_PAGE ; clear PAGE1 to white ldy #$7f jsr hgr_clear_screen ; set to HIRES PAGE1 bit SET_GR bit HIRES bit FULLGR bit PAGE1 lda #$20 sta DRAW_PAGE lda SOUND_STATUS and #SOUND_MOCKINGBOARD beq trog_no_music cli ; start music trog_no_music: ;====================================== ; draw SCENE 1 ;====================================== ; scroll in zoomed in trogdor from right to left ; for 60 frames (roughly 2s) ; decompress trogdor to $6000 lda #trog00_graphics sta zx_src_h+1 lda #$60 jsr zx02_full_decomp ; copy+magnify to PAGE2 lda #$60 jsr hgr_copy_magnify jsr horiz_pan_skip ; clear to white ldy #$7f jsr hgr_clear_screen jsr horiz_pan_skip jsr hgr_page_flip ;====================================== ; draw SCENE 2 ;====================================== ; 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 ;====================================== ; left flame 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_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 ;====================================== ; draw SCENE 3 ;====================================== ; scroll trogdor intro place ; takes rougly 90 frames (3s) to scroll in ; remains there 10 frames (almost .5s) ; orignal: 28s, want 9 times faster??? ; can easily do 8 times... ; now should be on PAGE1?? ldy #$7f jsr hgr_clear_screen jsr hgr_page_flip ; lda #24 ; 192/8 ; sta ANIMATE_COUNT lda #0 sta COUNT scroll_in_loop: jsr hgr_vertical_scroll lda COUNT clc adc #8 cmp #192 bne scroll_in_loop lda #10 jsr wait_ticks ;====================================== ; draw SCENE 4 ;====================================== ; countrside scrolls in ; roughly 45 frames? 1.5s? ; only 9 bytes wide ; decompress countryside to $2000 lda #trog01_graphics sta zx_src_h+1 lda #$20 jsr zx02_full_decomp lda #9 sta ANIMATE_COUNT countryside_pan_loop: jsr horiz_pan_skip dec ANIMATE_COUNT bne countryside_pan_loop ;====================================== ; draw SCENE 5 ;====================================== ; trogdor man: 42 frames ; flames: left: llll1122 ; flames: bb ; flames: right 22112211ss ; flames: left ss11221122ss ; flames gone: 30 frames (roughly 1s) ; dragon man: 160 frames (roughly 5s) ; dragon: 150 frames (roughly 5s) ; dragon zoom: 5 frames ; dragon: 5 frames \ ; dragon zoom: 5 frames / repeat 6 times ; dragon zoom scroll off screen: 30 frames ; white screen: 20 frames ; 916 ;======================================= jsr wait_until_keypress ; second ; lda #trog03_graphics ; sta zx_src_h+1 ; lda #$20 ; jsr zx02_full_decomp finished: jmp finished ; start music ; lda SOUND_STATUS ; and #SOUND_MOCKINGBOARD ; beq no_music ; cli ; enable sound ;no_music: ;0123456789012345678901234567890123456789 ;merry_text: ; .byte " MERRY CHRISTMAS!!! MERRY CHRISTMAS!!! ME" trog00_graphics: .incbin "graphics/actual00_trog_cottage.hgr.zx02" trog01_graphics: .incbin "graphics/trog01_countryside.hgr.zx02" ;trog03_graphics: ;.incbin "graphics/trog03_man.hgr.zx02" .include "wait_keypress.s" .include "irq_wait.s" hposn_low = $1e00 hposn_high = $1f00 .include "hgr_sprite_big_mask.s" .include "horiz_scroll_skip.s" .include "hgr_copy_magnify.s" .include "vertical_scroll.s" ;=============================== ; draw_flame_small ;=============================== ; x location in X draw_flame_small_1: lda #left_flame_small sta INH lda #left_flame_small_mask bne draw_flame_small_common ; bra draw_flame_small_2: lda #left_flame_small sta INH 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 INH 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 INH 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