Index: network.h
===================================================================
--- network.h	(revision 243)
+++ network.h	(revision 244)
@@ -428,6 +428,41 @@
 Then, you can access to this server list using [undocumented yet].
 **/
 
+int raydium_network_discover_numservers(void);
+/**
+While the client is in ##RAYDIUM_NETWORK_MODE_DISCOVER## mode, you
+can fetch all "detected" servers in the LAN.
+This function will return :
+ - -1 : "not in discovery mode". See ##raydium_network_client_discover()##.
+ - 0 : no server detected (yet ... try during next frame)
+ - more : total number of compatible servers (same game/application 
+ and protocol version)
+**/
+
+signed char raydium_network_discover_getserver(int num, char *name, char *ip);
+/**
+Use this function with the help of ##raydium_network_discover_numservers()##, 
+with something like :
+%%(c)
+int i;
+char name[RAYDIUM_MAX_NAME_LEN];
+char ip[RAYDIUM_MAX_NAME_LEN];
+...
+for(i=0;i<raydium_network_discover_numservers();i++)
+    {
+    raydium_network_discover_getserver(i,name,ip);
+    raydium_log("server %02i: %s (%s)",i,name,ip);
+    }
+
+No memory allocation is done for ##name## and ##ip##. It's your job.
+
+This function will return :
+ - -1 : "not in discovery mode". See ##raydium_network_client_discover()##.
+ - 0 : invalid ##num##.
+ - 1 : OK.
+%%
+**/
+
 extern void raydium_network_client_disconnect(void);
 /**
 This function will disconnect client from server, if connected.
check(void)
{
return raydium_sky_enabled;
}

void raydium_sky_box_cache(void)
{
switch(raydium_sky_texture_skybox_type)
    {
    case RAYDIUM_SKYBOX_TYPE_2D:
        raydium_texture_current_set_name(raydium_sky_texture_skybox_front);
        raydium_texture_current_set_name(raydium_sky_texture_skybox_back);
        raydium_texture_current_set_name(raydium_sky_texture_skybox_left);
        raydium_texture_current_set_name(raydium_sky_texture_skybox_right);
        raydium_texture_current_set_name(raydium_sky_texture_skybox_bottom);
        raydium_texture_current_set_name(raydium_sky_texture_skybox_top);

        raydium_hdr_texture_name(raydium_sky_texture_skybox_front,1);
        raydium_hdr_texture_name(raydium_sky_texture_skybox_back,1);
        raydium_hdr_texture_name(raydium_sky_texture_skybox_left,1);
        raydium_hdr_texture_name(raydium_sky_texture_skybox_right,1);
        raydium_hdr_texture_name(raydium_sky_texture_skybox_bottom,1);
        raydium_hdr_texture_name(raydium_sky_texture_skybox_top,1);
        break;
    case RAYDIUM_SKYBOX_TYPE_CUBEMAP:
        raydium_texture_current_set_name(raydium_sky_texture_skybox_front);
        raydium_hdr_texture_name(raydium_sky_texture_skybox_front,1);
        break;
    }
}


void raydium_sky_box_render_cubemap(GLfloat x, GLfloat y, GLfloat z)
{
GLfloat t;

t=((raydium_projection_far-raydium_projection_near)/2.f);
//~ t=1;
t=5;

glDisable(GL_LIGHTING);
glDisable(GL_FOG);


// invalidates cache for prepare_texture :
raydium_rendering_internal_prepare_texture_render(0);

raydium_texture_current_set_name(raydium_sky_texture_skybox_front);
raydium_rendering_internal_prepare_texture_render(raydium_texture_current_main);

glColor4fv(raydium_background_color);
glDepthMask(GL_FALSE);

glPushMatrix();

glTranslatef(x,y,z);
glScalef(1,-1,1); // scanlines are read upside down for cubemap, remember
glRotatef(90,0,1,0); // usual rotation to get Raydium coords
glRotatef(90,0,0,1);

glBegin(GL_TRIANGLE_STRIP);			// X neg
    glTexCoord3f(-1,-1,-1); glVertex3f(-t,-t,-t);
	glTexCoord3f(-1, 1,-1); glVertex3f(-t, t,-t);
	glTexCoord3f(-1,-1, 1); glVertex3f(-t,-t, t);
	glTexCoord3f(-1, 1, 1); glVertex3f(-t, t, t);
glEnd();

glBegin(GL_TRIANGLE_STRIP);			// X pos
	glTexCoord3f( 1,-1,-1); glVertex3f( t,-t,-t);
	glTexCoord3f( 1,-1, 1); glVertex3f( t,-t, t);
	glTexCoord3f( 1, 1,-1); glVertex3f( t, t,-t);
	glTexCoord3f( 1, 1, 1); glVertex3f( t, t, t);
glEnd();

glBegin(GL_TRIANGLE_STRIP);			// Y neg
	glTexCoord3f(-1,-1,-1); glVertex3f(-t,-t,-t);
	glTexCoord3f(-1,-1, 1); glVertex3f(-t,-t, t);
	glTexCoord3f( 1,-1,-1); glVertex3f( t,-t,-t);
	glTexCoo