int findobject_co; object *findobject(char *t,int frame) { int i,l=strlen(t); int found1=-1; for(i=1;i=-127 && l<=127) return(1); if(l>=-32767 && l<=32767) return(2); return(3); } void putl(long l,FILE *f) { putw(l&0xffff,f); putw(l>>16,f); } void lwrite(int f,long l) { switch(f&3) { case 0 : break; case 1 : putc(l,outb); break; case 2 : putw(l,outb); break; case 3 : putl(l,outb); break; } } void readvue(void) { static int lastobject_co=0; int a,ix,iy,visfield; int frame; long x,y,z,x2,y2,z2,ll; float f,fx,fy,fz; rmatrix tmpm; rmatrix tmpm2; char *p,*p0,*t; object *o; print("\n"); print(">>>>>>>>>>>>>>>> VUE file <<<<<<<<<<<<<<<<\n"); print("\n"); while(!feof(in)) { p0=p=getline(); if(emptyline(p)) continue; // process line t=gettoken(&p); IFT("frame") { t=gettoken(&p); frame=a=atoi(t); if(!drawpass) { // init stuff for script lastobject_co=0; } print("FRAME %i\n",a); if(kbhit()) break; } else IFT("transform") { t=gettoken(&p); print("TRANSFORM %s",t); o=findobject(t,frame); o->r0->m[0]=(long)(UNIT*getfloat(&p)); o->r0->m[3]=(long)(UNIT*getfloat(&p)); o->r0->m[6]=(long)(UNIT*getfloat(&p)); o->r0->m[1]=(long)(UNIT*getfloat(&p)); o->r0->m[4]=(long)(UNIT*getfloat(&p)); o->r0->m[7]=(long)(UNIT*getfloat(&p)); o->r0->m[2]=(long)(UNIT*getfloat(&p)); o->r0->m[5]=(long)(UNIT*getfloat(&p)); o->r0->m[8]=(long)(UNIT*getfloat(&p)); getxyz(&p,&x,&y,&z); o->r0->x=x; o->r0->y=y; o->r0->z=z; print(" (xyz: %li %li %li)\n",x,y,z); o->flags&=~(F_GOURAUD); } else IFT("camera") { getxyz(&p,&x2,&y2,&z2); print("CAMERA (%li,%li,%li)->",x2,y2,z2); getxyz(&p,&x,&y,&z); print("(%li,%li,%li) ",x,y,z); f=getfloat(&p); // roll print("Roll:%f ",f); a=(angle)f*65536L/360L; calc_setrmatrix_camera(&camera,x2,y2,z2,x,y,z,a); f=getfloat(&p); // field of vision f=(float)usefov; print("FOV:%f \n",f); f=f*65536.0/360.0; visfield=(angle)f; visfield&=0xff00; vid_cameraangle(visfield); vDraw(); if(!drawpass) { int coi,coilast=0; unsigned int u; struct s_cobject *cop; object *o; for(coi=1;coio; fprintf(fdeb,"%s:%i\n",cop->name,cop->on); if(!cop->on) { // object hidden if(cop->last_on) { flag=0x40; cop->last_on=0; } } else { // visible if(!cop->last_on) { flag=0x80; cop->last_on=1; } l=o->r0->z - cop->last_z; a=lsize(l); wz=l; pflag<<=2; pflag|=a; l=o->r0->y - cop->last_y; a=lsize(l); wy=l; pflag<<=2; pflag|=a; l=o->r0->x - cop->last_x; a=lsize(l); wx=l; pflag<<=2; pflag|=a; mbytes=1; print("[pfl:%06lX]",pflag); for(a=0;a<9;a++) { b=o->r0->m[a] - cop->last_m[a]; if(b<-127 || b>127) mbytes=0; if(b) pflag|=0x80L<>4),outb); putc((coi&0x0f)|flag,outb); } else { putc((coi&0x0f)|flag,outb); } coilast=coi; if(pflaglen) { l=pflag; while(pflaglen--) { putc(l,outb); l>>=8; } print("[pfl:%06lX wxyz:%li,%li,%li]\n",pflag,wx,wy,wz); lwrite(pflag,wx); lwrite(pflag>>2,wy); lwrite(pflag>>4,wz); for(a=0;a<9;a++) if(pflag&(0x80<r0->m[a] - cop->last_m[a]; if(mbytes) putc(b,outb); else putw(b,outb); } } for(a=0;a<9;a++) cop->last_m[a]=o->r0->m[a]; cop->last_x=o->r0->x; cop->last_y=o->r0->y; cop->last_z=o->r0->z; } } putc(0xff,outb); putc(visfield>>8,outb); } } else print("Unknown: %s\n",t); if(debug) print(" (%s)\n",p0); } putc(0xff,outb); putc(0xff,outb); }