From 6f78ca810be760ec67e82d770182b9b51a77351c Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Wed, 5 Sep 2018 22:02:29 -0400 Subject: [PATCH] fireworks: closer to a spark --- fireworks/fw.s | 129 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 90 insertions(+), 39 deletions(-) diff --git a/fireworks/fw.s b/fireworks/fw.s index 97c4dfda..e207b284 100644 --- a/fireworks/fw.s +++ b/fireworks/fw.s @@ -25,23 +25,6 @@ X_OLD = $FD X_OLDER = $FE TEMPY = $FF -;signed char o,i; - -;void routine_370(void) { - -; hplot(xpos+o,ypos_h+o); // NE -; hplot(xpos-o,ypos_h-o); // SW - -; hplot(xpos+o,ypos_h-o); // SE -; hplot(xpos-o,ypos_h+o); // NW - -; hplot(xpos,ypos_h+(o*1.5)); // N -; hplot(xpos+(o*1.5),ypos_h); // E - -; hplot(xpos,ypos_h-(o*1.5)); // S -; hplot(xpos-(o*1.5),ypos_h); // W - -;} draw_fireworks: @@ -296,35 +279,85 @@ done_with_loop: ;================================== draw_explosion: + jsr random16 + lda SEEDL + and #$f + sec + sbc #8 + adc X_OLD + sta XPOS_L ; xpos=x_old+(random()%16)-8; x +/- 8 + ; FIXME: XPOS can overlow + + jsr random16 + lda SEEDL + and #$f + sec + sbc #8 + adc Y_OLD + sta YPOS_H ; ypos_h=y_old+(random()%16)-8; // y +/- 8 + + ; draw white (with fringes) + + lda COLOR_GROUP + clc + adc #$3 + tax + lda COLORTBL,X ; get color from table + sta HGR_COLOR -; xpos=x_old; -; xpos+=(random()%20)-10; // x +/- 10 -; -; ypos_h=y_old; -; ypos_h+=(random()%20)-10; // y +/- 10 -; -; hcolor_equals(color_group+3); // draw white (with fringes) -; ; hplot(xpos,ypos_h); // draw at center of explosion -; -; /* Spread the explosion */ -; for(i=1;i<=9;i++) { -; /* Draw spreading dots in white */ + + ; HPLOT X,Y: X= (y,x), Y=a + + ldx XPOS_L + lda YPOS_H + ldy #0 + jsr HPLOT0 ; hplot(x_old,y_old); + + + + ; Spread the explosion + + ldy #1 + sty TEMPY ; save Y + +explosion_loop: + ldy TEMPY + + ;================================ + ; Draw spreading dots in white + + cpy #9 + bcc explosion_erase + ; if (i<9) { ; o=i; ; hcolor_equals(color_group+3); ; routine_370(); ; } -; /* erase old */ -; o=i-1; -; hcolor_equals(color_group); -; routine_370(); -; -; grsim_update(); -; ch=grsim_input(); -; if (ch=='q') break; -; usleep(50000); -; } +explosion_erase: + ;====================== + ; erase old + + ; erase with proper color black (0 or 4) + + ldx COLOR_GROUP + lda COLORTBL,X ; get color from table + sta HGR_COLOR + +; o=i-1; + + jsr explosion + +done_with_explosion: + + lda #$c0 + jsr WAIT + + inc TEMPY + lda TEMPY + cmp #9 + bne explosion_loop ;================================== ; randomly draw more explosions @@ -342,6 +375,24 @@ done_fireworks: rts +explosion: + +; hplot(xpos+o,ypos_h+o); // NE +; hplot(xpos-o,ypos_h-o); // SW + +; hplot(xpos+o,ypos_h-o); // SE +; hplot(xpos-o,ypos_h+o); // NW + +; hplot(xpos,ypos_h+(o*1.5)); // N +; hplot(xpos+(o*1.5),ypos_h); // E + +; hplot(xpos,ypos_h-(o*1.5)); // S +; hplot(xpos-(o*1.5),ypos_h); // W + + rts + + + ;============================= ; Draw the stars ;=============================