mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-12 00:30:31 +00:00
tfv: flying more or less works
This commit is contained in:
parent
b1a96a2097
commit
1cf33eeea9
@ -41,6 +41,8 @@ static unsigned char water_map[32]={
|
|||||||
|
|
||||||
static int displayed=0;
|
static int displayed=0;
|
||||||
|
|
||||||
|
static int over_water=0;
|
||||||
|
|
||||||
static int lookup_map(int xx, int yy) {
|
static int lookup_map(int xx, int yy) {
|
||||||
|
|
||||||
int color,offset;
|
int color,offset;
|
||||||
@ -83,7 +85,7 @@ static int lookup_map(int xx, int yy) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int over_water;
|
|
||||||
|
|
||||||
// current screen position
|
// current screen position
|
||||||
static int screen_x, screen_y;
|
static int screen_x, screen_y;
|
||||||
@ -348,9 +350,8 @@ void draw_background_mode7(void) {
|
|||||||
ram[COLOR]=map_color;
|
ram[COLOR]=map_color;
|
||||||
ram[COLOR]|=map_color<<4;
|
ram[COLOR]|=map_color<<4;
|
||||||
|
|
||||||
if (screen_x==20) {
|
if ((screen_x==20) && (screen_y==38)) {
|
||||||
if (map_color==COLOR_DARKBLUE) over_water=1;
|
if (map_color==COLOR_DARKBLUE) over_water=1;
|
||||||
else over_water=0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hlin_double(ram[DRAW_PAGE], screen_x, screen_x+1,
|
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) {
|
void draw_background_mode7(void) {
|
||||||
|
|
||||||
|
|
||||||
@ -476,9 +479,8 @@ void draw_background_mode7(void) {
|
|||||||
|
|
||||||
color_equals(map_color);
|
color_equals(map_color);
|
||||||
|
|
||||||
if (screen_x==20) {
|
if ((screen_x==20) && (screen_y==38)) {
|
||||||
if (map_color==COLOR_DARKBLUE) over_water=1;
|
if (map_color==COLOR_DARKBLUE) over_water=1;
|
||||||
else over_water=0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
plot(screen_x,screen_y);
|
plot(screen_x,screen_y);
|
||||||
@ -501,9 +503,11 @@ int flying(void) {
|
|||||||
unsigned char ch;
|
unsigned char ch;
|
||||||
int shipy;
|
int shipy;
|
||||||
int turning=0;
|
int turning=0;
|
||||||
int draw_splash=0;
|
int draw_splash=0,splash_count=0;
|
||||||
int zint;
|
int zint;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************/
|
/************************************************/
|
||||||
/* Flying */
|
/* Flying */
|
||||||
/************************************************/
|
/************************************************/
|
||||||
@ -515,7 +519,7 @@ int flying(void) {
|
|||||||
shipy=20;
|
shipy=20;
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
if (draw_splash>0) draw_splash--;
|
if (splash_count>0) splash_count--;
|
||||||
|
|
||||||
ch=grsim_input();
|
ch=grsim_input();
|
||||||
|
|
||||||
@ -547,6 +551,7 @@ int flying(void) {
|
|||||||
space_z+=1;
|
space_z+=1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
splash_count=0;
|
||||||
|
|
||||||
// printf("Z=%lf\n",space_z);
|
// printf("Z=%lf\n",space_z);
|
||||||
}
|
}
|
||||||
@ -560,7 +565,7 @@ int flying(void) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
draw_splash=10;
|
splash_count=10;
|
||||||
}
|
}
|
||||||
// printf("Z=%lf\n",space_z);
|
// printf("Z=%lf\n",space_z);
|
||||||
}
|
}
|
||||||
@ -665,9 +670,24 @@ int flying(void) {
|
|||||||
zint=space_z;
|
zint=space_z;
|
||||||
#endif
|
#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 (turning==0) {
|
||||||
if ((speed>0) && (over_water)&&(draw_splash)) {
|
if (draw_splash) {
|
||||||
grsim_put_sprite(splash_forward,
|
grsim_put_sprite(splash_forward,
|
||||||
SHIPX+1,shipy+9);
|
SHIPX+1,shipy+9);
|
||||||
}
|
}
|
||||||
@ -676,9 +696,7 @@ int flying(void) {
|
|||||||
}
|
}
|
||||||
if (turning<0) {
|
if (turning<0) {
|
||||||
|
|
||||||
if ((shipy>25) && (speed>0.0)) draw_splash=1;
|
if (draw_splash) {
|
||||||
|
|
||||||
if (over_water&&draw_splash) {
|
|
||||||
grsim_put_sprite(splash_left,
|
grsim_put_sprite(splash_left,
|
||||||
SHIPX+1,36);
|
SHIPX+1,36);
|
||||||
}
|
}
|
||||||
@ -688,10 +706,7 @@ int flying(void) {
|
|||||||
}
|
}
|
||||||
if (turning>0) {
|
if (turning>0) {
|
||||||
|
|
||||||
|
if (draw_splash) {
|
||||||
if ((shipy>25) && (speed>0.0)) draw_splash=1;
|
|
||||||
|
|
||||||
if (over_water&&draw_splash) {
|
|
||||||
grsim_put_sprite(splash_right,
|
grsim_put_sprite(splash_right,
|
||||||
SHIPX+1,36);
|
SHIPX+1,36);
|
||||||
}
|
}
|
||||||
@ -707,5 +722,3 @@ int flying(void) {
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BIN
tfv/tfv.dsk
BIN
tfv/tfv.dsk
Binary file not shown.
124
tfv/tfv_flying.s
124
tfv/tfv_flying.s
@ -30,6 +30,8 @@ SPACEZ_I EQU $78
|
|||||||
SPACEZ_F EQU $79
|
SPACEZ_F EQU $79
|
||||||
DRAW_SPLASH EQU $7A
|
DRAW_SPLASH EQU $7A
|
||||||
SPEED EQU $7B
|
SPEED EQU $7B
|
||||||
|
SPLASH_COUNT EQU $7C
|
||||||
|
OVER_WATER EQU $7D
|
||||||
|
|
||||||
;===========
|
;===========
|
||||||
; CONSTANTS
|
; CONSTANTS
|
||||||
@ -68,6 +70,8 @@ flying_start:
|
|||||||
sta CY_F
|
sta CY_F
|
||||||
sta DRAW_SPLASH
|
sta DRAW_SPLASH
|
||||||
sta SPEED
|
sta SPEED
|
||||||
|
sta SPLASH_COUNT
|
||||||
|
sta OVER_WATER
|
||||||
|
|
||||||
lda #1
|
lda #1
|
||||||
sta ANGLE
|
sta ANGLE
|
||||||
@ -79,9 +83,9 @@ flying_start:
|
|||||||
|
|
||||||
flying_loop:
|
flying_loop:
|
||||||
|
|
||||||
lda DRAW_SPLASH
|
lda SPLASH_COUNT
|
||||||
beq flying_keyboard
|
beq flying_keyboard
|
||||||
dec DRAW_SPLASH ; decrement splash count
|
dec SPLASH_COUNT ; decrement splash count
|
||||||
|
|
||||||
flying_keyboard:
|
flying_keyboard:
|
||||||
|
|
||||||
@ -109,6 +113,8 @@ skipskip:
|
|||||||
dec SHIPY
|
dec SHIPY
|
||||||
dec SHIPY ; move ship up
|
dec SHIPY ; move ship up
|
||||||
inc SPACEZ_I ; incement height
|
inc SPACEZ_I ; incement height
|
||||||
|
lda #0
|
||||||
|
sta SPLASH_COUNT
|
||||||
|
|
||||||
check_down:
|
check_down:
|
||||||
cmp #('M')
|
cmp #('M')
|
||||||
@ -120,10 +126,15 @@ check_down:
|
|||||||
|
|
||||||
lda SHIPY
|
lda SHIPY
|
||||||
cmp #28
|
cmp #28
|
||||||
bcs check_left ; ble, if shipy < 28
|
bcs splashy ; ble, if shipy < 28
|
||||||
inc SHIPY
|
inc SHIPY
|
||||||
inc SHIPY ; move ship down
|
inc SHIPY ; move ship down
|
||||||
dec SPACEZ_I ; decrement height
|
dec SPACEZ_I ; decrement height
|
||||||
|
bcc check_left
|
||||||
|
|
||||||
|
splashy:
|
||||||
|
lda #10
|
||||||
|
sta SPLASH_COUNT
|
||||||
|
|
||||||
check_left:
|
check_left:
|
||||||
cmp #('J')
|
cmp #('J')
|
||||||
@ -289,6 +300,39 @@ speed_loop:
|
|||||||
draw_background:
|
draw_background:
|
||||||
jsr draw_background_mode7
|
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
|
; Draw the ship
|
||||||
;==============
|
;==============
|
||||||
@ -300,6 +344,23 @@ draw_background:
|
|||||||
bmi draw_ship_left ;; FIXME: optimize order
|
bmi draw_ship_left ;; FIXME: optimize order
|
||||||
|
|
||||||
draw_ship_forward:
|
draw_ship_forward:
|
||||||
|
lda DRAW_SPLASH
|
||||||
|
beq no_forward_splash
|
||||||
|
|
||||||
|
; Draw Splash
|
||||||
|
lda #>splash_forward
|
||||||
|
sta INH
|
||||||
|
lda #<splash_forward
|
||||||
|
sta INL
|
||||||
|
lda #(SHIPX+1)
|
||||||
|
sta XPOS
|
||||||
|
clc
|
||||||
|
lda SHIPY
|
||||||
|
adc #9
|
||||||
|
and #$fe ; make sure it's even
|
||||||
|
sta YPOS
|
||||||
|
jsr put_sprite
|
||||||
|
no_forward_splash:
|
||||||
; Draw Shadow
|
; Draw Shadow
|
||||||
lda #>shadow_forward
|
lda #>shadow_forward
|
||||||
sta INH
|
sta INH
|
||||||
@ -310,6 +371,7 @@ draw_ship_forward:
|
|||||||
clc
|
clc
|
||||||
lda SPACEZ_I
|
lda SPACEZ_I
|
||||||
adc #31
|
adc #31
|
||||||
|
and #$fe ; make sure it's even
|
||||||
sta YPOS
|
sta YPOS
|
||||||
jsr put_sprite
|
jsr put_sprite
|
||||||
|
|
||||||
@ -320,8 +382,21 @@ draw_ship_forward:
|
|||||||
bvc draw_ship
|
bvc draw_ship
|
||||||
|
|
||||||
draw_ship_right:
|
draw_ship_right:
|
||||||
|
lda DRAW_SPLASH
|
||||||
|
beq no_right_splash
|
||||||
|
|
||||||
dec TURNING
|
; Draw Splash
|
||||||
|
lda #>splash_right
|
||||||
|
sta INH
|
||||||
|
lda #<splash_right
|
||||||
|
sta INL
|
||||||
|
lda #(SHIPX+1)
|
||||||
|
sta XPOS
|
||||||
|
clc
|
||||||
|
lda #36
|
||||||
|
sta YPOS
|
||||||
|
jsr put_sprite
|
||||||
|
no_right_splash:
|
||||||
|
|
||||||
; Draw Shadow
|
; Draw Shadow
|
||||||
lda #>shadow_right
|
lda #>shadow_right
|
||||||
@ -333,6 +408,7 @@ draw_ship_right:
|
|||||||
clc
|
clc
|
||||||
lda SPACEZ_I
|
lda SPACEZ_I
|
||||||
adc #31
|
adc #31
|
||||||
|
and #$fe ; make sure it's even
|
||||||
sta YPOS
|
sta YPOS
|
||||||
jsr put_sprite
|
jsr put_sprite
|
||||||
|
|
||||||
@ -340,11 +416,27 @@ draw_ship_right:
|
|||||||
sta INH
|
sta INH
|
||||||
lda #<ship_right
|
lda #<ship_right
|
||||||
sta INL
|
sta INL
|
||||||
|
|
||||||
|
dec TURNING
|
||||||
|
|
||||||
bvc draw_ship
|
bvc draw_ship
|
||||||
|
|
||||||
draw_ship_left:
|
draw_ship_left:
|
||||||
|
lda DRAW_SPLASH
|
||||||
|
beq no_left_splash
|
||||||
|
|
||||||
inc TURNING
|
; Draw Splash
|
||||||
|
lda #>splash_left
|
||||||
|
sta INH
|
||||||
|
lda #<splash_left
|
||||||
|
sta INL
|
||||||
|
lda #(SHIPX+1)
|
||||||
|
sta XPOS
|
||||||
|
clc
|
||||||
|
lda #36
|
||||||
|
sta YPOS
|
||||||
|
jsr put_sprite
|
||||||
|
no_left_splash:
|
||||||
|
|
||||||
; Draw Shadow
|
; Draw Shadow
|
||||||
lda #>shadow_left
|
lda #>shadow_left
|
||||||
@ -356,6 +448,7 @@ draw_ship_left:
|
|||||||
clc
|
clc
|
||||||
lda SPACEZ_I
|
lda SPACEZ_I
|
||||||
adc #31
|
adc #31
|
||||||
|
and #$fe ; make sure it's even
|
||||||
sta YPOS
|
sta YPOS
|
||||||
jsr put_sprite
|
jsr put_sprite
|
||||||
|
|
||||||
@ -364,6 +457,8 @@ draw_ship_left:
|
|||||||
lda #<ship_left
|
lda #<ship_left
|
||||||
sta INL
|
sta INL
|
||||||
|
|
||||||
|
inc TURNING
|
||||||
|
|
||||||
draw_ship:
|
draw_ship:
|
||||||
lda #SHIPX
|
lda #SHIPX
|
||||||
sta XPOS
|
sta XPOS
|
||||||
@ -396,6 +491,8 @@ draw_background_mode7:
|
|||||||
sta COLOR
|
sta COLOR
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
|
sta OVER_WATER
|
||||||
|
|
||||||
sky_loop: ; draw line across screen
|
sky_loop: ; draw line across screen
|
||||||
ldy #40 ; from y=0 to y=6
|
ldy #40 ; from y=0 to y=6
|
||||||
sty V2
|
sty V2
|
||||||
@ -723,10 +820,27 @@ screeny_loop:
|
|||||||
screenx_loop:
|
screenx_loop:
|
||||||
|
|
||||||
jsr lookup_map ; get color in A
|
jsr lookup_map ; get color in A
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
sta (GBASL),Y ; plot double height
|
sta (GBASL),Y ; plot double height
|
||||||
inc GBASL ; point to next pixel
|
inc GBASL ; point to next pixel
|
||||||
|
|
||||||
|
; Check if over water
|
||||||
|
cmp #$22 ; see if dark blue
|
||||||
|
bne not_watery
|
||||||
|
|
||||||
|
lda SCREEN_Y ; only check pixel in middle of screen
|
||||||
|
cmp #38
|
||||||
|
bne not_watery
|
||||||
|
|
||||||
|
lda SCREEN_X ; only check pixel in middle of screen
|
||||||
|
cmp #20
|
||||||
|
bne not_watery
|
||||||
|
|
||||||
|
lda #$1 ; set over water
|
||||||
|
sta OVER_WATER
|
||||||
|
|
||||||
|
not_watery:
|
||||||
; advance to the next position in space
|
; advance to the next position in space
|
||||||
|
|
||||||
clc ; fixed_add(&space_x,&dx,&space_x);
|
clc ; fixed_add(&space_x,&dx,&space_x);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user