tfv: start in on flying

This commit is contained in:
Vince Weaver 2017-05-18 23:38:06 -04:00
parent a0ee6864c1
commit 6bc2c7de1c
3 changed files with 81 additions and 6 deletions

View File

@ -766,6 +766,8 @@ int grsim_put_sprite(unsigned char *sprite_data, int xpos, int ypos) {
ram[CV]=*ptr; ram[CV]=*ptr;
ptr++; ptr++;
ypos=ypos&0xfe;
while(1) { while(1) {
address=gr_addr_lookup[ypos/2]; address=gr_addr_lookup[ypos/2];
address+=xpos; address+=xpos;
@ -787,7 +789,7 @@ int grsim_put_sprite(unsigned char *sprite_data, int xpos, int ypos) {
ptr++; ptr++;
address++; address++;
} }
ypos++; ypos+=2;
ram[CV]--; ram[CV]--;
if (ram[CV]==0) break; if (ram[CV]==0) break;
} }
@ -1100,3 +1102,29 @@ void basic_normal(void) {
return; return;
} }
int hlin(int page, int x1, int x2, int at) {
unsigned short addr;
int i,hi;
addr=gr_addr_lookup[at/2];
hi=at&1;
addr+=(page*4)<<8;
for(i=x1;i<x2;i++) {
if (hi) {
ram[addr+i]=ram[addr+i]&0x0f;
ram[addr+i]|=ram[COLOR]&0xf0;
}
else {
ram[addr+i]=ram[addr+i]&0xf0;
ram[addr+i]|=ram[COLOR]&0x0f;
}
}
return 0;
}

View File

@ -19,6 +19,7 @@ void basic_vtab(int y);
void basic_print(char *string); void basic_print(char *string);
void basic_inverse(void); void basic_inverse(void);
void basic_normal(void); void basic_normal(void);
int hlin(int page, int x1, int x2, int at);
#define APPLE_UP 11 #define APPLE_UP 11
#define APPLE_DOWN 10 #define APPLE_DOWN 10

View File

@ -40,6 +40,26 @@ static unsigned char test_sprite[]={
0x5f,0x5f,0x5f,0x5f,0xff,0xf2,0xf2,0xf2, 0x5f,0x5f,0x5f,0x5f,0xff,0xf2,0xf2,0xf2,
}; };
static unsigned char ship_forward[]={
0x5,0x3,
0x00,0x00,0x77,0x00,0x00,
0x50,0x55,0x77,0x55,0x50,
0x01,0x00,0x07,0x00,0x01,
};
static unsigned char ship_right[]={
0x5,0x3,
0x50,0x00,0x70,0x77,0x00,
0x01,0x55,0x77,0x55,0x50,
0x00,0x77,0x07,0x00,0x15,
};
static unsigned char ship_left[]={
0x5,0x3,
0x00,0x77,0x70,0x00,0x50,
0x50,0x55,0x77,0x55,0x01,
0x15,0x00,0x07,0x77,0x00,
};
int main(int argc, char **argv) { int main(int argc, char **argv) {
@ -228,22 +248,48 @@ int main(int argc, char **argv) {
if (ch==27) break; if (ch==27) break;
} }
/************************************************/
/* Flying */
/************************************************/
gr(); gr();
x=20; y=21; x=17; y=30;
color_equals(0); color_equals(0);
int direction=0;
color_equals(6);
int i;
for(i=0;i<20;i++) {
hlin(1, 0, 40, i);
}
color_equals(2);
for(i=20;i<48;i++) {
hlin(1, 0, 40, i);
}
while(1) { while(1) {
ch=grsim_input(); ch=grsim_input();
if ((ch=='q') || (ch==27)) break; if ((ch=='q') || (ch==27)) break;
if ((ch=='i') || (ch==APPLE_UP)) if (y>0) y-=2; if ((ch=='i') || (ch==APPLE_UP)) if (y>20) y-=2;
if ((ch=='m') || (ch==APPLE_DOWN)) if (y<39) y+=2; if ((ch=='m') || (ch==APPLE_DOWN)) if (y<39) y+=2;
if ((ch=='j') || (ch==APPLE_LEFT)) if (x>0) x--; if ((ch=='j') || (ch==APPLE_LEFT)) {
if ((ch=='k') || (ch==APPLE_RIGHT)) if (x<39) x++; direction--;
if (direction<-1) direction=-1;
}
if ((ch=='k') || (ch==APPLE_RIGHT)) {
direction++;
if (direction>1) direction=1;
}
gr_copy(0x800,0x400); gr_copy(0x800,0x400);
grsim_put_sprite(test_sprite,x,y);
if (direction==0) grsim_put_sprite(ship_forward,x,y);
if (direction==-1) grsim_put_sprite(ship_left,x,y);
if (direction==1) grsim_put_sprite(ship_right,x,y);
grsim_update(); grsim_update();