From 81828eae07a308eabbaa58a22f7cf5672f3f4245 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sat, 20 Jan 2024 13:48:33 -0500 Subject: [PATCH] trogdor: animated flames --- demos/trogdor/Makefile | 6 +- demos/trogdor/hgr_clear_screen.s | 9 +- demos/trogdor/qload.s | 3 + demos/trogdor/trogdor.s | 350 ++++++++++++++++++++++++++----- demos/trogdor/zp.inc | 11 +- 5 files changed, 320 insertions(+), 59 deletions(-) diff --git a/demos/trogdor/Makefile b/demos/trogdor/Makefile index 2927f17b..67379bac 100644 --- a/demos/trogdor/Makefile +++ b/demos/trogdor/Makefile @@ -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 #### diff --git a/demos/trogdor/hgr_clear_screen.s b/demos/trogdor/hgr_clear_screen.s index aa0805ab..6ffb052b 100644 --- a/demos/trogdor/hgr_clear_screen.s +++ b/demos/trogdor/hgr_clear_screen.s @@ -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 diff --git a/demos/trogdor/qload.s b/demos/trogdor/qload.s index 64d7fe47..0891c416 100644 --- a/demos/trogdor/qload.s +++ b/demos/trogdor/qload.s @@ -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" diff --git a/demos/trogdor/trogdor.s b/demos/trogdor/trogdor.s index 59bb72ac..6ff065ae 100644 --- a/demos/trogdor/trogdor.s +++ b/demos/trogdor/trogdor.s @@ -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_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_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 INH - 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 INH - 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 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 + diff --git a/demos/trogdor/zp.inc b/demos/trogdor/zp.inc index 938699de..82f365f0 100644 --- a/demos/trogdor/zp.inc +++ b/demos/trogdor/zp.inc @@ -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