/*
╔════════════════════════════════════════════════════════════════════════╗
║ ║
║ Robot Walk ║
║ ║
║ by Christopher D. Watkins ║
║ ║
╚════════════════════════════════════════════════════════════════════════╝
*/
#include "stdio.h"
#include "dos.h"
#include "math.h"
#include "defs.h"
#define Pi_Over_180 0.01745
float SinD(float a)
{
return (sin(a * Pi_Over_180));
}
float CosD(float a)
{
return (cos(a * Pi_Over_180));
}
typedef char name[33];
FILE *textdiskfile;
name filename;
Word xresolution = 160;
Word yresolution = 100;
Byte numberofframes = 30;
void writeheader()
{
fprintf(textdiskfile,"╔════════════════════════════════════════════════════════════════════════╗\n");
fprintf(textdiskfile,"║ ║\n");
fprintf(textdiskfile,"║ Robot Walk ║\n");
fprintf(textdiskfile,"║ ║\n");
fprintf(textdiskfile,"║ by Christopher D. Watkins ║\n");
fprintf(textdiskfile,"║ ║\n");
fprintf(textdiskfile,"╚════════════════════════════════════════════════════════════════════════╝\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"STATS\n");
fprintf(textdiskfile," XRES = %d\n",xresolution);
fprintf(textdiskfile," YRES = %d\n",yresolution);
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"FRAMES\n");
fprintf(textdiskfile," NUMBER = %d\n",numberofframes);
}
float ypos;
void writestudio()
{
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"ENVIRONMENT\n");
fprintf(textdiskfile," LOCLWGT = 0.750 0.750 0.750\n");
fprintf(textdiskfile," REFLWGT = 0.250 0.250 0.250\n");
fprintf(textdiskfile," TRANWGT = 0.000 0.000 0.000\n");
fprintf(textdiskfile," MINWGT = 0.030 0.030 0.030\n");
fprintf(textdiskfile," MAXWGT = 1.000 1.000 1.000\n");
fprintf(textdiskfile," RDEPTH = 2\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"LAMPS\n");
fprintf(textdiskfile," REFLAMP = FALSE\n");
fprintf(textdiskfile," LAMPREF = 0.000 0.000 0.000\n");
fprintf(textdiskfile," DISTEFF = 0.050\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"OBSERVER\n");
fprintf(textdiskfile," FLENGTH = 3.100\n");
fprintf(textdiskfile," OBSPOS = 0.000 %3.3f 220.000\n",ypos);
fprintf(textdiskfile," ROTATE = 0.000\n");
fprintf(textdiskfile," TILT = 16.000\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"SKY\n");
fprintf(textdiskfile," HORCOL = 0.500 0.600 0.700\n");
fprintf(textdiskfile," ZENCOL = 0.700 0.800 1.000\n");
fprintf(textdiskfile," CLOUDS = FALSE\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"MATERIAL\n");
fprintf(textdiskfile," TYPE = PLASTICTILE\n");
fprintf(textdiskfile," TEXTURE = CHECKER\n");
fprintf(textdiskfile," AMBRFL = 0.100 0.100 0.100\n");
fprintf(textdiskfile," DIFRFL = 0.700 0.700 0.700\n");
fprintf(textdiskfile," SPCRFL = 0.200 0.200 0.200\n");
fprintf(textdiskfile," GLOSS = 8.000\n");
fprintf(textdiskfile," TRANS = 0.000 0.000 0.000\n");
fprintf(textdiskfile," INDEX = 1.000\n");
fprintf(textdiskfile," TILE1 = 1.000 0.200 0.200\n");
fprintf(textdiskfile," TILE2 = 0.250 0.250 0.250\n");
fprintf(textdiskfile," TILE = 0.012\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"MATERIAL\n");
fprintf(textdiskfile," TYPE = STEEL\n");
fprintf(textdiskfile," TEXTURE = SMOOTH\n");
fprintf(textdiskfile," AMBRFL = 0.100 0.100 0.100\n");
fprintf(textdiskfile," DIFRFL = 0.600 0.600 0.600\n");
fprintf(textdiskfile," SPCRFL = 0.300 0.300 0.300\n");
fprintf(textdiskfile," GLOSS = 1.000\n");
fprintf(textdiskfile," TRANS = 0.000 0.000 0.000\n");
fprintf(textdiskfile," INDEX = 1.000\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"GROUND\n");
fprintf(textdiskfile," MATL = PLASTICTILE\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"LAMP\n");
fprintf(textdiskfile," LOC = 150.000 %3.3f 350.000\n",ypos);
fprintf(textdiskfile," RADIUS = 100.000\n");
fprintf(textdiskfile," INTENS = 0.950 0.950 0.910\n");
}
float hgt;
void sph(float x, float y, float z, float rad)
{
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"SPHERE\n");
fprintf(textdiskfile," LOC = %3.3f %3.3f %3.3f\n",x,y + ypos + 660.0,z + hgt);
fprintf(textdiskfile," RADIUS = %3.3f\n",rad);
fprintf(textdiskfile," MATL = STEEL\n");
}
void cyl(float x1, float y1, float z1, float x2, float y2, float z2, float rad)
{
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"CYLINDER\n");
fprintf(textdiskfile," BASELOC = %3.3f %3.3f %3.3f\n",x1,y1 + ypos + 660.0,z1 + hgt);
fprintf(textdiskfile," BASERAD = %3.3f\n",rad);
fprintf(textdiskfile," APEXLOC = %3.3f %3.3f %3.3f\n",x2,y2 + ypos + 660.0,z2 + hgt);
fprintf(textdiskfile," MATL = STEEL\n");
}
void make()
{
Byte t;
float a, b;
float c, d;
float phase;
ypos = -660.0;
phase = 0.0;
for (t = 1; t <= numberofframes; t++)
{
writestudio();
hgt = -3 * CosD(phase * 2.0);
/* Body */
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"BOX\n");
fprintf(textdiskfile," LOC = -50.000 %f %f\n",-200.000 + ypos + 660.0,50.0 + hgt);
fprintf(textdiskfile," V1 = 100.000 0.000 0.000\n");
fprintf(textdiskfile," V2 = 0.000 60.000 0.000\n");
fprintf(textdiskfile," V3 = 0.000 0.000 70.000\n");
fprintf(textdiskfile," MATL = STEEL\n");
/* Head */
cyl(0.0,-170.0,125.0,0.0,-170.0,155.0,20.0);
sph(0.0,-170.0,155.0,20.0);
/* Eyes */
a = 22.4 * CosD(270.0 + 12.0 * SinD(phase + 45.0) - 26.56);
b = -170.0 + 22.4 * SinD(270.0 + 12.0 * SinD(phase + 45.0) - 26.56);
c = 22.4 * CosD(270.0 + 12.0 * SinD(phase + 45.0) + 26.56);
d = -170.0 + 22.4 * SinD(270.0 + 12.0 * SinD(phase + 45.0) + 26.56);
sph(a,b,150.0,5.0);
sph(c,d,150.0,5.0);
/* Lips */
sph(a,b,135.0,5.0);
cyl(a,b,135.0,c,d,135.0,5.0);
sph(c,d,135.0,5.0);
/* Neck */
sph(0.0,-170.0,125.0,10.0);
/* Shoulders */
sph(-70.0,-170.0,105.0,12.0);
cyl(-70.0,-170.0,105.0,70.0,-170.0,105.0,12.0);
sph(70.0,-170.0,105.0,12.0);
/* Left Arm */
a = -170.0 + 15 * CosD(phase);
b = 50.0;
cyl(70.0,-170.0,105.0,70.0,a,b,12.0);
sph(70.0,a,b,12.0);
/* Right Arm */
a = -170.0 + 15 * CosD(phase + 180.0);
b = 50.0;
cyl(-70.0,-170.0,105.0,-70.0,a,b,12.0);
sph(-70.0,a,b,12.0);
/* Left Leg */
a = -170.0 + 15 * CosD(phase + 180.0);
b = 15.0;
cyl(25.0,-170.0,55.0,25.0,a,b,20.0);
sph(25.0,a,b,20.0);
/* Right Leg */
a = -170.0 + 15 * CosD(phase);
b = 15.0;
cyl(-25.0,-170.0,55.0,-25.0,a,b,20.0);
sph(-25.0,a,b,20.0);
ypos = ypos + (2.0 / 0.012) / numberofframes;
/* 0.012 = 1/2 tile size */
phase = phase + (360.0 / numberofframes);
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"BOUNDINGSPHERETEST\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"\n");
fprintf(textdiskfile,"ENDFRAME\n");
}
}
void main()
{
strcpy(filename,"ROBOT.RT");
clrscr();
printf("Generating %s File\n",filename);
printf("\n");
printf("By Christopher D. Watkins\n");
printf("\n");
printf("\n");
printf("Writing %d frames\n",numberofframes);
textdiskfile=fopen(filename, "wt");
writeheader();
make();
fclose(textdiskfile);
}