From d4219e75e344333cb909f7e9bcbff3cfe19885ee Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Wed, 17 Jan 2024 02:03:32 -0500 Subject: [PATCH] trogdor: sprites --- demos/trogdor/Makefile | 3 +- demos/trogdor/graphics/Makefile | 16 +- demos/trogdor/graphics/compact_flames.png | Bin 0 -> 18699 bytes demos/trogdor/hgr_sprite_big.s | 205 ---------------------- demos/trogdor/hgr_sprite_big_mask.s | 102 +++++++++++ demos/trogdor/qload.s | 2 +- demos/trogdor/trogdor.s | 51 ++++++ demos/trogdor/zp.inc | 84 +-------- 8 files changed, 172 insertions(+), 291 deletions(-) create mode 100644 demos/trogdor/graphics/compact_flames.png delete mode 100644 demos/trogdor/hgr_sprite_big.s create mode 100644 demos/trogdor/hgr_sprite_big_mask.s diff --git a/demos/trogdor/Makefile b/demos/trogdor/Makefile index 162611f4..2b578c76 100644 --- a/demos/trogdor/Makefile +++ b/demos/trogdor/Makefile @@ -136,7 +136,8 @@ TROGDOR: trogdor.o trogdor.o: trogdor.s \ zp.inc hardware.inc qload.inc \ - graphics/trog00_trogdor.hgr.zx02 + graphics/trog00_trogdor.hgr.zx02 \ + hgr_sprite_big_mask.s ca65 -o trogdor.o trogdor.s -l trogdor.lst diff --git a/demos/trogdor/graphics/Makefile b/demos/trogdor/graphics/Makefile index 0ccd78c7..dd4e6116 100644 --- a/demos/trogdor/graphics/Makefile +++ b/demos/trogdor/graphics/Makefile @@ -18,7 +18,21 @@ all: \ trog10_peasants.hgr.zx02 \ trog11_cottage.hgr.zx02 \ a2_strongbad.hgr.zx02 \ - trogdor.hgr.zx02 + trogdor.hgr.zx02 \ + flame_sprites.inc + +#### + +flame_sprites.inc: compact_flames.png + $(HGR_SPRITE) -s -l left_flame_small ./compact_flames.png 0 8 55 48 > flame_sprites.inc + $(HGR_SPRITE) -s -l right_flame_small ./compact_flames.png 56 8 111 48 >> flame_sprites.inc + $(HGR_SPRITE) -s -l left_flame_big ./compact_flames.png 0 54 55 192 >> flame_sprites.inc + $(HGR_SPRITE) -s -l right_flame_big ./compact_flames.png 56 54 111 192 >> flame_sprites.inc + $(HGR_SPRITE) -s -l left_flame_small_mask ./compact_flames.png 112 8 167 48 >> flame_sprites.inc + $(HGR_SPRITE) -s -l right_flame_small_mask ./compact_flames.png 168 8 223 48 >> flame_sprites.inc + $(HGR_SPRITE) -s -l left_flame_big_mask ./compact_flames.png 112 54 167 192 >> flame_sprites.inc + $(HGR_SPRITE) -s -l right_flame_big_mask ./compact_flames.png 168 54 223 192 >> flame_sprites.inc + #### diff --git a/demos/trogdor/graphics/compact_flames.png b/demos/trogdor/graphics/compact_flames.png new file mode 100644 index 0000000000000000000000000000000000000000..229da0e15a3b8aa282854db820c9c5cfb05889fd GIT binary patch literal 18699 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 glIF!vSN#TQQi 1 page - bne big_sprite_no_page_cross - inc big_sprite_smc1+2 - -big_sprite_no_page_cross: - iny ; increment output position - - -big_sprite_width_end_smc: - cpy #6 ; see if reached end of row - bne big_sprite_inner_loop ; if not, loop - - - inc CURRENT_ROW ; row - lda CURRENT_ROW ; row - -big_sprite_ysize_smc: - cmp #31 ; see if at end - bne hgr_big_sprite_yloop ; if not, loop - - rts - - - -hgr_draw_sprite_big_odd: - ldy #0 - lda (INL),Y ; load xsize - clc - adc SPRITE_X - sta osprite_width_end_smc+1 ; self modify for end of line - - iny ; load ysize - lda (INL),Y - sta osprite_ysize_smc+1 ; self modify - - ; point smc to sprite - lda INL ; 16-bit add - sta osprite_smc1+1 - lda INH - sta osprite_smc1+2 - - - ldx #0 ; X is pointer offset - stx CURRENT_ROW ; actual row - - ldx #2 - -ohgr_sprite_yloop: - - lda CURRENT_ROW ; row - - clc - adc SPRITE_Y ; add in cursor_y - - ; calc GBASL/GBASH - - tay ; get output ROW into GBASL/H - lda hposn_low,Y - sta GBASL - lda hposn_high,Y - - clc - adc DRAW_PAGE - sta GBASH - - ldy SPRITE_X - - clc - php ; store 0 carry on stack - -osprite_inner_loop: - - -osprite_smc1: - lda $f000,X ; load sprite data - - bne osprite_not_transparent - - ; we can't just skip if 0 because we might shift a bit in - ; from previous byte - - plp - bcs osprite_oops - clc - php - bcc osprite_transparent_done - -osprite_not_transparent: - plp ; restore carry from last -osprite_oops: - rol ; rotate in carry - asl ; one more time, bit6 in carry - php ; save on stack - sec ; assume blur/orange - ror ; rotate it back down - - sta (GBASL),Y ; store to screen - - -osprite_transparent_done: - inx ; increment sprite offset - - ; if > 1 page - bne osprite_no_page_cross - inc osprite_smc1+2 - -osprite_no_page_cross: - - iny ; increment output position - - - -osprite_width_end_smc: - cpy #6 ; see if reached end of row - bne osprite_inner_loop ; if not, loop - - - plp ; restore stack - - inc CURRENT_ROW ; row - lda CURRENT_ROW ; row - -osprite_ysize_smc: - cmp #31 ; see if at end - bne ohgr_sprite_yloop ; if not, loop - - rts - diff --git a/demos/trogdor/hgr_sprite_big_mask.s b/demos/trogdor/hgr_sprite_big_mask.s new file mode 100644 index 00000000..810ff657 --- /dev/null +++ b/demos/trogdor/hgr_sprite_big_mask.s @@ -0,0 +1,102 @@ + ;=========================================== + ; hgr draw sprite (only at 14-bit boundaries) + ;=========================================== + ; can handle sprites bigger than a 256 byte page + + ; flames are 8x142 or so + + ; SPRITE in INL/INH + ; MASK in MASKL/MASKH + + ; Location at SPRITE_X SPRITE_Y + + ; xsize, ysize in first two bytes + +hgr_draw_sprite_big_mask: +; lda SPRITE_X + + ldy #0 + lda (INL),Y ; load xsize + clc + adc SPRITE_X + sta big_sprite_width_end_smc+1 ; self modify for end of line + + iny ; load ysize + lda (INL),Y + sta big_sprite_ysize_smc+1 ; self modify + + ; point smc to sprite + lda INL ; 16-bit add + sta big_sprite_smc1+1 + lda INH + sta big_sprite_smc1+2 + + ; point to mask + lda MASKL + sta big_sprite_mask_smc1+1 + lda MASKH + sta big_sprite_mask_smc1+2 + + ldx #0 ; X is pointer offset + stx CURRENT_ROW ; actual row + + ldx #2 + +hgr_big_sprite_yloop: + + lda CURRENT_ROW ; row + + clc + adc SPRITE_Y ; add in cursor_y + + ; calc GBASL/GBASH + + tay ; get output ROW into GBASL/H + lda hposn_low,Y + sta GBASL + lda hposn_high,Y + + clc + adc DRAW_PAGE + sta GBASH + + ldy SPRITE_X + +big_sprite_inner_loop: + + + lda (GBASL),Y +big_sprite_mask_smc1: + and $f000,X + +big_sprite_smc1: + ora $f000,X ; load sprite data + + sta (GBASL),Y ; store to screen + + inx ; increment sprite offset + + ; if > 1 page + bne big_sprite_no_page_cross + inc big_sprite_smc1+2 + inc big_sprite_mask_smc1+2 + +big_sprite_no_page_cross: + iny ; increment output position + + +big_sprite_width_end_smc: + cpy #6 ; see if reached end of row + bne big_sprite_inner_loop ; if not, loop + + + inc CURRENT_ROW ; row + lda CURRENT_ROW ; row + +big_sprite_ysize_smc: + cmp #31 ; see if at end + bne hgr_big_sprite_yloop ; if not, loop + + rts + + diff --git a/demos/trogdor/qload.s b/demos/trogdor/qload.s index a3bd048a..b45ea1a7 100644 --- a/demos/trogdor/qload.s +++ b/demos/trogdor/qload.s @@ -178,7 +178,7 @@ sector_array: .byte 0,0,0 ; MUSIC, TROGDOR, TITLE length_array: - .byte 32,32 ; MUSIC, TROGDOR, TITLE + .byte 32,64,32 ; MUSIC, TROGDOR, TITLE PT3_ENABLE_APPLE_IIC = 1 diff --git a/demos/trogdor/trogdor.s b/demos/trogdor/trogdor.s index 92b72803..5368106d 100644 --- a/demos/trogdor/trogdor.s +++ b/demos/trogdor/trogdor.s @@ -24,6 +24,9 @@ trogdor_main: ; draw opening scene ;====================================== + lda #$0 + sta DRAW_PAGE + lda #trog00_graphics @@ -36,6 +39,48 @@ trogdor_main: bit FULLGR bit PAGE1 + jsr wait_until_keypress + + ; draw left flame + + lda #left_flame_small + sta INH + lda #left_flame_small_mask + sta MASKH + + lda #8 + sta SPRITE_X + + lda #152 + sta SPRITE_Y + + jsr hgr_draw_sprite_big_mask + + ; draw right flame + + lda #right_flame_big + sta INH + lda #right_flame_big_mask + sta MASKH + + lda #24 + sta SPRITE_X + + lda #54 + sta SPRITE_Y + + jsr hgr_draw_sprite_big_mask + + + jsr wait_until_keypress ; second @@ -83,3 +128,9 @@ trog03_graphics: .include "irq_wait.s" +hposn_low = $1e00 +hposn_high = $1f00 + +.include "hgr_sprite_big_mask.s" + +.include "graphics/flame_sprites.inc" diff --git a/demos/trogdor/zp.inc b/demos/trogdor/zp.inc index 047ff949..938699de 100644 --- a/demos/trogdor/zp.inc +++ b/demos/trogdor/zp.inc @@ -127,94 +127,12 @@ MASKL = $EC ; gr_putsprite_mask MASKH = $ED FRAME = $EE -;============================================== -; $F0-$FB can re-use in each file -;============================================== - -; tunnel -XX = $F2 -MINUSXX = $F3 -YY = $F4 -MINUSYY = $F5 -D = $F6 -R = $F7 -CX = $F8 -CY = $F9 -RR = $FA - -; Credits -BACKUP_OUTL = $F2 -BACKUP_OUTH = $F3 - -; Nuts/ opener +; local SPRITE_Y = $F2 SPRITE_X = $F3 CURRENT_ROW = $F4 -; PLASMACUBE -OUT1 = $F0 -OUT1H = $F1 -OUT2 = $F2 -OUT2H = $F3 -COMPT1 = $F4 -COMPT2 = $F5 -PARAM1 = $F6 -PARAM2 = $F7 -PARAM3 = $F8 -PARAM4 = $F9 -GRLINE = $FA -GRLINEH = $FB - -; PLASMA - -; CUBE -SAVEX = $F3 -SAVEY = $F4 -SUM = $F5 - -; CIRCLES/DRAW_BOXES -COLOR2 = $F3 -X1 = $F4 -X2 = $F5 -Y1 = $F6 -Y2 = $F7 -SCENE_COUNT = $F8 -LAST_TYPE = $F9 - -; lens -LENS_X = $F0 -LENS_Y = $F1 -XADD = $F2 -YADD = $F3 - -; rotozoom -NUM1L = $F0 -NUM1H = $F1 -NUM2L = $F2 -NUM2H = $F3 -RESULT = $F4 ; F5,F6,F7 -SCALE_I = $F8 -SCALE_F = $F9 -ANGLE = $FA - -; credits -SCROLL_X = $F0 - -; polar -SCROLL_START = $F0 -YDEST = $F1 - - -; hgr_copy -HGR_COPY_Y1 = $F1 -HGR_COPY_Y2 = $F2 -FIRE_COLOR = $F3 - -SCROLL_LENGTH = $F4 -OFFSET = $F5 -TREE_COUNT = $F6 - ;============================================== ; $FC-$FF we use for in/out pointers