From 1cf33eeea92dfac9c52b7c108b7650321e771c00 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 9 Oct 2017 15:36:25 -0400 Subject: [PATCH] tfv: flying more or less works --- gr-sim/tfv_flying.c | 49 ++++++++++------- tfv/tfv.dsk | Bin 143360 -> 143360 bytes tfv/tfv_flying.s | 124 ++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 150 insertions(+), 23 deletions(-) diff --git a/gr-sim/tfv_flying.c b/gr-sim/tfv_flying.c index 01fe5fd2..489d1c32 100644 --- a/gr-sim/tfv_flying.c +++ b/gr-sim/tfv_flying.c @@ -41,6 +41,8 @@ static unsigned char water_map[32]={ static int displayed=0; +static int over_water=0; + static int lookup_map(int xx, int yy) { int color,offset; @@ -83,7 +85,7 @@ static int lookup_map(int xx, int yy) { } -static int over_water; + // current screen position static int screen_x, screen_y; @@ -348,9 +350,8 @@ void draw_background_mode7(void) { ram[COLOR]=map_color; ram[COLOR]|=map_color<<4; - if (screen_x==20) { + if ((screen_x==20) && (screen_y==38)) { if (map_color==COLOR_DARKBLUE) over_water=1; - else over_water=0; } hlin_double(ram[DRAW_PAGE], screen_x, screen_x+1, @@ -420,6 +421,8 @@ double our_cos(unsigned char angle) { // // + + void draw_background_mode7(void) { @@ -476,9 +479,8 @@ void draw_background_mode7(void) { color_equals(map_color); - if (screen_x==20) { + if ((screen_x==20) && (screen_y==38)) { if (map_color==COLOR_DARKBLUE) over_water=1; - else over_water=0; } plot(screen_x,screen_y); @@ -501,9 +503,11 @@ int flying(void) { unsigned char ch; int shipy; int turning=0; - int draw_splash=0; + int draw_splash=0,splash_count=0; int zint; + + /************************************************/ /* Flying */ /************************************************/ @@ -515,7 +519,7 @@ int flying(void) { shipy=20; while(1) { - if (draw_splash>0) draw_splash--; + if (splash_count>0) splash_count--; ch=grsim_input(); @@ -547,6 +551,7 @@ int flying(void) { space_z+=1; #endif } + splash_count=0; // printf("Z=%lf\n",space_z); } @@ -560,7 +565,7 @@ int flying(void) { #endif } else { - draw_splash=10; + splash_count=10; } // printf("Z=%lf\n",space_z); } @@ -665,9 +670,24 @@ int flying(void) { zint=space_z; #endif + draw_splash=0; + + + if (speed>0) { + + if ((shipy>25) && (turning!=0)) { + splash_count=1; + } + + if ((over_water) && (splash_count)) { + draw_splash=1; + } + } + +// printf("VMW: %d %d\n",draw_splash,splash_count); if (turning==0) { - if ((speed>0) && (over_water)&&(draw_splash)) { + if (draw_splash) { grsim_put_sprite(splash_forward, SHIPX+1,shipy+9); } @@ -676,9 +696,7 @@ int flying(void) { } if (turning<0) { - if ((shipy>25) && (speed>0.0)) draw_splash=1; - - if (over_water&&draw_splash) { + if (draw_splash) { grsim_put_sprite(splash_left, SHIPX+1,36); } @@ -688,10 +706,7 @@ int flying(void) { } if (turning>0) { - - if ((shipy>25) && (speed>0.0)) draw_splash=1; - - if (over_water&&draw_splash) { + if (draw_splash) { grsim_put_sprite(splash_right, SHIPX+1,36); } @@ -707,5 +722,3 @@ int flying(void) { } return 0; } - - diff --git a/tfv/tfv.dsk b/tfv/tfv.dsk index eaddac68e9db53ff408cdad3095be5b9888941ad..6dd3d296cc0533b59c314c93a99697c7b159c49c 100644 GIT binary patch delta 22593 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 diff --git a/tfv/tfv_flying.s b/tfv/tfv_flying.s index acc91ed4..11ddceb5 100644 --- a/tfv/tfv_flying.s +++ b/tfv/tfv_flying.s @@ -30,6 +30,8 @@ SPACEZ_I EQU $78 SPACEZ_F EQU $79 DRAW_SPLASH EQU $7A SPEED EQU $7B +SPLASH_COUNT EQU $7C +OVER_WATER EQU $7D ;=========== ; CONSTANTS @@ -68,6 +70,8 @@ flying_start: sta CY_F sta DRAW_SPLASH sta SPEED + sta SPLASH_COUNT + sta OVER_WATER lda #1 sta ANGLE @@ -79,9 +83,9 @@ flying_start: flying_loop: - lda DRAW_SPLASH + lda SPLASH_COUNT beq flying_keyboard - dec DRAW_SPLASH ; decrement splash count + dec SPLASH_COUNT ; decrement splash count flying_keyboard: @@ -109,6 +113,8 @@ skipskip: dec SHIPY dec SHIPY ; move ship up inc SPACEZ_I ; incement height + lda #0 + sta SPLASH_COUNT check_down: cmp #('M') @@ -120,10 +126,15 @@ check_down: lda SHIPY cmp #28 - bcs check_left ; ble, if shipy < 28 + bcs splashy ; ble, if shipy < 28 inc SHIPY inc SHIPY ; move ship down dec SPACEZ_I ; decrement height + bcc check_left + +splashy: + lda #10 + sta SPLASH_COUNT check_left: cmp #('J') @@ -289,6 +300,39 @@ speed_loop: draw_background: jsr draw_background_mode7 +; lda #1 +; sta OVER_WATER + + ; Calculate whether to draw the splash + + lda #0 ; set splash drawing to 0 + sta DRAW_SPLASH + + lda SPEED ; if speed==0, no splash + beq no_splash + + lda TURNING + beq no_turning_splash + + lda SHIPY + cmp #27 + bcc no_turning_splash ; blt if shipy<25 skip + + lda #1 + sta SPLASH_COUNT + +no_turning_splash: + lda OVER_WATER ; no splash if over land + beq no_splash + + lda SPLASH_COUNT ; no splash if splash_count expired + beq no_splash + + lda #1 + sta DRAW_SPLASH + +no_splash: + ;============== ; Draw the ship ;============== @@ -300,6 +344,23 @@ draw_background: bmi draw_ship_left ;; FIXME: optimize order draw_ship_forward: + lda DRAW_SPLASH + beq no_forward_splash + + ; Draw Splash + lda #>splash_forward + sta INH + lda #shadow_forward sta INH @@ -310,6 +371,7 @@ draw_ship_forward: clc lda SPACEZ_I adc #31 + and #$fe ; make sure it's even sta YPOS jsr put_sprite @@ -320,8 +382,21 @@ draw_ship_forward: bvc draw_ship draw_ship_right: + lda DRAW_SPLASH + beq no_right_splash - dec TURNING + ; Draw Splash + lda #>splash_right + sta INH + lda #shadow_right @@ -333,6 +408,7 @@ draw_ship_right: clc lda SPACEZ_I adc #31 + and #$fe ; make sure it's even sta YPOS jsr put_sprite @@ -340,11 +416,27 @@ draw_ship_right: sta INH lda #splash_left + sta INH + lda #shadow_left @@ -356,6 +448,7 @@ draw_ship_left: clc lda SPACEZ_I adc #31 + and #$fe ; make sure it's even sta YPOS jsr put_sprite @@ -364,6 +457,8 @@ draw_ship_left: lda #