mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-04 05:05:13 +00:00
xmas2018: make sprites non-transparent
and vapor lock again
This commit is contained in:
parent
5a0a148666
commit
c82b4c8bdb
@ -24,7 +24,7 @@ XMAS2018: xmas2018.o
|
||||
|
||||
xmas2018.o: xmas2018.s \
|
||||
zp.inc hardware.inc \
|
||||
vapor_lock.s delay_a.s wait_keypress.s \
|
||||
vapor_lock.s delay_a.s wait_keypress.s gr_putsprite.s \
|
||||
play_music.s mockingboard.s rts.s \
|
||||
wreath.s wreath.img.lz4 sprites.inc \
|
||||
ball.s ball.img.lz4 greets.raw.lz4 gr_scroll.s \
|
||||
|
@ -16,3 +16,5 @@ Memory Map:
|
||||
SIZE:
|
||||
3903 -- 12/18
|
||||
3647 -- use LZ4 encryption on scroll text
|
||||
3903 -- add in support for all 5 candles
|
||||
3647 -- make sprites non-transparent
|
||||
|
@ -1,31 +1,15 @@
|
||||
|
||||
;=============================================
|
||||
; put_sprite
|
||||
; put_sprite_no_transparency
|
||||
;=============================================
|
||||
; Sprite to display in INH,INL
|
||||
; Location is XPOS,YPOS
|
||||
; Note, only works if YPOS is multiple of two
|
||||
|
||||
|
||||
; time= 28 setup
|
||||
; Y*outerloop
|
||||
; outerloop = 34 setup
|
||||
; X*innerloop
|
||||
; innerloop = 30 if $00 17+13(done)
|
||||
; 64 if $0X 16+7+8+20(put_sprite_mask)+13(done)
|
||||
; 69 if $X0 16+8+7+5+20(put_sprite_mask)+13(done)
|
||||
; 54 if if $XX 16+8+8+9(put_all)+13(done)
|
||||
; time= 28 + Y* (34+ X*31 + 17) + 5
|
||||
; = 33 + Y*(51+31*X)
|
||||
|
||||
|
||||
; -1 for last iteration
|
||||
; 18 (-1 for last)
|
||||
; 6 return
|
||||
|
||||
; so cost = 28 + Y*(34+18)+ (INNER-Y) -1 + 6
|
||||
; = 33 + Y*(52)+(INNER-Y)
|
||||
; = 33 + Y*(52)+ [30A + 64B + 69C + 54D]-Y
|
||||
|
||||
put_sprite:
|
||||
put_sprite_no_transparency:
|
||||
|
||||
ldy #0 ; byte 0 is xsize ; 2
|
||||
lda (INL),Y ; 5
|
||||
@ -34,7 +18,7 @@ put_sprite:
|
||||
|
||||
lda (INL),Y ; byte 1 is ysize ; 5
|
||||
sta CV ; ysize is in CV ; 3
|
||||
iny ; 2
|
||||
iny ; Y now points to begin of sprite data ; 2
|
||||
|
||||
lda YPOS ; make a copy of ypos ; 3
|
||||
sta TEMPY ; as we modify it ; 3
|
||||
@ -42,7 +26,7 @@ put_sprite:
|
||||
; 28
|
||||
put_sprite_loop:
|
||||
sty TEMP ; save sprite pointer ; 3
|
||||
ldy TEMPY ; 3
|
||||
ldy TEMPY ; get YPOS ; 3
|
||||
lda gr_offsets,Y ; lookup low-res memory address ; 4
|
||||
clc ; 2
|
||||
adc XPOS ; add in xpos ; 3
|
||||
@ -60,78 +44,29 @@ put_sprite_loop:
|
||||
put_sprite_pixel:
|
||||
lda (INL),Y ; get sprite colors ; 5
|
||||
iny ; increment sprite pointer ; 2
|
||||
|
||||
sty TEMP ; save sprite pointer ; 3
|
||||
ldy #$0 ; 2
|
||||
|
||||
; check if completely transparent
|
||||
; if so, skip
|
||||
|
||||
cmp #$0 ; if all zero, transparent ; 2
|
||||
beq put_sprite_done_draw ; don't draw it ; 2nt/3
|
||||
;==============
|
||||
; 16/17
|
||||
|
||||
sta COLOR ; save color for later ; 3
|
||||
|
||||
; check if top pixel transparent
|
||||
|
||||
and #$f0 ; check if top nibble zero ; 2
|
||||
bne put_sprite_bottom ; if not skip ahead ; 2nt/3
|
||||
;==============
|
||||
; 7/8
|
||||
|
||||
lda #$f0 ; setup mask ; 2
|
||||
sta MASK ; 3
|
||||
bmi put_sprite_mask ; always? ; 3
|
||||
;=============
|
||||
; 8
|
||||
|
||||
put_sprite_bottom:
|
||||
lda COLOR ; re-load color ; 3
|
||||
and #$0f ; check if bottom nibble zero ; 2
|
||||
bne put_sprite_all ; if not, skip ahead ; 2nt/3
|
||||
;=============
|
||||
; 7/8
|
||||
|
||||
lda #$0f ; 2
|
||||
sta MASK ; setup mask ; 3
|
||||
;===========
|
||||
; 5
|
||||
|
||||
put_sprite_mask:
|
||||
lda (OUTL),Y ; get color at output ; 5
|
||||
and MASK ; mask off unneeded part ; 3
|
||||
ora COLOR ; or the color in ; 3
|
||||
sta (OUTL),Y ; store it back ; 6
|
||||
|
||||
jmp put_sprite_done_draw ; we are done ; 3
|
||||
;===========
|
||||
; 20
|
||||
|
||||
put_sprite_all:
|
||||
lda COLOR ; load color ; 3
|
||||
ldy #0 ; set out pointer ; 2
|
||||
sta (OUTL),Y ; and write it out ; 6
|
||||
;============
|
||||
; 9
|
||||
; 18
|
||||
|
||||
put_sprite_done_draw:
|
||||
|
||||
ldy TEMP ; restore sprite pointer ; 3
|
||||
|
||||
inc OUTL ; increment output pointer ; 5
|
||||
dex ; decrement x counter ; 2
|
||||
bne put_sprite_pixel ; if not done, keep looping ; 2nt/3
|
||||
bne put_sprite_pixel ; if not done, keep looping ; 3
|
||||
;==============
|
||||
; 12/13
|
||||
; 13
|
||||
|
||||
; -1
|
||||
inc TEMPY ; each line has two y vars ; 5
|
||||
inc TEMPY ; 5
|
||||
dec CV ; decemenet total y count ; 5
|
||||
bne put_sprite_loop ; loop if not done ; 2nt/3
|
||||
bne put_sprite_loop ; loop if not done ; 3
|
||||
;==============
|
||||
; 17/18
|
||||
; 17
|
||||
|
||||
; -1
|
||||
rts ; return ; 6
|
||||
|
||||
|
||||
|
@ -1,3 +1,10 @@
|
||||
|
||||
wide_empty:
|
||||
.byte $2,$3
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
|
||||
wide_flame0:
|
||||
.byte $2,$3
|
||||
.byte $dd,$dd
|
||||
@ -7,6 +14,7 @@ wide_flame0:
|
||||
; = 33 + Y*(52)+ [30A + 64B + 69C + 54D]-Y
|
||||
; = 33 + 3*52 + 30*0 + 64*0 + 69*0 + 54*6 - 3
|
||||
; = 510
|
||||
; = 33 + Y*(51+31*X) = 33 + 3*(51+62) = 372
|
||||
|
||||
wide_flame1:
|
||||
.byte $2,$3
|
||||
@ -39,6 +47,12 @@ wide_flame3:
|
||||
; = 510
|
||||
|
||||
|
||||
empty:
|
||||
.byte $1,$3
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
|
||||
flame0:
|
||||
.byte $1,$3
|
||||
.byte $dd
|
||||
@ -79,4 +93,8 @@ flame3:
|
||||
; = 33 + 3*52 + 30*0 + 64*0 + 69*0 + 54*3 - 3
|
||||
; = 348
|
||||
|
||||
wide_lookup:
|
||||
.byte >wide_flame0,>wide_flame1,>wide_flame2,>wide_flame3
|
||||
|
||||
flame_lookup:
|
||||
.byte >flame0,>flame1,>flame2,>flame3
|
||||
|
@ -120,12 +120,13 @@ wrloopF:dex ; 2
|
||||
|
||||
; do_nothing should be 4550
|
||||
; play music 1023
|
||||
; sprite 536
|
||||
; sprites (536*3+374*2) = ;2356
|
||||
; 398
|
||||
; -18 frame adjust
|
||||
; -7 end detect
|
||||
; -10 keypress
|
||||
; ===========
|
||||
; 2956
|
||||
; 1136
|
||||
|
||||
|
||||
|
||||
@ -159,6 +160,8 @@ done_wframing:
|
||||
; draw sprites
|
||||
;========================
|
||||
|
||||
; Candle 1 (Hope)
|
||||
|
||||
lda #>wide_flame0 ; 2
|
||||
sta INH ; 3
|
||||
lda #<wide_flame0 ; 2
|
||||
@ -168,14 +171,76 @@ done_wframing:
|
||||
sta XPOS ; 3
|
||||
lda #4 ; 2
|
||||
sta YPOS ; 3
|
||||
jsr put_sprite ; 6+510
|
||||
jsr put_sprite_no_transparency ; 6+372
|
||||
;===============
|
||||
; 398
|
||||
.if 0
|
||||
; Candle 2 (Peace)
|
||||
|
||||
lda #>flame0 ; 2
|
||||
sta INH ; 3
|
||||
lda #<flame0 ; 2
|
||||
sta INL ; 3
|
||||
|
||||
lda #14 ; 2
|
||||
sta XPOS ; 3
|
||||
lda #4 ; 2
|
||||
sta YPOS ; 3
|
||||
jsr put_sprite_no_transparency ; 6+348
|
||||
;===============
|
||||
; 374
|
||||
|
||||
; Candle 3 (Joy)
|
||||
|
||||
lda #>flame0 ; 2
|
||||
sta INH ; 3
|
||||
lda #<flame0 ; 2
|
||||
sta INL ; 3
|
||||
|
||||
lda #31 ; 2
|
||||
sta XPOS ; 3
|
||||
lda #4 ; 2
|
||||
sta YPOS ; 3
|
||||
jsr put_sprite_no_transparency ; 6+348
|
||||
;===============
|
||||
; 374
|
||||
|
||||
; Candle 4 (Love)
|
||||
|
||||
lda #>wide_flame1 ; 2
|
||||
sta INH ; 3
|
||||
lda #<wide_flame0 ; 2
|
||||
sta INL ; 3
|
||||
|
||||
lda #26 ; 2
|
||||
sta XPOS ; 3
|
||||
lda #4 ; 2
|
||||
sta YPOS ; 3
|
||||
jsr put_sprite_no_transparency ; 6+510
|
||||
;===============
|
||||
; 536
|
||||
|
||||
; Try X=117 Y=5 cycles=2956
|
||||
; Candle 5 (Christmas)
|
||||
|
||||
ldy #5 ; 2
|
||||
wrloop1:ldx #117 ; 2
|
||||
lda #>wide_flame0 ; 2
|
||||
sta INH ; 3
|
||||
lda #<wide_flame0 ; 2
|
||||
sta INL ; 3
|
||||
|
||||
lda #20 ; 2
|
||||
sta XPOS ; 3
|
||||
lda #4 ; 2
|
||||
sta YPOS ; 3
|
||||
jsr put_sprite_no_transparency ; 6+510
|
||||
;===============
|
||||
; 536
|
||||
.endif
|
||||
|
||||
; Try X=225 Y=1 cycles=1132 R4
|
||||
; Try X=205 Y=3 cycles=3094
|
||||
|
||||
ldy #3 ; 2
|
||||
wrloop1:ldx #205 ; 2
|
||||
wrloop2:dex ; 2
|
||||
bne wrloop2 ; 2nt/3
|
||||
dey ; 2
|
||||
|
Loading…
Reference in New Issue
Block a user