#includeath.h>#includeraph.h>#include<dos.h>#includetdio.h>structptex{intps;//pointsinpolygoninttex;intp[5][3];//coordinates}ptex;structpmove{intstart,stop,typ;intpara[12];intx,y,z,ax,ay,az;}pmo
ve;structpfilm{floatfx,fy,fz,fax,fay,faz;//Movevectorintmoves;structpmovemove[40];}pfilm;structpworld{inttexs,x,y,z,ax,ay,az,polys;//positionanglepolygonsstructptex*otex;//originpointsstructptex*mtex;
//modifiedpointsstructptex*rtex;//rotatedpointsstructptex*ctex;//clippedpointsstructptex*ttex;//2dPointsinttex;//textureinformationstructpfilmfilm;structpfilmbackfilm;intstx;}pworld;structtex{intb[30]
;char*text[30][40];}tex;structpworldworld;structpworldlworld[39];FILE*fi;inti,i1,i4;charvs[201][320];intzbuffer[201][320];chars[20];floatsintbl[36001],costbl[36001];chartexts[130][8320];charpalette[10
24];intaspect,bi,start;intclock;voidclearvs(charb){memset(vs+1,b,64000);}structplist{intbblock,eblock;floatx,y,z,ax,ay,az,x0,y0,z0;}plist;structpblock{intblocks;structplist*list;}pblock;structpblockbl
ock,ublock;externvoidsetbk(shortc);#pragmaauxsetbk=\"movax,1001h"\"int10h"\parmcaller[bx]\modify[];voidsetaspect(inti){aspect=i;}voidshowvs(void){memmove(0xA0000,vs+1,64000);}InitMemory(){block.list=(
structplist*)malloc(sizeof(structplist)*40);}voidInitGrafix(){bi=18;for(i=0;i<=36000;i++){sintbl[i]=sin((float)i/100/2*3.142/90);costbl[i]=cos((float)i/100/2*3.142/90);}_setvideomode(0x13);}intgetnumb
er(FILE*f){charch;intnum=0,sign=1;if((ch=nextchar(f))=='-'){sign=-1;ch=nextchar(f);}while(isdigit(ch)){num=num*10+ch-'0';ch=nextchar(f);}return(num*sign);}intnextchar(FILE*f){charch;while(!feof(f)){wh
ile(isspace(ch=fgetc(f)));if(ch=='#')while((ch=fgetc(f))!='\n');elsereturn(ch);}return(0);}voidsetpalette(inti1){if(i1<0)i1=0;if(i1>100)i1=100;for(i=0;i<256;i++){outp(0x3c8,i);outp(0x3c9,(int)((float)
(palette[i*4+2]>>2)*i1/100));outp(0x3c9,(int)((float)(palette[i*4+1]>>2)*i1/100));outp(0x3c9,(int)((float)(palette[i*4]>>2)*i1/100));}}voidLoadTexts(inti){inti1;for(i1=1;i1<=i;i1++){sprintf(s,"data/te
xt%d.raw",i1);fi=fopen(s,"rb");if(fi==NULL){_setvideomode(3);printf("0:I/OError.Installprogramagain.\n");ende(1);}else{fseek(fi,997,SEEK_SET);fgets(texts[i1-1],8192,fi);}fclose(fi);}}PaintTexts(intx,i
nty,intn){inti;for(i=0;i<64;i++)memmove(vs[i+y]+x,texts[n]+(i)*128,128);}voidLoadWorld(intsc){inti2,i3,stx;clock=0;block.blocks=0;//Loadworldcoordinatesandfilmssprintf(s,"data/scene%d.wrl",sc+1);fi=fo
pen(s,"rb");if(fi==NULL){_setvideomode(3);printf("1:I/OError.Installprogramagain.\n");ende(1);}//Initcameraworld.texs=getnumber(fi);stx=getnumber(fi);world.film.fx=getnumber(fi);world.film.fy=getnumbe
r(fi);world.film.fz=getnumber(fi);world.film.fax=getnumber(fi);world.film.fay=getnumber(fi);world.film.faz=getnumber(fi);//Initpointersworld.polys=getnumber(fi);world.otex=(structptex*)malloc(sizeof(s
tructptex)*world.polys);world.mtex=(structptex*)malloc(sizeof(structptex)*world.polys);world.rtex=(structptex*)malloc(sizeof(structptex)*world.polys);world.ctex=(structptex*)malloc(sizeof(structptex)*
world.polys);world.ttex=(structptex*)malloc(sizeof(structptex)*world.polys);//Initpointsfor(i=0;i<world.polys;i++){world.otex[i].ps=getnumber(fi);world.otex[i].tex=getnumber(fi);for(i1=0;i1<world.otex
[i].ps;i1++){world.otex[i].p[i1][0]=getnumber(fi);world.otex[i].p[i1][1]=getnumber(fi);world.otex[i].p[i1][2]=getnumber(fi);}}//initfilmworld.film.moves=getnumber(fi);for(i=0;iorld.film.moves;i++){w
orld.film.move[i].start=getnumber(fi);world.film.move[i].stop=getnumber(fi);world.film.move[i].typ=getnumber(fi);world.film.move[i].x=0;world.film.move[i].y=0;world.film.move[i].z=0;world.film.move[i]
.ax=0;world.film.move[i].ay=0;world.film.move[i].az=0;for(i2=0;i2<12;i2++){world.film.move[i].para[i2]=getnumber(fi);}}fclose(fi);world.stx=stx;if(tex.b[stx]!=1){for(i=0;i<world.texs;i++)tex.text[stx]
[i]=(char*)malloc(16512);tex.b[stx-1]=1;sprintf(s,"data/tex%d1.raw",stx);fi=fopen(s,"rb");if(fi==NULL){_setvideomode(3);printf("2:I/OError.Installprogramagain.\n");ende(1);}else{fseek(fi,54,SEEK_SET);
fgets(palette,1024,fi);fseek(fi,1125,SEEK_SET);fgets(tex.text[stx][0],16512,fi);}fclose(fi);for(i3=2;i3<=world.texs;i3++){sprintf(s,"data/tex%d%d.raw",stx,i3);fi=fopen(s,"rb");if(fi==NULL){_setvideomo
de(3);printf("3:I/OError.Installprogramagain.\n");ende(1);}else{fseek(fi,1125,SEEK_SET);fgets(tex.text[stx][i3-1],16512,fi);}fclose(fi);}}world.backfilm=world.film;lworld[sc]=world;}InitWorld(structpw
orld*wrl){//copyoriginpointstomodifierpufferfor(i=0;i<wrl->polys;i++)for(i1=0;i1rl->otex[i].ps;i1++){wrl->mtex[i].ps=wrl->otex[i].ps;wrl->mtex[i].tex=wrl->otex[i].tex;wrl->mtex[i].p[i1][0]=wrl->otex
[i].p[i1][0];wrl->mtex[i].p[i1][1]=wrl->otex[i].p[i1][1];wrl->mtex[i].p[i1][2]=wrl->otex[i].p[i1][2];}}MoveWorld(structpworld*wrl){//moveoriginpointsfor(i=0;irl->polys;i++)for(i1=0;i1<wrl->mtex[i].p
s;i1++){wrl->mtex[i].p[i1][0]+=-wrl->x;wrl->mtex[i].p[i1][1]+=-wrl->y;wrl->mtex[i].p[i1][2]+=-wrl->z;}}voidMorfObj(intax,intay,intaz,intx,inty,intz,intmx,intmy,intmz,intobj,structpworld*wrl){//Morfobj
ectsfloattemp;for(i1=0;i1<wrl->mtex[obj].ps;i1++){wrl->mtex[obj].p[i1][0]+=-mx+wrl->x;wrl->mtex[obj].p[i1][1]+=-my+wrl->y;wrl->mtex[obj].p[i1][2]+=-mz+wrl->z;temp=wrl->mtex[obj].p[i1][1];wrl->mtex[obj
].p[i1][1]=temp*costbl[ax]-wrl->mtex[obj].p[i1][2]*sintbl[ax];wrl->mtex[obj].p[i1][2]=temp*sintbl[ax]+wrl->mtex[obj].p[i1][2]*costbl[ax];temp=wrl->mtex[obj].p[i1][0];wrl->mtex[obj].p[i1][0]=temp*costb
l[ay]+wrl->mtex[obj].p[i1][2]*sintbl[ay];wrl->mtex[obj].p[i1][2]=-temp*sintbl[ay]+wrl->mtex[obj].p[i1][2]*costbl[ay];temp=wrl->mtex[obj].p[i1][0];wrl->mtex[obj].p[i1][0]=temp*costbl[az]-wrl->mtex[obj]
.p[i1][1]*sintbl[az];wrl->mtex[obj].p[i1][1]=temp*sintbl[az]+wrl->mtex[obj].p[i1][1]*costbl[az];wrl->mtex[obj].p[i1][0]+=mx-wrl->x;wrl->mtex[obj].p[i1][1]+=my-wrl->y;wrl->mtex[obj].p[i1][2]+=mz-wrl->z
;wrl->mtex[obj].p[i1][0]+=x;wrl->mtex[obj].p[i1][1]+=y;wrl->mtex[obj].p[i1][2]+=z;}}voidWriteBackObj(shortobj,structpworld*wrl){for(i1=0;i1<wrl->otex[obj].ps;i1++){wrl->otex[obj].p[i1][0]=wrl->mtex[ob
j].p[i1][0]+wrl->x;wrl->otex[obj].p[i1][1]=wrl->mtex[obj].p[i1][1]+wrl->y;wrl->otex[obj].p[i1][2]=wrl->mtex[obj].p[i1][2]+wrl->z;}}voidRotateWorld(structpworld*wrl){floattemp;for(i=0;irl->polys;i++)
{for(i1=0;i1rl->mtex[i].ps;i1++){wrl->rtex[i].ps=wrl->mtex[i].ps;wrl->rtex[i].tex=wrl->mtex[i].tex;wrl->rtex[i].p[i1][0]=wrl->mtex[i].p[i1][0];wrl->rtex[i].p[i1][1]=wrl->mtex[i].p[i1][1]*costbl[wrl-
>ax]-wrl->mtex[i].p[i1][2]*sintbl[wrl->ax];wrl->rtex[i].p[i1][2]=wrl->mtex[i].p[i1][1]*sintbl[wrl->ax]+wrl->mtex[i].p[i1][2]*costbl[wrl->ax];temp=wrl->rtex[i].p[i1][0];wrl->rtex[i].p[i1][0]=temp*costb
l[wrl->ay]+wrl->rtex[i].p[i1][2]*sintbl[wrl->ay];wrl->rtex[i].p[i1][2]=-temp*sintbl[wrl->ay]+wrl->rtex[i].p[i1][2]*costbl[wrl->ay];temp=wrl->rtex[i].p[i1][0];wrl->rtex[i].p[i1][0]=temp*costbl[wrl->az]
-wrl->rtex[i].p[i1][1]*sintbl[wrl->az];wrl->rtex[i].p[i1][1]=temp*sintbl[wrl->az]+wrl->rtex[i].p[i1][1]*costbl[wrl->az];}}}voidClipWorld(structpworld*wrl){intmatrix[3];floatt;intc,i,i1;//dummyfor(i=0;
i<wrl->polys;i++){c=0;wrl->rtex[i].p[wrl->rtex[i].ps][0]=wrl->rtex[i].p[0][0];wrl->rtex[i].p[wrl->rtex[i].ps][1]=wrl->rtex[i].p[0][1];wrl->rtex[i].p[wrl->rtex[i].ps][2]=wrl->rtex[i].p[0][2];for(i1=0;i
1<wrl->rtex[i].ps;i1++){//++pointif(wrl->rtex[i].p[i1][2]>=0)if(wrl->rtex[i].p[i1+1][2]>=0){wrl->ctex[i].p[c][0]=wrl->rtex[i].p[i1+1][0];wrl->ctex[i].p[c][1]=wrl->rtex[i].p[i1+1][1];wrl->ctex[i].p[c][
2]=wrl->rtex[i].p[i1+1][2];c++;}//+-pointif(wrl->rtex[i].p[i1][2]>0)if(wrl->rtex[i].p[i1+1][2]<=0){matrix[0]=-wrl->rtex[i].p[i1][0]+wrl->rtex[i].p[i1+1][0];matrix[1]=-wrl->rtex[i].p[i1][1]+wrl->rtex[i
].p[i1+1][1];matrix[2]=-wrl->rtex[i].p[i1][2]+wrl->rtex[i].p[i1+1][2];t=-(float)wrl->rtex[i].p[i1][2]/matrix[2];wrl->ctex[i].p[c][0]=wrl->rtex[i].p[i1][0]+t*matrix[0];wrl->ctex[i].p[c][1]=wrl->rtex[i]
.p[i1][1]+t*matrix[1];wrl->ctex[i].p[c][2]=0;c++;}//-+pointif(wrl->rtex[i].p[i1][2]<0)if(wrl->rtex[i].p[i1+1][2]>=0){matrix[0]=-wrl->rtex[i].p[i1][0]+wrl->rtex[i].p[i1+1][0];matrix[1]=-wrl->rtex[i].p[
i1][1]+wrl->rtex[i].p[i1+1][1];matrix[2]=-wrl->rtex[i].p[i1][2]+wrl->rtex[i].p[i1+1][2];t=-(float)wrl->rtex[i].p[i1][2]/matrix[2];wrl->ctex[i].p[c][0]=wrl->rtex[i].p[i1][0]+t*matrix[0];wrl->ctex[i].p[
c][1]=wrl->rtex[i].p[i1][1]+t*matrix[1];wrl->ctex[i].p[c][2]=0;wrl->ctex[i].p[c+1][0]=wrl->rtex[i].p[i1+1][0];wrl->ctex[i].p[c+1][1]=wrl->rtex[i].p[i1+1][1];wrl->ctex[i].p[c+1][2]=wrl->rtex[i].p[i1+1]
[2];c++;c++;}}wrl->ctex[i].ps=c;wrl->ctex[i].tex=wrl->rtex[i].tex;}}voidProjectWorld(structpworld*wrl){inti,i1;for(i=0;irl->polys;i++){wrl->ttex[i].ps=wrl->ctex[i].ps;wrl->ttex[i].tex=wrl->ctex[i].t
ex;for(i1=0;i1rl->ctex[i].ps;i1++){wrl->ttex[i].p[i1][0]=wrl->ctex[i].p[i1][0]*aspect/(wrl->ctex[i].p[i1][2]+aspect);wrl->ttex[i].p[i1][1]=wrl->ctex[i].p[i1][1]*aspect/(wrl->ctex[i].p[i1][2]+aspect)
;wrl->ttex[i].p[i1][2]=wrl->ctex[i].p[i1][2];}}}voidPaintWorld(structpworld*wrl){intx[6],y[6],z[6],i,i1,i2,texture;intlz,dz,diz1,diz2,diz3,diz4,diz5,zc,mnz,mxz,xc,mny,mxy,mnx,mxx,yc,mul1,div1,mul2,div
2,mul3,div3,mul4,div4,mul5,div5,a,b,c,ha,hb,hc,va,vb,vc,oc,oa,ob;shortp;floatp1[3];floatm1[3];floatn1[3];for(i1=0;i1rl->polys;i1++){texture=wrl->ttex[i1].tex;if(wrl->ttex[i1].ps<3)gotoende;for(i2=1;
i2<=wrl->ttex[i1].ps;i2++){x[i2]=wrl->ttex[i1].p[i2-1][0];y[i2]=wrl->ttex[i1].p[i2-1][1];z[i2]=wrl->ttex[i1].p[i2-1][2];}if(wrl->ttex[i1].ps<4){x[4]=wrl->ttex[i1].p[2][0];y[4]=wrl->ttex[i1].p[2][1];z[
4]=wrl->ttex[i1].p[2][2];}if(wrl->ttex[i1].ps<5){x[5]=x[4];y[5]=y[4];z[5]=z[4];}p1[0]=wrl->rtex[i1].p[0][0]*aspect;p1[1]=wrl->rtex[i1].p[0][2]+aspect;p1[2]=wrl->rtex[i1].p[0][1]*aspect;m1[0]=wrl->rtex
[i1].p[1][0]*aspect-p1[0];m1[1]=wrl->rtex[i1].p[1][2]+aspect-p1[1];m1[2]=wrl->rtex[i1].p[1][1]*aspect-p1[2];n1[0]=wrl->rtex[i1].p[3][0]*aspect-p1[0];n1[1]=wrl->rtex[i1].p[3][2]+aspect-p1[1];n1[2]=wrl-
>rtex[i1].p[3][1]*aspect-p1[2];oa=(n1[0]*p1[2]-n1[2]*p1[0])/10;ha=(n1[2]*p1[1]-n1[1]*p1[2])/10;va=(n1[1]*p1[0]-n1[0]*p1[1])/10;ob=(m1[0]*p1[2]-m1[2]*p1[0])/10;hb=(m1[2]*p1[1]-m1[1]*p1[2])/10;vb=(m1[1]
*p1[0]-m1[0]*p1[1])/10;oc=(m1[2]*n1[0]-m1[0]*n1[2])/1280;hc=(m1[1]*n1[2]-m1[2]*n1[1])/1280;vc=(m1[0]*n1[1]-m1[1]*n1[0])/1280;mny=y[1];mxy=y[1];if(y[2]ny){mny=y[2];}if(y[2]>mxy){mxy=y[2];}if(y[3]ny
){mny=y[3];}if(y[3]>mxy){mxy=y[3];}if(y[4]ny){mny=y[4];}if(y[4]>mxy){mxy=y[4];}if(y[5]ny){mny=y[5];}if(y[5]>mxy){mxy=y[5];}if(mny<-100)mny=-100;if(mxy>100)mxy=100;if(mny>100)gotoende;if(mxy<-100)g
otoende;mul1=x[1]-x[5];div1=y[1]-y[5];diz1=z[1]-z[5];if(diz1==0)diz1=1;mul2=x[2]-x[1];div2=y[2]-y[1];diz2=z[2]-z[1];if(diz2==0)diz2=1;mul3=x[3]-x[2];div3=y[3]-y[2];diz3=z[3]-z[2];if(diz3==0)diz3=1;mul
4=x[4]-x[3];div4=y[4]-y[3];diz4=z[4]-z[3];if(diz4==0)diz4=1;mul5=x[5]-x[4];div5=y[5]-y[4];diz5=z[5]-z[4];if(diz5==0)diz5=1;for(yc=mny;yc<=mxy;yc++){mnx=160;mxx=-169;if((y[5]>=yc)|(y[1]>=yc))if((y[5]<=
yc)|(y[1]<=yc)){if(y[5]!=y[1]){xc=(yc-y[5])*mul1/div1+x[5];zc=(yc-y[5])*diz1/div1+z[5];if(xcnx){mnx=xc;mnz=zc;}if(xc>mxx){mxx=xc;mxz=zc;}}}if((y[1]>=yc)|(y[2]>=yc))if((y[1]<=yc)|(y[2]<=yc)){if(y[1]!
=y[2]){xc=(yc-y[1])*mul2/div2+x[1];zc=(yc-y[1])*diz2/div2+z[1];if(xcnx){mnx=xc;mnz=zc;}if(xc>mxx){mxx=xc;mxz=zc;}}}if((y[2]>=yc)|(y[3]>=yc))if((y[2]<=yc)|(y[3]<=yc)){if(y[2]!=y[3]){xc=(yc-y[2])*mul3
/div3+x[2];zc=(yc-y[2])*diz3/div3+z[2];if(xcnx){mnx=xc;mnz=zc;}if(xc>mxx){mxx=xc;mxz=zc;}}}if((y[3]>=yc)|(y[4]>=yc))if((y[3]<=yc)|(y[4]<=yc)){if(y[3]!=y[4]){xc=(yc-y[3])*mul4/div4+x[3];zc=(yc-y[3])*
diz4/div4+z[3];if(xcnx){mnx=xc;mnz=zc;}if(xc>mxx){mxx=xc;mxz=zc;}}}if((y[4]>=yc)|(y[5]>=yc))if((y[4]<=yc)|(y[5]<=yc)){if(y[4]!=y[5]){xc=(yc-y[4])*mul5/div5+x[4];zc=(yc-y[4])*diz5/div5+z[4];if(xcnx
){mnx=xc;mnz=zc;}if(xc>mxx){mxx=xc;mxz=zc;}}}if(mnx<-160){mnx=-160;}if(mxx>159){mxx=159;}if(mnx<=mxx){a=(oa+va*yc+mnx*ha);b=(ob+vb*yc+mnx*hb);c=(oc+vc*yc+mnx*hc);if(mxx!=mnx)dz=((mxz-mnz)<<6)/((mxx-mn
x));yc=yc+100;mxx=mxx+160;mnx=mnx+160;lz=mnz<<6;for(i=mnx;i<=mxx;i++){lz=lz+dz;if(c!=0){if((lz>>6)buffer[yc][i]){p=tex.text[wrl->stx][texture][((a/c)&127)+(((b/c)&127)<<7)];if(p>0){zbuffer[yc][i]=lz
>>6;vs[yc][i]=p;}}}a+=ha;b+=hb;c+=hc;}mnx=mnx-160;mxx=mxx-160;yc=yc-100;}}ende:;}}voidmove_world(){inti1,i,lists;//definitlyprivateclock++;block.blocks=0;if(start==1){for(i=0;iworld[bi].film.moves;i
++){if((lworld[bi].film.move[i].start<=clock)&(lworld[bi].film.move[i].stop>=clock)){if(lworld[bi].film.move[i].typ==0){lworld[bi].film.fx-=(float)lworld[bi].film.move[i].para[0]/2000;lworld[bi].film.
fy-=(float)lworld[bi].film.move[i].para[1]/2000;lworld[bi].film.fz-=(float)lworld[bi].film.move[i].para[2]/2000;lworld[bi].film.fax+=(float)lworld[bi].film.move[i].para[3]/200;lworld[bi].film.fay+=(fl
oat)lworld[bi].film.move[i].para[4]/200;lworld[bi].film.faz+=(float)lworld[bi].film.move[i].para[5]/200;if(lworld[bi].film.fax>36000)lworld[bi].film.fax=0;if(lworld[bi].film.fax<0)lworld[bi].film.fax=
36000;if(lworld[bi].film.fay>36000)lworld[bi].film.fay=0;if(lworld[bi].film.fay<0)lworld[bi].film.fay=36000;if(lworld[bi].film.faz>36000)lworld[bi].film.faz=0;if(lworld[bi].film.faz<0)lworld[bi].film.
faz=36000;}if(lworld[bi].film.move[i].typ==1|lworld[bi].film.move[i].typ==3){block.blocks++;block.list[block.blocks-1].bblock=lworld[bi].film.move[i].para[9];block.list[block.blocks-1].eblock=lworld[b
i].film.move[i].para[10];if(lworld[bi].film.move[i].typ==1){block.list[block.blocks-1].x=lworld[bi].film.move[i].para[0];block.list[block.blocks-1].y=lworld[bi].film.move[i].para[1];block.list[block.b
locks-1].z=lworld[bi].film.move[i].para[2];block.list[block.blocks-1].ax=lworld[bi].film.move[i].para[3];block.list[block.blocks-1].ay=lworld[bi].film.move[i].para[4];block.list[block.blocks-1].az=lwo
rld[bi].film.move[i].para[5];}if(lworld[bi].film.move[i].typ==3){if(lworld[bi].film.move[i].start==clock)if(lworld[bi].film.move[i].para[11]>-1){lworld[bi].film.move[i].x=lworld[bi].film.move[lworld[b
i].film.move[i].para[11]].x;lworld[bi].film.move[i].y=lworld[bi].film.move[lworld[bi].film.move[i].para[11]].y;lworld[bi].film.move[i].z=lworld[bi].film.move[lworld[bi].film.move[i].para[11]].z;lworld
[bi].film.move[i].ax=lworld[bi].film.move[lworld[bi].film.move[i].para[11]].ax;lworld[bi].film.move[i].ay=lworld[bi].film.move[lworld[bi].film.move[i].para[11]].ay;lworld[bi].film.move[i].az=lworld[bi
].film.move[lworld[bi].film.move[i].para[11]].az;}lworld[bi].film.move[i].x+=lworld[bi].film.move[i].para[2];lworld[bi].film.move[i].y+=lworld[bi].film.move[i].para[1];lworld[bi].film.move[i].z+=lworl
d[bi].film.move[i].para[0];lworld[bi].film.move[i].ax+=lworld[bi].film.move[i].para[3];lworld[bi].film.move[i].ay+=lworld[bi].film.move[i].para[4];lworld[bi].film.move[i].az+=lworld[bi].film.move[i].p
ara[5];block.list[block.blocks-1].x=(float)lworld[bi].film.move[i].x/2000;block.list[block.blocks-1].y=(float)lworld[bi].film.move[i].y/2000;block.list[block.blocks-1].z=(float)lworld[bi].film.move[i]
.z/2000;block.list[block.blocks-1].ax=(float)lworld[bi].film.move[i].ax/20;block.list[block.blocks-1].ay=(float)lworld[bi].film.move[i].ay/20;block.list[block.blocks-1].az=(float)lworld[bi].film.move[
i].az/20;if(lworld[bi].film.move[i].ax/20>36000)lworld[bi].film.move[i].ax=0;if(lworld[bi].film.move[i].ay/20>36000)lworld[bi].film.move[i].ay=0;if(lworld[bi].film.move[i].az/20>36000)lworld[bi].film.
move[i].az=0;if(lworld[bi].film.move[i].ax<0)lworld[bi].film.move[i].ax=36000*20;if(lworld[bi].film.move[i].ay<0)lworld[bi].film.move[i].ay=36000*20;if(lworld[bi].film.move[i].az<0)lworld[bi].film.mov
e[i].az=36000*20;}block.list[block.blocks-1].x0=(float)lworld[bi].film.move[i].para[6];block.list[block.blocks-1].y0=(float)lworld[bi].film.move[i].para[7];block.list[block.blocks-1].z0=(float)lworld[
bi].film.move[i].para[8];}if(lworld[bi].film.move[i].typ==2){if(clock%(int)lworld[bi].film.move[i].para[2]==0){lworld[bi].otex[(int)lworld[bi].film.move[i].para[9]].tex++;if(lworld[bi].otex[(int)lworl
d[bi].film.move[i].para[9]].tex>(int)lworld[bi].film.move[i].para[1])lworld[bi].otex[(int)lworld[bi].film.move[i].para[9]].tex=(int)lworld[bi].film.move[i].para[0];}}}}}}intDrawWorld(){inti5,i3,i4,i2;
clearvs(0);InitWorld(&lworld[bi]);for(i2=0;i2<201;i2++)for(i1=0;i1<321;i1++)zbuffer[i2][i1]=3200000;lworld[bi].ax=lworld[bi].film.fax;lworld[bi].ay=lworld[bi].film.fay;lworld[bi].az=lworld[bi].film.fa
z;lworld[bi].x=lworld[bi].film.fx;lworld[bi].y=lworld[bi].film.fy;lworld[bi].z=lworld[bi].film.fz;MoveWorld(&lworld[bi]);ublock=block;for(i3=0;i3<ublock.blocks;i3++)for(i4=ublock.list[i3].bblock;i4<=u
block.list[i3].eblock;i4++){MorfObj(ublock.list[i3].ax,ublock.list[i3].ay,ublock.list[i3].az,ublock.list[i3].x,ublock.list[i3].y,ublock.list[i3].z,ublock.list[i3].x0,ublock.list[i3].y0,ublock.list[i3]
.z0,i4,&lworld[bi]);}RotateWorld(&lworld[bi]);ClipWorld(&lworld[bi]);ProjectWorld(&lworld[bi]);PaintWorld(&lworld[bi]);return(clock);}voidDirectModifier(intsc){if(sc==0){lworld[bi].otex[0].tex=14;}}vo
idstarttimer(intit){bi=it;lworld[bi].film=lworld[bi].backfilm;start=1;clock=0;setbk(0);}