diff --git a/res/fx.conf b/res/fx.conf index e7e2f6d25..d8627c78d 100644 --- a/res/fx.conf +++ b/res/fx.conf @@ -1 +1 @@ -RIPPLE STARWHITE SOFT.DIAGONAL STAGGERWHITE.UD RADIAL STAGGER.LR SOFT.UD CRYSTAL BIT.FIZZLE MEETINTHEMIDDLE DIAGONAL R.BY.PIXEL SUNRISE SOFT.L SUNSET CORNER.CIRCLE DIAGONAL2 RIPPLE2 RADIAL2 SPLIT.UD.INTRO HALF.FIZZLE RADIAL3 DIAGONAL3 BAR.DISSOLVE FOURSPIRAL SOFT.R IRIS CASCADE AND CHECKERBOARD LR.BY.PIXEL RADIAL4 STAGGERWHITE.LR SOFT.UD.OUT ONESQUARE FIZZLE STAR DIAMOND TWOPASS.LR HALF.MOSAIC RADIAL5 ARROW FOURSQUARE DIAGONAL4 STAGGER.UD INTERLOCK.LR SOFT.UD.IN BLOCK.MOSAIC INTERLOCK.UD BLOCK.FIZZLE SPIRAL ARROW.WHITE [eof] # # transition effects for HGR slideshows # # Each Mega-Attract Module that is an HGR slideshow (see attract.conf) # will use a single transition effect for the length of the module. # Transition effects are loaded in the order listed in this file. Each line # of this file is a filename (not including comments, like this one). The # name of the next transition effect is stored in the global prefs, so this # file should not contain duplicates. # # Transition effects are binary files loaded at $6000 and called with # hi-res page 1 showing and the next HGR graphic already loaded at $4000. # A transition effect can use $6000-$BFFF in main memory, zero page, and # text page if needed. $800-$1FFF is reserved for the slideshow data. # LC RAM banks 1 and 2 are reserved for the launcher. # # Important: LC RAM bank 1 will be read/write on entry and must be read/write # on exit. If you need ROM routines, you are responsible for switching to ROM # then switching back to RAM bank 1 (read/write) before returning. # \ No newline at end of file +RIPPLE STARWHITE SOFT.DIAGONAL STAGGERWHITE.UD RADIAL STAGGER.LR SOFT.UD CRYSTAL BIT.FIZZLE MEETINTHEMIDDLE DIAGONAL R.BY.PIXEL SUNRISE SOFT.L SUNSET CORNER.CIRCLE CENTER.BY.PIXEL DIAGONAL2 RIPPLE2 RADIAL2 SPLIT.UD.INTRO HALF.FIZZLE RADIAL3 DIAGONAL3 BAR.DISSOLVE FOURSPIRAL SOFT.R IRIS CASCADE AND CHECKERBOARD LR.BY.PIXEL RADIAL4 STAGGERWHITE.LR SOFT.UD.OUT ONESQUARE FIZZLE STAR DIAMOND TWOPASS.LR HALF.MOSAIC RADIAL5 ARROW FOURSQUARE DIAGONAL4 STAGGER.UD INTERLOCK.LR SOFT.UD.IN BLOCK.MOSAIC INTERLOCK.UD BLOCK.FIZZLE SPIRAL ARROW.WHITE [eof] # # transition effects for HGR slideshows # # Each Mega-Attract Module that is an HGR slideshow (see attract.conf) # will use a single transition effect for the length of the module. # Transition effects are loaded in the order listed in this file. Each line # of this file is a filename (not including comments, like this one). The # name of the next transition effect is stored in the global prefs, so this # file should not contain duplicates. # # Transition effects are binary files loaded at $6000 and called with # hi-res page 1 showing and the next HGR graphic already loaded at $4000. # A transition effect can use $6000-$BFFF in main memory, zero page, and # text page if needed. $800-$1FFF is reserved for the slideshow data. # LC RAM banks 1 and 2 are reserved for the launcher. # # Important: LC RAM bank 1 will be read/write on entry and must be read/write # on exit. If you need ROM routines, you are responsible for switching to ROM # then switching back to RAM bank 1 (read/write) before returning. # \ No newline at end of file diff --git a/src/fx/fx.hgr.center.by.pixel.a b/src/fx/fx.hgr.center.by.pixel.a new file mode 100644 index 000000000..0c2307a2c --- /dev/null +++ b/src/fx/fx.hgr.center.by.pixel.a @@ -0,0 +1,136 @@ +;license:MIT +;(c) 2019 by 4am +; +!cpu 6502 +!to "build/FX/CENTER.BY.PIXEL",plain +*=$6000 + +sourcemask1 = $f0 +sourcemask2 = $f1 +copymask1 = $f2 +copymask2 = $f3 +skipcounter = $f7 +counter = $f8 +top = $f9 +bottom = $fa +tmp = $fb +maskindex = $fc +row = $fd +col1 = $fe +col2 = $ff + + !source "src/fx/macros.a" + + lda #44 + sta skipcounter + lda #$5F + sta counter + lda #0 + sta top + lda #$BF + sta bottom + lda #0 + sta col1 + lda #39 + sta col2 +ColLoop + lda #6 + sta maskindex + jsr WaitForVBL +MaskLoop + ldx maskindex + lda copymasks1,x + sta copymask1 + eor #%11111111 + sta sourcemask1 + lda copymasks2,x + sta copymask2 + eor #%11111111 + sta sourcemask2 + + lda #23 + sta row +RowLoop + lda row + +HGR_ROW_CALC + ldx #8 +BlockLoop + ldy col1 + lda ($26),y + and sourcemask1 + sta tmp + lda ($3c),y + and copymask1 + ora tmp + sta ($26),y + + ldy col2 + lda ($26),y + and sourcemask2 + sta tmp + lda ($3c),y + and copymask2 + ora tmp + sta ($26),y + + clc + +HGR_INC_WITHIN_BLOCK + dex + bne BlockLoop + + dec row + bpl RowLoop + + dec skipcounter + +LBPL SkipTopAndBottom + + lda top + +HGR_CALC + ldy #39 +- lda ($3c),y + sta ($26),y + dey + bpl - + inc top + + lda bottom + +HGR_CALC + ldy #39 +- lda ($3c),y + sta ($26),y + dey + bpl - + dec bottom + + dec counter + bmi Exit +SkipTopAndBottom + lda $c000 + bmi Exit + dec maskindex + +LBPL MaskLoop + inc col1 + dec col2 + +LBNE ColLoop +Exit rts + +copymasks1 + !byte %11111111 + !byte %10111111 + !byte %10011111 + !byte %10001111 + !byte %10000111 + !byte %10000011 + !byte %10000001 +copymasks2 + !byte %11111111 + !byte %11111110 + !byte %11111100 + !byte %11111000 + !byte %11110000 + !byte %11100000 + !byte %11000000 + + !source "src/wait.a" + !source "src/fx/fx.hgr.common.a" + !source "src/fx/hw.vbl.a" diff --git a/src/fx/fx.hgr.common.a b/src/fx/fx.hgr.common.a index b049e779f..88a7599a8 100644 --- a/src/fx/fx.hgr.common.a +++ b/src/fx/fx.hgr.common.a @@ -23,10 +23,7 @@ HGRBlockCopy ; Z set ; C clear ; all other flags and registers clobbered - asl - asl - asl - +HGR_CALC + +HGR_ROW_CALC HGRBlockCopyNoRecalc clc ldx #$08 @@ -46,10 +43,7 @@ HGRBlockToWhite ; Z set ; C clear ; all other flags and registers clobbered - asl - asl - asl - +HGR_CALC + +HGR_ROW_CALC clc ldx #$08 @loop @@ -141,10 +135,7 @@ HGRBlockCopyWithMask ; out: Y preserved ; A/X clobbered ; $00 clobbered - asl - asl - asl - +HGR_CALC + +HGR_ROW_CALC HGRBlockCopyWithMaskNoRecalc ldx #7 HGRBlockCopyWithMasksLoop diff --git a/src/fx/macros.a b/src/fx/macros.a index 33167341d..54a3e72f9 100644 --- a/src/fx/macros.a +++ b/src/fx/macros.a @@ -55,6 +55,13 @@ sta $3c } +!macro HGR_ROW_CALC { + asl + asl + asl + +HGR_CALC +} + ; /!\ C must be clear before using this macro !macro HGR_INC_WITHIN_BLOCK { lda $27