dos33fsprogs/gr-sim/tfv.c
2017-06-24 23:08:55 -04:00

369 lines
8.7 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "gr-sim.h"
static unsigned char title_rle[]=
{ 0x28,0x28,
0x01,0x00,0x19,0x20,
0x0F,0x00,0x01,0x22,0x03,0x66,0x01,0x22,0x01,0x62,0x01,0x66,0x01,0x62,0x01,0x22,0x01,0x66,0x03,0x22,0x01,0x66,0x01,0x26,0x01,0x62,0x01,0x22,0x01,0x62,0x01,0x26,0x01,0x62,0x01,0x22,0x03,0x66,0x01,0x22,0x01,0x55,0x01,0x00,0x03,0x11,0x01,0x44,0x03,0x22,0x01,0x44,0x03,0x22,
0x02,0x00,0x02,0x22,0x01,0x66,0x02,0x22,0x01,0x66,0x01,0x62,0x01,0x66,0x01,0x22,0x01,0x66,0x03,0x22,0x01,0x66,0x01,0x26,0x01,0x62,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x02,0x22,0x01,0x66,0x02,0x22,0x01,0x55,0x01,0x00,0x01,0x01,0x01,0x11,0x01,0x41,0x01,0x44,0x01,0x42,0x01,0x22,0x01,0x42,0x01,0x44,0x01,0x42,0x01,0x22,0x01,0x02,
0x02,0x00,0x02,0x22,0x01,0x66,0x02,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x01,0x22,0x03,0x66,0x01,0x22,0x01,0x66,0x01,0x62,0x01,0x26,0x01,0x22,0x01,0x26,0x01,0x62,0x01,0x26,0x02,0x22,0x01,0x66,0x02,0x22,0x01,0x55,0x02,0x00,0x01,0x11,0x03,0x44,0x01,0x22,0x03,0x44,0x01,0x22,
0x03,0x00,0x01,0x02,0x18,0x52,0x01,0x55,
0x0E,0x00,0x1E,0x60,
0x0A,0x00,0x01,0x66,0x03,0x22,0x01,0x66,0x01,0x26,0x01,0x22,0x01,0x26,0x01,0x66,0x01,0x22,0x01,0x26,0x01,0x66,0x01,0x22,0x01,0x66,0x03,0x22,0x01,0x66,0x01,0x26,0x01,0x22,0x01,0x26,0x01,0x66,0x01,0x26,0x02,0x62,0x01,0x66,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x01,0x55,
0x09,0x00,0x01,0x66,0x01,0x22,0x01,0x26,0x02,0x66,0x01,0x22,0x01,0x26,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x62,0x01,0x26,0x01,0x22,0x02,0x66,0x01,0x22,0x02,0x66,0x01,0x22,0x01,0x26,0x01,0x22,0x01,0x66,0x01,0x22,0x02,0x26,0x01,0x66,0x01,0x62,0x01,0x26,0x01,0x62,0x01,0x66,0x01,0x55,
0x09,0x00,0x01,0x66,0x01,0x22,0x03,0x66,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x01,0x62,0x01,0x22,0x02,0x66,0x01,0x22,0x02,0x66,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x02,0x26,0x01,0x22,0x02,0x66,0x01,0x22,0x02,0x66,0x01,0x55,
0x09,0x00,0x01,0x06,0x1D,0x56,0x01,0x55,0x03,0x00,0x01,0x10,
0x24,0x00,0x01,0x10,0x01,0x00,0x01,0x10,0x01,0x11,0x01,0x01,
0x05,0x00,0x08,0xCC,0x01,0x40,0x09,0x00,0x01,0xD0,0x01,0x0D,0x01,0x00,0x01,0xD0,0x01,0x0D,0x01,0x00,0x01,0xD0,0x05,0x00,0x01,0x11,
0x0A,0x00,0x01,0x04,0x04,0x54,0x02,0xCC,0x01,0x44,0x01,0x55,0x06,0x00,0x01,0xD0,0x01,0xDD,0x02,0xD0,0x01,0xDD,0x02,0xD0,0x01,0xDD,0x01,0xD0,0x03,0x00,0x02,0x01,0x01,0x11,0x02,0x01,
0x0C,0x00,0x02,0xCC,0x01,0x44,0x01,0x54,0x01,0x55,0x06,0x00,0x01,0xDD,0x07,0xBB,0x01,0xDD,0x04,0x00,0x01,0x10,0x01,0x11,0x01,0x10,
0x0C,0x00,0x02,0xCC,0x01,0x44,0x01,0x54,0x01,0x55,0x07,0x00,0x01,0xDD,0x01,0xBB,0x01,0xBF,0x01,0xB0,0x01,0xBB,0x01,0xBF,0x01,0xB0,0x01,0xBB,0x01,0xDD,0x03,0x00,0x01,0x10,0x03,0x11,0x01,0x10,
0x0A,0x00,0x02,0xCC,0x01,0x44,0x01,0x54,0x01,0x55,0x08,0x00,0x01,0xDD,0x01,0xDB,0x01,0xBB,0x01,0x3B,0x01,0x33,0x02,0xBB,0x01,0xDB,0x01,0xDD,0x03,0x00,0x02,0x01,0x01,0x11,0x02,0x01,
0x0A,0x00,0x02,0xCC,0x01,0x44,0x01,0x55,0x09,0x00,0x02,0xDD,0x05,0xBB,0x02,0xDD,0x05,0x00,0x01,0x11,
0x0C,0x00,0x02,0xCC,0x01,0x44,0x01,0x55,0x09,0x00,0x01,0x0D,0x01,0x00,0x01,0xBB,0x03,0xB1,0x01,0xBB,0x01,0x00,0x01,0x0D,0x04,0x00,0x02,0xBB,
0x0C,0x00,0x01,0x0C,0x01,0x4C,0x01,0x44,0x01,0x55,0x0C,0x00,0x02,0xBB,0x06,0x00,0x01,0x20,0x01,0x22,0x01,0x2B,0x01,0x0B,
0x0E,0x00, 0x02,0x05, 0x09,0x00, 0x01,0x20, 0x06,0x22, 0x03,0x20,
0x02,0x22, 0x01,0x02, 0x09,0x00,
0xff,0xff
// " 55 2222222222222"
};
static unsigned char test_sprite[]={
0x8,0x4,
0x55,0x50,0x00,0x00,0x00,0x00,0x00,0x00,
0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,
0xff,0x1f,0x4f,0x2f,0xff,0x22,0x20,0x00,
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,
};
static int xx,yy,yadd,match;
void draw_segment(int color1, int color2) {
int i;
for(i=0;i<4;i++) {
yy+=yadd;
if (xx==match) color_equals(color1*3);
else color_equals(color1);
basic_vlin(10,yy,9+xx);
if (xx==match) color_equals(color2*3);
else color_equals(color2);
if (yy!=34) basic_vlin(yy,34,9+xx);
xx++;
}
yadd=-yadd;
}
int main(int argc, char **argv) {
int ch;
int x,y;
char tempst[BUFSIZ];
char nameo[9];
int i;
int name_x=0;
int cursor_x=0,cursor_y=0;
grsim_init();
gr();
/* VMW splash */
yy=10;
xx=0;
yadd=6;
match=100;
draw_segment(1,0);
draw_segment(1,4);
draw_segment(2,4);
draw_segment(2,4);
draw_segment(2,4);
draw_segment(2,0);
grsim_update();
usleep(100000);
for(match=0;match<30;match++) {
yy=10;
xx=0;
yadd=6;
draw_segment(1,0);
draw_segment(1,4);
draw_segment(2,4);
draw_segment(2,4);
draw_segment(2,4);
draw_segment(2,0);
grsim_update();
usleep(20000);
}
basic_vtab(20);
basic_htab(9);
basic_print("A VMW SOFTWARE PRODUCTION");
grsim_update();
while(1) {
ch=grsim_input();
if (ch!=0) break;
usleep(10000);
}
/* Title Screen */
grsim_unrle(title_rle,0x800);
gr_copy(0x800,0x400);
grsim_update();
while(1) {
ch=grsim_input();
if (ch!=0) break;
usleep(10000);
}
text();
home();
/* Enter your name */
// 1 2 3
// 0123456789012345678901234567890123456789
//00PLEASE ENTER A NAME:
// 1
// 2
// 3 _ _ _ _ _ _ _ _
// 4
// 5 @ A B C D E F G
// 6
// 7 H I J K L M N O
// 8
// 9 P Q R S T U V W
//10
//11 X Y Z [ \ ] ^ _
//12
//13 ! " # $ % & '
//14
//15 ( ) * + , - . /
//16
//17 0 1 2 3 4 5 6 7
//18
//19 8 9 : ' < = > ?
//20
//21 FINISHED
//22
//23
//24
basic_print("PLEASE ENTER A NAME:");
for(x=0;x<9;x++) nameo[x]=0;
grsim_update();
while(1) {
basic_normal();
basic_htab(12);
basic_vtab(3);
for(x=0;x<8;x++) {
if (x==name_x) {
basic_inverse();
basic_print("+");
basic_normal();
basic_print(" ");
}
else if (nameo[x]==0) {
basic_print("_ ");
}
else {
sprintf(tempst,"%c ",nameo[x]);
basic_print(tempst);
}
}
for(y=0;y<8;y++) {
basic_htab(12);
basic_vtab(y*2+6);
for(x=0;x<8;x++) {
if (y<4) sprintf(tempst,"%c ",(y*8)+x+64);
else sprintf(tempst,"%c ",(y*8)+x);
if ((x==cursor_x) && (y==cursor_y)) basic_inverse();
else basic_normal();
basic_print(tempst);
}
}
basic_htab(12);
basic_vtab(22);
basic_normal();
if ((cursor_y==8) && (cursor_x<4)) basic_inverse();
basic_print(" DONE ");
basic_normal();
basic_print(" ");
if ((cursor_y==8) && (cursor_x>=4)) basic_inverse();
basic_print(" BACK ");
while(1) {
ch=grsim_input();
if (ch==APPLE_UP) { // up
cursor_y--;
}
else if (ch==APPLE_DOWN) { // down
cursor_y++;
}
else if (ch==APPLE_LEFT) { // left
if (cursor_y==8) cursor_x-=4;
else cursor_x--;
}
else if (ch==APPLE_RIGHT) { // right
if (cursor_y==8) cursor_x+=4;
cursor_x++;
}
else if (ch=='\r') {
if (cursor_y==8) {
if (cursor_x<4) {
ch=27;
break;
}
else {
nameo[name_x]=0;
name_x--;
if (name_x<0) name_x=0;
break;
}
}
if (cursor_y<4) nameo[name_x]=(cursor_y*8)+
cursor_x+64;
else nameo[name_x]=(cursor_y*8)+cursor_x;
// printf("Set to %d\n",nameo[name_x]);
name_x++;
}
else if ((ch>32) && (ch<128)) {
nameo[name_x]=ch;
name_x++;
}
if (name_x>7) name_x=7;
if (cursor_x<0) {
cursor_x=7;
cursor_y--;
}
if (cursor_x>7) {
cursor_x=0;
cursor_y++;
}
if (cursor_y<0) cursor_y=8;
if (cursor_y>8) cursor_y=0;
if ((cursor_y==8) && (cursor_x<4)) cursor_x=0;
else if ((cursor_y==8) && (cursor_x>=4)) cursor_x=4;
if (ch!=0) break;
grsim_update();
usleep(10000);
}
if (ch==27) break;
}
/************************************************/
/* Flying */
/************************************************/
gr();
x=17; y=30;
color_equals(0);
int direction=0;
color_equals(6);
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) {
ch=grsim_input();
if ((ch=='q') || (ch==27)) break;
if ((ch=='i') || (ch==APPLE_UP)) if (y>20) y-=2;
if ((ch=='m') || (ch==APPLE_DOWN)) if (y<39) y+=2;
if ((ch=='j') || (ch==APPLE_LEFT)) {
direction--;
if (direction<-1) direction=-1;
}
if ((ch=='k') || (ch==APPLE_RIGHT)) {
direction++;
if (direction>1) direction=1;
}
gr_copy(0x800,0x400);
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();
usleep(10000);
}
return 0;
}