diff --git a/festro.s b/festro.s index 236608f..e5d9dc4 100644 --- a/festro.s +++ b/festro.s @@ -44,22 +44,57 @@ DemoSubroutineTable dw HandleDigawrite dw HandleProdrop dw HandleSwipeWrite - dw HandleProdrop + dw HandleLoResInit + dw HandleFireState1 + dw HandleFireStateK + dw HandleFireState1 + dw HandleFireStateK dw HandleFireState1 dw P8Quit -HandleFireState1 +HandleLoResInit sta LORES - jsr CLRLORES -:loop jsr FirePass - bra :loop + jsr ClearLoRes + inc GDemoState + jmp DemoMain -FirePass +HandleFireState1 + ldx #30 +:loop jsr FirePass + dex + bne :loop + inc GDemoState + jmp DemoMain + +HandleFireStateK + ldx #$20 +:loop jsr FirePass2 + dex + bne :loop + inc GDemoState + jmp DemoMain + + +FirePass pha + phx jsr MakeHeat jsr Scroll8 jsr Average8 jsr DrawBufFullScreen + plx + pla rts +FirePass2 pha + phx + jsr MakeHeat + jsr Scroll8 + jsr DrawKMask + jsr Average8 + jsr DrawBufFullScreen + plx + pla + rts + ************************************************** * Color look up table. @@ -104,12 +139,12 @@ ColorIdxMono dfb #$FF ; WHITE / WHITE dfb #$FF ; WHITE / WHITE -WIDTH equ #40 -HEIGHT equ #24 +FBufWidth equ #40 +FBufHeight equ #24 ds \ -FBUF ds #WIDTH*#HEIGHT+#WIDTH ;extra line gets coals -FBUFLEN equ #WIDTH*#HEIGHT -LASTLINE equ #WIDTH*#HEIGHT-#WIDTH+FBUF +FBUF ds #FBufWidth*#FBufHeight+#FBufWidth ;extra line gets coals +FBufLen equ #FBufWidth*#FBufHeight +FBufLastLine equ #FBufWidth*#FBufHeight-#FBufWidth+FBUF ************************************************** @@ -125,10 +160,10 @@ HandleDigawrite ]writeLoop lda _digawriteString,x beq ]writeDone - sta Lo11+17,x + sta Lo11+10,x inx phx - lda #20 + lda #18 tax tay jsr SimpleWait @@ -142,7 +177,7 @@ HandleDigawrite inc GDemoState jmp DemoMain -_digawriteString asc "DiGAROK",00 +_digawriteString asc "--==>> DiGAROK <<==--",00 ** Dropper routine - not specific to ProDrop per se ** - uses DSEG0 HandleProdrop @@ -236,7 +271,7 @@ HandleProdrop :prodropUpdateLoop - lda #20 + lda #16 tax tay jsr SimpleWait @@ -364,7 +399,7 @@ HandleSwipeWrite sta _swipeMaxWidth ; set max width lda #5 sta _swipeXOffset ; set x position - lda #6 + lda #3 sta _swipeYOffset ; set y position ** DA LOOP!!! does one full pass of all lines.. this is the OUTERMOST LOOP @@ -456,15 +491,21 @@ _swipeXOffset db #$0 ; screen offset for placement _swipeYOffset db #$0 ; screen offset for placement -FireTextHeight equ #12 ; buffer height +FireTextHeight equ #18 ; buffer height FireTextWidth equ #34 ; buffer width ds \ -FireText asc " _______ ______ ",00 - asc " / ____(_)_______ / _/ /_ ",00 - asc " / /_ / / ___/ _ \ / // __/ ",00 - asc " / __/ / / / / __/ _/ // /_ ",00 - asc "/_/ /_/_/ \___/ /___/\__/ ",00 +FireText asc " __ __ ",00 + asc " / / ___ / /______ ",00 + asc " / / / _ \/ __/ ___/ ",00 + asc " / /___/ __/ /_(__ ) ",00 + asc "/_____/\___/\__/____/ ",00 + asc " ",00 + asc " _______ ______ ",00 + asc " / ____(_)_______ / _/ /_",00 + asc " / /_ / / ___/ _ \ / // __/",00 + asc " / __/ / / / / __/ _/ // /_ ",00 + asc " /_/ /_/_/ \___/ /___/\__/ ",00 asc " ",00 asc " __ __ __ ",00 asc " / / / /___ / / ",00 @@ -473,6 +514,96 @@ FireText asc " _______ ______ ",00 asc " \____/ .___(_) ",00 asc " /_/ ",00 +********************* +* DEMO ONLY! +* x=10,y=10 +********************* +_kOffset equ #11 + +DrawKMask ldx #0 +:loop lda _kWidth*0+_spriteK,x + beq :skip1 + cmp #1 + bne :notRand1 + jsr GetRandLow +:notRand1 sta FBufWidth*6+FBUF+_kOffset,x +:skip1 lda _kWidth*1+_spriteK,x + beq :skip2 + cmp #1 + bne :notRand2 + jsr GetRandLow +:notRand2 sta FBufWidth*7+FBUF+_kOffset,x +:skip2 lda _kWidth*2+_spriteK,x + beq :skip3 + sta FBufWidth*8+FBUF+_kOffset,x +:skip3 lda _kWidth*3+_spriteK,x + beq :skip4 + cmp #1 + bne :notRand4 + jsr GetRandLow +:notRand4 sta FBufWidth*9+FBUF+_kOffset,x +:skip4 lda _kWidth*4+_spriteK,x + beq :skip5 + sta FBufWidth*10+FBUF+_kOffset,x +:skip5 lda _kWidth*5+_spriteK,x + beq :skip6 + sta FBufWidth*11+FBUF+_kOffset,x +:skip6 lda _kWidth*6+_spriteK,x + beq :skip7 + sta FBufWidth*12+FBUF+_kOffset,x +:skip7 lda _kWidth*7+_spriteK,x + beq :skip8 + sta FBufWidth*13+FBUF+_kOffset,x +:skip8 lda _kWidth*8+_spriteK,x + beq :skip9 + sta FBufWidth*14+FBUF+_kOffset,x +:skip9 lda _kWidth*9+_spriteK,x + beq :skip10 + sta FBufWidth*15+FBUF+_kOffset,x +:skip10 lda _kWidth*10+_spriteK,x + beq :skip11 + sta FBufWidth*16+FBUF+_kOffset,x +:skip11 lda _kWidth*11+_spriteK,x + beq :skip12 + sta FBufWidth*17+FBUF+_kOffset,x +:skip12 lda _kWidth*12+_spriteK,x + beq :skip13 + sta FBufWidth*18+FBUF+_kOffset,x +:skip13 lda _kWidth*13+_spriteK,x + beq :skip14 + sta FBufWidth*19+FBUF+_kOffset,x +:skip14 lda _kWidth*14+_spriteK,x + beq :skip15 + sta FBufWidth*20+FBUF+_kOffset,x +:skip15 lda _kWidth*15+_spriteK,x + beq :skip16 + sta FBufWidth*21+FBUF+_kOffset,x +:skip16 + + inx + cpx #_kWidth + beq :done + jmp :loop +:done + rts +_kWidth equ #18 +_kHeight equ #16 +_spriteK db $01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01 + db $01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00,$00,$01,$0F,$0F,$0F,$0F,$0F,$01 + db $01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00,$00,$01,$0F,$0F,$0F,$0F,$0F,$01 + db $01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00,$01,$0F,$0F,$0F,$0F,$0F,$0F,$01 + db $01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$01,$0F,$0F,$0F,$0F,$0F,$01,$01,$00 + db $01,$0F,$0F,$0F,$0F,$0F,$01,$00,$01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00 + db $01,$0F,$0F,$0F,$0F,$0F,$0F,$01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00,$00 + db $01,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00,$00,$00 + db $01,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00,$00,$00 + db $01,$0F,$0F,$0F,$0F,$0F,$0F,$01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00,$00 + db $01,$0F,$0F,$0F,$0F,$0F,$01,$00,$01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00 + db $01,$01,$0F,$0F,$0F,$0F,$01,$00,$00,$01,$0F,$0F,$0F,$0F,$0F,$01,$01,$00 + db $01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00,$01,$0F,$0F,$0F,$0F,$0F,$0F,$01 + db $01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00,$00,$01,$0F,$0F,$0F,$0F,$0F,$01 + db $01,$0F,$0F,$0F,$0F,$0F,$01,$00,$00,$00,$00,$01,$0F,$0F,$0F,$0F,$0F,$01 + db $01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01 ************************************************** * Called by DemoMain @@ -514,23 +645,40 @@ GetRand _randomByte db 0 - -************************************************** -* Awesome PRNG thx to White Flame (aka David Holz) -************************************************** -GetRandHot - lda RND +GetRandLow + lda _randomByte2 beq :doEor asl bcc :noEor :doEor eor #$1d -:noEor sta RND +:noEor sta _randomByte2 + cmp #$80 + bcs :hot + lda #$0 + rts +:hot lda #$04 + rts + +_randomByte2 db 0 + + +************************************************** +* Fire stoker.. returns 0 or F +************************************************** +GetRandHot + lda _rndHot + beq :doEor + asl + bcc :noEor +:doEor eor #$1d +:noEor sta _rndHot cmp #$90 ; FIRE RATIO bcs :hot :not lda #$0f rts :hot lda #$00 rts +_rndHot db 0 ************************************************** * Very simple routine to lay down a line where @@ -538,17 +686,17 @@ GetRandHot ************************************************** MakeHeat lda #0 - sta LASTLINE ;FORCE CORNERS BLACK - sta LASTLINE+#39 + sta FBufLastLine ;FORCE CORNERS BLACK + sta FBufLastLine+#39 ;EXTRA LINE - sta LASTLINE+#WIDTH ;FORCE CORNERS BLACK - sta LASTLINE+#WIDTH+#39 + sta FBufLastLine+#FBufWidth ;FORCE CORNERS BLACK + sta FBufLastLine+#FBufWidth+#39 - ldx #WIDTH-2 + ldx #FBufWidth-2 :mloop jsr GetRandHot - sta LASTLINE,x + sta FBufLastLine,x jsr GetRandHot - sta LASTLINE+#WIDTH,x + sta FBufLastLine+#FBufWidth,x dex bne :mloop @@ -559,9 +707,9 @@ MakeHeat ************************************************** Scroll8 *set source - lda #FBUF+WIDTH + lda #FBUF+FBufWidth sta srcPtr - lda #>FBUF+WIDTH + lda #>FBUF+FBufWidth sta srcPtr+1 *set destination @@ -572,7 +720,7 @@ Scroll8 :movfwd ldy #0 ldx #0 - cpx #>FBUFLEN-WIDTH + cpx #>FBufLen-FBufWidth beq :frag :page lda (srcPtr),y sta (dstPtr),y @@ -581,9 +729,9 @@ Scroll8 inc srcPtr+1 inc dstPtr+1 inx - cpx #>FBUFLEN-WIDTH + cpx #>FBufLen-FBufWidth bne :page -:frag cpy #FBUFLEN-WIDTH +:frag cpy #FBufLen-FBufWidth beq :doneCopy lda (srcPtr),y sta (dstPtr),y @@ -611,14 +759,14 @@ Average8 lda #>FBUF+#1 sta srcPtrR+1 - lda #FBUF+#WIDTH + lda #FBUF+#FBufWidth sta srcPtrD - lda #>FBUF+#WIDTH + lda #>FBUF+#FBufWidth sta srcPtrD+1 ldx #0 ; lines -:avgLine ldy #WIDTH-1 +:avgLine ldy #FBufWidth-1 :lineLoop clc lda (srcPtr),y ;0 @@ -632,7 +780,7 @@ Average8 :skipDec sta (srcPtr),y ;0 dey bne :lineLoop - cpx #HEIGHT + cpx #FBufHeight beq :doneLines inx ;next line @@ -667,7 +815,7 @@ Average8 :bottomPixel ;add to bottom line pointer lda srcPtrD clc - adc #WIDTH + adc #FBufWidth sta srcPtrD lda srcPtrD+1 adc #0 @@ -677,6 +825,34 @@ Average8 :doneLines rts +ClearLoRes ldx #40 +:loop dex + stz Lo01,x + stz Lo02,x + stz Lo03,x + stz Lo04,x + stz Lo05,x + stz Lo06,x + stz Lo07,x + stz Lo08,x + stz Lo09,x + stz Lo10,x + stz Lo11,x + stz Lo12,x + stz Lo13,x + stz Lo14,x + stz Lo15,x + stz Lo16,x + stz Lo17,x + stz Lo18,x + stz Lo19,x + stz Lo20,x + stz Lo21,x + stz Lo22,x + stz Lo23,x + stz Lo24,x + bne :loop + rts ************************************************** * Draw entire buffer on screen @@ -687,191 +863,191 @@ DrawBufFullScreen lda ColorIdx,y sta Lo01,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop0 ldx #$0 -:loop1 ldy WIDTH*1+FBUF,x +:loop1 ldy FBufWidth*1+FBUF,x lda ColorIdx,y sta Lo02,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop1 ldx #$0 -:loop2 ldy WIDTH*2+FBUF,x +:loop2 ldy FBufWidth*2+FBUF,x lda ColorIdx,y sta Lo03,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop2 ldx #$0 -:loop3 ldy WIDTH*3+FBUF,x +:loop3 ldy FBufWidth*3+FBUF,x lda ColorIdx,y sta Lo04,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop3 ldx #$0 -:loop4 ldy WIDTH*4+FBUF,x +:loop4 ldy FBufWidth*4+FBUF,x lda ColorIdx,y sta Lo05,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop4 ldx #$0 -:loop5 ldy WIDTH*5+FBUF,x +:loop5 ldy FBufWidth*5+FBUF,x lda ColorIdx,y sta Lo06,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop5 ldx #$0 -:loop6 ldy WIDTH*6+FBUF,x +:loop6 ldy FBufWidth*6+FBUF,x lda ColorIdx,y sta Lo07,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop6 ldx #$0 -:loop7 ldy WIDTH*7+FBUF,x +:loop7 ldy FBufWidth*7+FBUF,x lda ColorIdx,y sta Lo08,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop7 ldx #$0 -:loop8 ldy WIDTH*8+FBUF,x +:loop8 ldy FBufWidth*8+FBUF,x lda ColorIdx,y sta Lo09,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop8 ldx #$0 -:loop9 ldy WIDTH*9+FBUF,x +:loop9 ldy FBufWidth*9+FBUF,x lda ColorIdx,y sta Lo10,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop9 ldx #$0 -:loop10 ldy WIDTH*#10+FBUF,x +:loop10 ldy FBufWidth*#10+FBUF,x lda ColorIdx,y sta Lo11,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop10 ldx #$0 -:loop11 ldy WIDTH*#11+FBUF,x +:loop11 ldy FBufWidth*#11+FBUF,x lda ColorIdx,y sta Lo12,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop11 ldx #$0 -:loop12 ldy WIDTH*#12+FBUF,x +:loop12 ldy FBufWidth*#12+FBUF,x lda ColorIdx,y sta Lo13,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop12 ldx #$0 -:loop13 ldy WIDTH*#13+FBUF,x +:loop13 ldy FBufWidth*#13+FBUF,x lda ColorIdx,y sta Lo14,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop13 ldx #$0 -:loop14 ldy WIDTH*#14+FBUF,x +:loop14 ldy FBufWidth*#14+FBUF,x lda ColorIdx,y sta Lo15,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop14 ldx #$0 -:loop15 ldy WIDTH*#15+FBUF,x +:loop15 ldy FBufWidth*#15+FBUF,x lda ColorIdx,y sta Lo16,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop15 ldx #$0 -:loop16 ldy WIDTH*#16+FBUF,x +:loop16 ldy FBufWidth*#16+FBUF,x lda ColorIdx,y sta Lo17,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop16 ldx #$0 -:loop17 ldy WIDTH*#17+FBUF,x +:loop17 ldy FBufWidth*#17+FBUF,x lda ColorIdx,y sta Lo18,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop17 ldx #$0 -:loop18 ldy WIDTH*#18+FBUF,x +:loop18 ldy FBufWidth*#18+FBUF,x lda ColorIdx,y sta Lo19,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop18 ldx #$0 -:loop19 ldy WIDTH*#19+FBUF,x +:loop19 ldy FBufWidth*#19+FBUF,x lda ColorIdx,y sta Lo20,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop19 ldx #$0 -:loop20 ldy WIDTH*#20+FBUF,x +:loop20 ldy FBufWidth*#20+FBUF,x lda ColorIdx,y sta Lo21,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop20 ldx #$0 -:loop21 ldy WIDTH*#21+FBUF,x +:loop21 ldy FBufWidth*#21+FBUF,x lda ColorIdx,y sta Lo22,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop21 ldx #$0 -:loop22 ldy WIDTH*#22+FBUF,x +:loop22 ldy FBufWidth*#22+FBUF,x lda ColorIdx,y sta Lo23,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop22 ldx #$0 -:loop23 ldy WIDTH*#23+FBUF,x +:loop23 ldy FBufWidth*#23+FBUF,x lda ColorIdx,y sta Lo24,x inx - cpx #WIDTH + cpx #FBufWidth bne :loop23 rts