Index: file.c
===================================================================
--- file.c	(revision 80)
+++ file.c	(revision 81)
@@ -236,7 +236,7 @@
 void read_vertex_from(char *filename)
 {
 GLfloat x,y,z,nx,ny,nz,u,v;
-int i;
+int i,ii;
 GLuint save;
 GLint visu;
 FILE *fp;
@@ -263,10 +263,18 @@
     
     raydium_object_anims[raydium_object_index]=j;
     raydium_object_anim_len[raydium_object_index]=k;
-    raydium_object_anim_current[raydium_object_index]=0;
-    raydium_object_anim_frame_current[raydium_object_index]=0;
+    raydium_object_anim_instance_current[raydium_object_index]=0;
 
+    for(ii=0;ii<RAYDIUM_MAX_OBJECT_ANIM_INSTANCES;ii++)
+	{
+	raydium_object_anim_current[raydium_object_index][ii]=0;
+	raydium_object_anim_frame_current[raydium_object_index][ii]=0;
+	raydium_object_anim_previous[raydium_object_index][ii]=-1;
+	raydium_object_anim_frame_previous[raydium_object_index][ii]=0;
+	raydium_object_anim_frame_previous_timeout[raydium_object_index][ii]=0;
+	}
 
+
     for(i=0;i<raydium_object_anims[raydium_object_index];i++)
 	{
 	fscanf(fp,"%i %i %s\n",&j,&k,name);
@@ -277,7 +285,10 @@
 
     // build "current transformed model" space
     for(i=0;i<raydium_object_anim_len[raydium_object_index];i++)
+	{
 	raydium_vertex_add(0,0,0);
+	raydium_vertex_texture[raydium_vertex_index-1]=0;
+	}
 
     fscanf(fp,"%i\n",&visu);
     raydium_log("object: anim: %i frame(s) with %i vertice per frame (ver %i)",raydium_object_anims[raydium_object_index],raydium_object_anim_len[raydium_object_index],visu);
p(&buffer[buflen-len], raydium_web_extensions[i].ext, len))
@@ -142,7 +142,7 @@
                 raydium_web_answer("error: Handler denied this request",fd);
                 return;
                 }
-            
+
             // if there's no filetype, use web_answer
             if(!strlen(fstr))
                 raydium_web_answer(answer,fd);
@@ -197,7 +197,7 @@
     }
 
 raydium_log("web: starting Raydium HTTP server on port %i",RAYDIUM_NETWORK_PORT);
-        
+
 if((raydium_web_listenfd = socket(AF_INET, SOCK_STREAM,0)) <0)
     {
     raydium_log("web: error: socket failed");
@@ -367,7 +367,7 @@
 struct sockaddr_in serv_addr;
 struct hostent *hst;
 int chunk;
-FILE *fp;
+FILE *fp=NULL;
 
 if(raydium_network_mode!=RAYDIUM_NETWORK_MODE_CLIENT)
     {
@@ -392,7 +392,7 @@
     return 0;
     }
 
-sprintf(req,"GET /%s \r\n",filename);                   
+sprintf(req,"GET /%s \r\n",filename);
 send(sockfd,req,strlen(req),0);
 
 chunk=0;
@@ -423,14 +423,14 @@
             return 0;
             }
 
-        // ok, now search for \r\n\r\n  
+        // ok, now search for \r\n\r\n
         for(x=12;x<i;x++)
-            if(buffer[x-3]=='\r' && 
-               buffer[x-2]=='\n' && 
-               buffer[x-1]=='\r' && 
+            if(buffer[x-3]=='\r' &&
+               buffer[x-2]=='\n' &&
+               buffer[x-1]=='\r' &&
                buffer[x-0]=='\n')
                 break;
-        
+
         if(x==i)
             {
             raydium_log("web: client: error: cannot found header end");
@@ -438,23 +438,23 @@
             return 0;
             }
         // found, adjust offset 1 byte after
-        x++;    
+        x++;
         data+=x;
         i-=x;
-        
+
         fp=fopen(RAYDIUM_WEB_CLIENT_TEMP,"wb");
         if(!fp)
             {
             raydium_log("web: client: error: cannot create temporary file");
             raydium_network_socket_close(sockfd);
             return 0;
-            }   
+            }
         }
 
     fwrite(data,i,1,fp);
     chunk++;
     }
-                        
+
 fclose(fp);
 raydium_network_socket_close(sockfd);
 
@@ -463,7 +463,7 @@
 // compare files and rename if not the same
 if(raydium_file_sum_simple_mode(complete,"rbl")!=
    raydium_file_sum_simple_mode(RAYDIUM_WEB_CLIENT_TEMP,"rbl"))
-    {    
+    {
     unlink(complete);
     if(rename(RAYDIUM_WEB_CLIENT_TEMP,complete)==-1)
         {