diff --git a/demos/trogdor/Makefile b/demos/trogdor/Makefile index 47b80e15..49e20d7f 100644 --- a/demos/trogdor/Makefile +++ b/demos/trogdor/Makefile @@ -176,7 +176,7 @@ trogdor.o: trogdor.s \ zp.inc hardware.inc qload.inc \ graphics/trog00_trogdor.hgr.zx02 \ hgr_sprite_big_mask.s horiz_scroll_simple.s hgr_copy_magnify.s \ - horiz_scroll_skip.s vertical_scroll.s + horiz_scroll_skip.s vertical_scroll.s hgr_copy_part.s ca65 -o trogdor.o trogdor.s -l trogdor.lst diff --git a/demos/trogdor/NOTES b/demos/trogdor/NOTES index 063c62eb..2d63d4a1 100644 --- a/demos/trogdor/NOTES +++ b/demos/trogdor/NOTES @@ -154,3 +154,9 @@ Space: $D000 - $E2FF = MUSIC ($12DF in size) 4831 $E300 - $F9FF = FLAMES ($1650 in size) 5712 $FA00 - $FEFF = COUNTRYSIDE ($498 in side) 1176 + + +dragonman: + original man=1973 dragonman=1982 = 3955 bytes + combined = 3669 bytes + optimize so bases same: = 3191 bytes diff --git a/demos/trogdor/graphics/Makefile b/demos/trogdor/graphics/Makefile index 6c597010..619a3af1 100644 --- a/demos/trogdor/graphics/Makefile +++ b/demos/trogdor/graphics/Makefile @@ -7,6 +7,7 @@ HGR_SPRITE = ../../../utils/hgr-utils/hgr_make_sprite all: \ actual00_trog_cottage.hgr.zx02 \ + actual01_dragonman.hgr.zx02 \ trog00_trogdor.hgr.zx02 \ trog01_countryside.hgr.zx02 \ trog02_countryside.hgr.zx02 \ @@ -59,6 +60,15 @@ actual00_trog_cottage.hgr.zx02: actual00_trog_cottage.hgr actual00_trog_cottage.hgr: actual00_trog_cottage.png $(PNG_TO_HGR) actual00_trog_cottage.png > actual00_trog_cottage.hgr + +#### + +actual01_dragonman.hgr.zx02: actual01_dragonman.hgr + $(ZX02) actual01_dragonman.hgr actual01_dragonman.hgr.zx02 + +actual01_dragonman.hgr: actual01_dragonman.png + $(PNG_TO_HGR) actual01_dragonman.png > actual01_dragonman.hgr + #### trog00_trogdor.hgr.zx02: trog00_trogdor.hgr diff --git a/demos/trogdor/graphics/actual01_dragonman.png b/demos/trogdor/graphics/actual01_dragonman.png new file mode 100644 index 00000000..98c6905c Binary files /dev/null and b/demos/trogdor/graphics/actual01_dragonman.png differ diff --git a/demos/trogdor/hgr_copy_part.s b/demos/trogdor/hgr_copy_part.s new file mode 100644 index 00000000..9b570c22 --- /dev/null +++ b/demos/trogdor/hgr_copy_part.s @@ -0,0 +1,47 @@ + ;========================================================= + ; hgr copy from page in A to current DRAW_PAGE + ;========================================================= + ; from source, assume $6000 + ; from COPY_X1,Y1 to WIDTH, Y2 + ; copy to DRAW_PAGE + ; SPRITE_X,SPRITE_Y +hgr_copy_part: + +hgr_copy_outer_loop: + + ldy COPY_Y1 + lda hposn_low,Y + clc + adc COPY_X1 + sta INL + lda hposn_high,Y + clc + adc #$40 ; force $6000 + sta INH + + ldy SPRITE_Y + lda hposn_low,Y + clc + adc SPRITE_X + sta OUTL + lda hposn_high,Y + clc + adc DRAW_PAGE + sta OUTH + + + ldy COPY_WIDTH +hgr_copy_inner_loop: + lda (INL),Y + sta (OUTL),Y + dey + bpl hgr_copy_inner_loop + + inc COPY_Y1 + inc SPRITE_Y + lda COPY_Y1 + cmp COPY_Y2 + bne hgr_copy_outer_loop + + rts ; 6 + diff --git a/demos/trogdor/horiz_scroll_simple.s b/demos/trogdor/horiz_scroll_simple.s index c2f0d41b..16963762 100644 --- a/demos/trogdor/horiz_scroll_simple.s +++ b/demos/trogdor/horiz_scroll_simple.s @@ -3,8 +3,11 @@ ;====================================== ; screens to pan in $2000/$4000 to left + ; A is times to scroll + horiz_pan: + sta pan_count_smc+1 pan_loop: @@ -80,6 +83,7 @@ pil_smc4: inc COUNT lda COUNT +pan_count_smc: cmp #39 bne pan_outer_outer_loop diff --git a/demos/trogdor/horiz_scroll_skip.s b/demos/trogdor/horiz_scroll_skip.s index 1866b24b..2acd4113 100644 --- a/demos/trogdor/horiz_scroll_skip.s +++ b/demos/trogdor/horiz_scroll_skip.s @@ -11,18 +11,18 @@ horiz_pan_skip: -pan_loop: +pan_skip_loop: ; how many times to scroll lda #0 sta COUNT -pan_outer_outer_loop: +pan_skip_outer_outer_loop: ldx #191 -pan_outer_loop: +pan_skip_outer_loop: txa pha @@ -75,7 +75,7 @@ pan_outer_loop: ; inner loop, from 0-36 ldy #0 -pan_inner_loop: +pan_skip_inner_loop: ; load in+1, store to in @@ -92,7 +92,7 @@ pil_out_smc2: iny ; 2 cpy #36 ; 2 - bne pan_inner_loop ; 2/3 + bne pan_skip_inner_loop ; 2/3 ; for right edge, scroll in from PAGE2 @@ -118,7 +118,7 @@ pil_out_smc5: dex dex cpx #$ff - bne pan_outer_loop + bne pan_skip_outer_loop inc COUNT inc COUNT @@ -128,6 +128,6 @@ pil_out_smc5: lda COUNT cmp #36 - bne pan_outer_outer_loop + bne pan_skip_outer_outer_loop rts diff --git a/demos/trogdor/trogdor.s b/demos/trogdor/trogdor.s index 79601182..bc9b0b6a 100644 --- a/demos/trogdor/trogdor.s +++ b/demos/trogdor/trogdor.s @@ -309,14 +309,20 @@ scroll_in_loop: lda #$20 jsr zx02_full_decomp + ; decompress second part to $4000 + + lda #<$FA00 + sta zx_src_l+1 + lda #>$FA00 + sta zx_src_h+1 + lda #$40 + jsr zx02_full_decomp + + ; pan 9 times + ; FIXME: update timing + lda #9 - sta ANIMATE_COUNT -countryside_pan_loop: - jsr horiz_pan_skip - - dec ANIMATE_COUNT - bne countryside_pan_loop - + jsr horiz_pan ;====================================== ; draw SCENE 5 @@ -340,19 +346,42 @@ countryside_pan_loop: ;======================================= + + ;====================================== + ; man + + lda #trog03_graphics + sta zx_src_h+1 + lda #$60 + jsr zx02_full_decomp + + ldy #$7f + jsr hgr_clear_screen + + ; FIXME: make a "copy left" routine + + lda #0 + sta COPY_X1 + sta COPY_Y1 + sta SPRITE_Y + lda #10 + sta SPRITE_X + lda #20 + sta COPY_WIDTH + lda #191 + sta COPY_Y2 + + jsr hgr_copy_part + + jsr hgr_page_flip + + lda #42 + jsr wait_ticks + jsr wait_until_keypress - ; second - -; lda #trog03_graphics -; sta zx_src_h+1 -; lda #$20 -; jsr zx02_full_decomp - - - finished: jmp finished @@ -383,8 +412,8 @@ trog00_graphics: trog01_graphics: .incbin "graphics/trog01_countryside.hgr.zx02" -;trog03_graphics: -;.incbin "graphics/trog03_man.hgr.zx02" +trog03_graphics: +.incbin "graphics/actual01_dragonman.hgr.zx02" .include "wait_keypress.s" .include "irq_wait.s" @@ -394,9 +423,11 @@ hposn_low = $1e00 hposn_high = $1f00 .include "hgr_sprite_big_mask.s" +.include "horiz_scroll_simple.s" .include "horiz_scroll_skip.s" .include "hgr_copy_magnify.s" .include "vertical_scroll.s" +.include "hgr_copy_part.s" ;=============================== ; draw_flame_small diff --git a/demos/trogdor/zp.inc b/demos/trogdor/zp.inc index 82f365f0..a6254e24 100644 --- a/demos/trogdor/zp.inc +++ b/demos/trogdor/zp.inc @@ -116,17 +116,14 @@ SECOND_COUNTDOWN= $E1 COUNT = $E2 XSAVE = $E3 TEMPY = $E4 -XPOS = $E5 ; gr_plot -YPOS = $E6 ; gr_plot -COLOR_MASK = $E7 ; gr_plot -;FRAMEL = $E8 -;FRAMEH = $E9 -FRAME = $E8 -SECONDS = $E9 +FRAME = $E5 +SECONDS = $E6 +COPY_X1 = $E7 +COPY_Y1 = $E8 +COPY_WIDTH = $E9 +COPY_Y2 = $EA -BTC_L = $EA ; audio -BTC_H = $EB ; audio -MASKL = $EC ; gr_putsprite_mask +MASKL = $EC MASKH = $ED