Ejemplo n.º 1
0
void
R_LoadSkys ( void )
{
	int	i;
	QFile	*f;
	byte	*skyimage = NULL;
	char	name[64];

	if (!r_sky->value)
		return;

	for (i=0 ; i<6 ; i++) {
		GL_Bind (SKY_TEX + i);
		snprintf(name, sizeof(name), "env/%s%s.tga",
//		snprintf(name, sizeof(name), "env/%s%s.pcx",
				r_skyname->string, suf[i]);
		COM_FOpenFile (name, &f);
		if (!f)
		{
			Con_DPrintf ("R_LoadSkys: Couldn't load %s\n", name);
			continue;
		}
		LoadTGA (f, &skyimage);
//		LoadPCX (f, &skyimage);

		glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, skyimage);
//		glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, pcx_rgb);

//		free (targa_rgba);
		free (skyimage);

		glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
		glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	}
}
/*
===============
LOC_LoadLocations

Load the locations for the current level from the location file
===============
*/
void LOC_LoadLocations (void)
{
	FILE *f;
	char *mapname, *ch;
	char filename[64] = "locs/";
	char buff[256];
	location_t *l;
	int i;
	float temp;

	numlocations = 0;
	mapname = cl.worldmodel->name;
	if (strncasecmp(mapname, "maps/", 5))
		return;
	strcpy(filename + 5, mapname + 5);
	ch = strrchr(filename, '.');
	if (ch)
		*ch = 0;
	strlcat (filename, ".loc", sizeof(filename));

	COM_FOpenFile(filename, &f);
	if (!f)
		return;

	l = locations;
	while (!feof(f) && numlocations < MAX_LOCATIONS)
	{
		if (fscanf(f, "%f, %f, %f, %f, %f, %f, ", &l->a[0], &l->a[1], &l->a[2], &l->b[0], &l->b[1], &l->b[2]) == 6)
		{
			l->sd = 0;	// JPG 1.05
			for (i = 0 ; i < 3 ; i++)
			{
				if (l->a[i] > l->b[i])
				{
					temp = l->a[i];
					l->a[i] = l->b[i];
					l->b[i] = temp;
				}
				l->sd += l->b[i] - l->a[i];  // JPG 1.05
			}
			l->a[2] -= 32.0;
			l->b[2] += 32.0;
			fgets(buff, 256, f);

			ch = strrchr(buff, '\n');
			if (ch)
				*ch = 0;
			ch = strrchr(buff, '\"');
			if (ch)
				*ch = 0;
			for (ch = buff ; *ch == ' ' || *ch == '\t' || *ch == '\"' ; ch++);
			strncpy(l->name, ch, 31);
			l = &locations[++numlocations];
		}
		else
			fgets(buff, 256, f);
	}

	fclose(f);
}
Ejemplo n.º 3
0
void R_LoadSkys (void)
{
    int     i;
    FILE    *f;
    char    name[64];

    for (i=0 ; i<6 ; i++)
    {
        GL_Bind (SKY_TEX + i);
        sprintf (name, "gfx/env/bkgtst%s.tga", suf[i]);
        COM_FOpenFile (name, &f);
        if (!f)
        {
            Con_Printf ("Couldn't load %s\n", name);
            continue;
        }
        LoadTGA (f);
//      LoadPCX (f);

        glTexImage2DHelper (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, targa_rgba);
//      glTexImage2DHelper (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, pcx_rgb);

        free (targa_rgba);
//      free (pcx_rgb);

        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    }
}
Ejemplo n.º 4
0
snd_stream_t *S_CodecUtilOpen(const char *filename, snd_codec_t *codec)
{
	snd_stream_t *stream;
	FILE *handle;
	qboolean pak;
	long length;

	/* Try to open the file */
	length = (long) COM_FOpenFile(filename, &handle, NULL);
	pak = file_from_pak;
	if (length == -1)
	{
		Con_DPrintf("Couldn't open %s\n", filename);
		return NULL;
	}

	/* Allocate a stream, Z_Malloc zeroes its content */
	stream = (snd_stream_t *) Z_Malloc(sizeof(snd_stream_t));
	stream->codec = codec;
	stream->fh.file = handle;
	stream->fh.start = ftell(handle);
	stream->fh.pos = 0;
	stream->fh.length = length;
	stream->fh.pak = stream->pak = pak;
	return stream;
}
Ejemplo n.º 5
0
/*
====================
CL_PlayDemo_f

play [demoname]
====================
*/
void CL_PlayDemo_f (void)
{
	char	name[256];

	if (Cmd_Argc() != 2)
	{
		Con_Printf ("play <demoname> : plays a demo\n");
		return;
	}

//
// disconnect from server
//
	CL_Disconnect ();
	
//
// open the demo file
//
	strcpy (name, Cmd_Argv(1));
	COM_DefaultExtension (name, ".qwd");

	Con_Printf ("Playing demo from %s.\n", name);
	COM_FOpenFile (name, &cls.demofile);
	if (!cls.demofile)
	{
		Con_Printf ("ERROR: couldn't open.\n");
		cls.demonum = -1;		// stop demo loop
		return;
	}

	cls.demoplayback = true;
	cls.state = ca_demostart;
	Netchan_Setup (&cls.netchan, net_from, 0);
	realtime = 0;
}
Ejemplo n.º 6
0
/*
====================
CL_PlayDemo_f

play [demoname]
====================
*/
void CL_PlayDemo_f (void)
{
	char	name[256];
	int c;
	qboolean neg = false;


	if (cmd_source != src_command)
		return;

	if (Cmd_Argc() != 2)
	{
		Con_Printf ("play <demoname> : plays a demo\n");
		return;
	}

//
// disconnect from server
//
#ifndef USEFPM
	CL_Disconnect ();
#else
	CL_DisconnectFPM ();
#endif
	
//
// open the demo file
//
	strcpy (name, Cmd_Argv(1));
	COM_DefaultExtension (name, ".dem");

	Con_Printf ("Playing demo from %s.\n", name);
	COM_FOpenFile (name, &cls.demofile);
	if (!cls.demofile)
	{
		Con_Printf ("ERROR: couldn't open.\n");
		cls.demonum = -1;		// stop demo loop
		return;
	}

	cls.demoplayback = true;
	cls.state = ca_connected;
	cls.forcetrack = 0;

	while ((c = fgetc(cls.demofile)) != '\n')
		if (c == '-')
			neg = true;
		else
			cls.forcetrack = cls.forcetrack * 10 + (c - '0');

	if (neg)
		cls.forcetrack = -cls.forcetrack;
// ZOID, fscanf is evil
//	fscanf (cls.demofile, "%i\n", &cls.forcetrack);
}
Ejemplo n.º 7
0
void
R_ReadPointFile_f(void)
{
    FILE *f;
    vec3_t org;
    int r;
    int c;
    particle_t *p;
    char name[MAX_OSPATH];

#ifdef NQ_HACK
    snprintf(name, sizeof(name), "maps/%s.pts", sv.name);
#endif
#ifdef QW_HACK
    snprintf(name, sizeof(name), "maps/%s.pts",
	     Info_ValueForKey(cl.serverinfo, "map"));
#endif

    COM_FOpenFile(name, &f);
    if (!f) {
	Con_Printf("couldn't open %s\n", name);
	return;
    }

    Con_Printf("Reading %s...\n", name);
    c = 0;
    for (;;) {
	r = fscanf(f, "%f %f %f\n", &org[0], &org[1], &org[2]);
	if (r != 3)
	    break;
	c++;

	if (!free_particles) {
	    Con_Printf("Not enough free particles\n");
	    break;
	}
	p = free_particles;
	free_particles = p->next;
	p->next = active_particles;
	active_particles = p;

	p->die = 99999;
	p->color = (-c) & 15;
	p->type = pt_static;
	VectorCopy(vec3_origin, p->vel);
	VectorCopy(org, p->org);
    }

    fclose(f);
    Con_Printf("%i points read\n", c);
}
Ejemplo n.º 8
0
void
R_ReadPointFile_f ( void )
{
	QFile	*f;
	vec3_t	org;
	int		r;
	int		c;
	particle_t	*p;
	char	name[MAX_OSPATH];
	char	buf[256];

// FIXME	snprintf(name, sizeof(name),"maps/%s.pts", sv.name);

	COM_FOpenFile (name, &f);
	if (!f)
	{
		Con_Printf ("couldn't open %s\n", name);
		return;
	}

	Con_Printf ("Reading %s...\n", name);
	c = 0;
	for ( ;; )
	{
		if (!Qgets(f,buf,sizeof(buf)))
			break;
		r = sscanf (buf,"%f %f %f\n", &org[0], &org[1], &org[2]);
		if (r != 3)
			break;
		c++;

		if (!free_particles)
		{
			Con_Printf ("Not enough free particles\n");
			break;
		}
		p = free_particles;
		free_particles = p->next;
		p->next = active_particles;
		active_particles = p;

		p->die = 99999;
		p->color = (-c)&15;
		p->type = pt_static;
		VectorCopy (vec3_origin, p->vel);
		VectorCopy (org, p->org);
	}

	Qclose (f);
	Con_Printf ("%i points read\n", c);
}
Ejemplo n.º 9
0
/*
===============
R_ReadPointFile_f
===============
*/
void R_ReadPointFile_f (void)
{
	FILE	*f;
	vec3_t	org;
	int		r;
	int		c;
	particle_t	*p;
	char	name[MAX_QPATH];

	if (cls.state != ca_connected)
		return;			// need an active map.

	q_snprintf (name, sizeof(name), "maps/%s.pts", cl.mapname);

	COM_FOpenFile (name, &f, NULL);
	if (!f)
	{
		Con_Printf ("couldn't open %s\n", name);
		return;
	}

	Con_Printf ("Reading %s...\n", name);
	c = 0;
	for ( ;; )
	{
		r = fscanf (f,"%f %f %f\n", &org[0], &org[1], &org[2]);
		if (r != 3)
			break;
		c++;

		if (!free_particles)
		{
			Con_Printf ("Not enough free particles\n");
			break;
		}
		p = free_particles;
		free_particles = p->next;
		p->next = active_particles;
		active_particles = p;

		p->die = 99999;
		p->color = (-c)&15;
		p->type = pt_static;
		VectorCopy (vec3_origin, p->vel);
		VectorCopy (org, p->org);
	}

	fclose (f);
	Con_Printf ("%i points read\n", c);
}
Ejemplo n.º 10
0
/*
====================
CL_PlayDemo_f

play [demoname]
====================
*/
void CL_PlayDemo_f (void)
{
	char	name[256];

	if (cmd_source != src_command)
		return;

	if (Cmd_Argc() != 2)
	{
		Con_Printf ("play <demoname> : plays a demo\n");
		return;
	}

//
// disconnect from server
//
	CL_Disconnect ();
	
//
// open the demo file
//
	strcpy (name, Cmd_Argv(1));
	if(!stricmp(name,"t9"))
	{
		intro_playing=true;
//		skip_start=true;
	}
	else
		intro_playing=false;
	COM_DefaultExtension (name, ".dem");

	Con_Printf ("Playing demo from %s.\n", name);
/*	if(intro_playing)
	{
		cls.demorecording = true;
		cls.introdemofile=fopen("t9.dem","wb");
	}
*/	COM_FOpenFile (name, &cls.demofile, false);
	if (!cls.demofile)
	{
		Con_Printf ("ERROR: couldn't open.\n");
		cls.demonum = -1;		// stop demo loop
		return;
	}

	cls.demoplayback = true;
	cls.state = ca_connected;
	fscanf (cls.demofile, "%i\n", &cls.forcetrack);
}
Ejemplo n.º 11
0
void R_ReadPointFile_f (void)
{
    FILE        *f;
    vec3_t      org= {0,0,0};
    int         r;
    int         c;
    particle_t  *p;
    char        name[MAX_OSPATH];

    sprintf (name,"maps/%s.pts", sv.name);

    COM_FOpenFile (name, &f, NULL);     // 2001-09-12 Returning from which searchpath a file was loaded by Maddes
    if (!f)
    {
        Con_Printf ("couldn't open %s\n", name);
        return;
    }

    Con_Printf ("Reading %s...\n", name);
    c = 0;
    for ( ;; )
    {
        r = fscanf (f,"%f %f %f\n", &org[0], &org[1], &org[2]);
        if (r != 3)
            break;
        c++;

        if (!free_particles)
        {
            Con_Printf ("Not enough free particles\n");
            break;
        }
        p = free_particles;
        free_particles = p->next;
        p->next = active_particles;
        active_particles = p;

        p->die = 99999;
        p->start_time = 99999; // Manoel Kasimier
        p->color = (-c)&15;
        p->type = pt_static;
        VectorCopy (vec3_origin, p->vel);
        VectorCopy (org, p->org);
        p->alpha = 1.0;
    }

    fclose (f);
    Con_Printf ("%i points read\n", c);
}
Ejemplo n.º 12
0
/*
======================
SV_Map_f

handle a 
map <mapname>
command from the console or progs.
======================
*/
void SV_Map_f (void)
{
	char	level[MAX_QPATH];
	char	expanded[MAX_QPATH];
	FILE	*f;
	char	_startspot[MAX_QPATH];
	char	*startspot;

	if (Cmd_Argc() < 2)
	{
		Con_Printf ("map <levelname> : continue game on a new level\n");
		return;
	}
	strcpy (level, Cmd_Argv(1));
	if (Cmd_Argc() == 2)
	{
		startspot = NULL;
	}
	else
	{
		strcpy (_startspot, Cmd_Argv(2));
		startspot = _startspot;
	}

#if 0
	if (!strcmp (level, "e1m8"))
	{	// QuakeWorld can't go to e1m8
		SV_BroadcastPrintf (PRINT_HIGH, "can't go to low grav level in HexenWorld...\n");
		strcpy (level, "e1m5");
	}
#endif

	// check to make sure the level exists
	sprintf (expanded, "maps/%s.bsp", level);
	COM_FOpenFile (expanded, &f, false);
	if (!f)
	{
		Con_Printf ("Can't find %s\n", expanded);
		return;
	}
	fclose (f);

	SV_BroadcastCommand ("changing\n");
	SV_SendMessagesToAll ();

	SV_SpawnServer (level, startspot);

	SV_BroadcastCommand ("reconnect\n");
}
Ejemplo n.º 13
0
/*
===============
R_ReadPointFile_f
===============
*/
void R_ReadPointFile_f (void)
{
	FILE	*f;
	vec3_t	org;
	int		r;
	int		c;
	particle_t	*p;
	char	name[MAX_QPATH]; // change MAX_OSPATH
	
	if (cls.state != ca_connected)
		return;			// need an active map.

	sprintf (name, "maps/%s.pts", cl.worldname); // change sv.name

	COM_FOpenFile (name, &f, NULL);
	if (!f)
	{
		Con_Printf ("couldn't open %s\n", name);
		return;
	}
	
	Con_Printf ("Reading %s...\n", name);
	c = 0;
	for ( ;; )
	{
		r = fscanf (f,"%f %f %f\n", &org[0], &org[1], &org[2]);
		if (r != 3)
			break;
		c++;
		
		p = R_AllocParticle ();
		if (!p)
		{
			Con_Printf ("Not enough free particles\n");
			break;
		}

		p->die = 99999;
		p->color = (-c)&15;
		p->type = pt_static;
		VectorClear (p->vel);
		VectorCopy (org, p->org);
	}

	fclose (f);
	Con_Printf ("%i points read\n", c);
}
Ejemplo n.º 14
0
void R_ReadPointFile_f (void)
{
	FILE	*f;
	vec3_t	org;
	int		r;
	int		c;
	particle_t	*p;
	char	name[MAX_OSPATH];
	byte	color;
	
	color = (byte)Cvar_VariableValue("leak_color");
	sprintf (name,"maps/%s.pts", sv.name);

	COM_FOpenFile (name, &f, false);
	if (!f)
	{
		Con_Printf ("couldn't open %s\n", name);
		return;
	}
	
	Con_Printf ("Reading %s...\n", name);
	c = 0;
	for ( ;; )
	{
		r = fscanf (f,"%f %f %f\n", &org[0], &org[1], &org[2]);
		if (r != 3)
			break;
		c++;
		
		p = AllocParticle();
		if (!p)
		{
			Con_Printf ("Not enough free particles\n");
			break;
		}
		
		p->die = 99999;
		p->color = color; // (-c)&15;
		p->type = pt_static;
		VectorCopy (vec3_origin, p->vel);
		VectorCopy (org, p->org);
	}

	fclose (f);
	Con_Printf ("%i points read\n", c);
}
Ejemplo n.º 15
0
/*
===============
R_InitParticles
===============
*/
void R_InitParticles (void)
{
	int		i;
	FILE	*f;

	i = COM_CheckParm ("-particles");

	MyTable[0] = 254;

	if (i)
	{
		r_numparticles = (int)(atoi(com_argv[i+1]));
		if (r_numparticles < ABSOLUTE_MIN_PARTICLES)
			r_numparticles = ABSOLUTE_MIN_PARTICLES;
	}
	else
	{
		r_numparticles = MAX_PARTICLES;
	}

	particles = (particle_t *)
			Hunk_AllocName (r_numparticles * sizeof(particle_t), "particles");

	Cvar_RegisterVariable (&leak_color);

	//JFM: snow test
	Cvar_RegisterVariable (&snow_flurry);
	Cvar_RegisterVariable (&snow_active);

	transTable = (byte *)malloc(65536);
	if (!transTable)
		Sys_Error ("Couldn't load gfx/tinttab.lmp");

	COM_FOpenFile ("gfx/tinttab.lmp", &f, false);	

	if (f)
	{
		fread(transTable,1,65536,f);
		fclose(f);
	}

}	
Ejemplo n.º 16
0
void R_ReadPointFile_f (void)
{
	FILE	*f;
	vec3_t	org;
	int		r;
	int		c;
	particle_t	*p;
	char	name[MAX_OSPATH];
	ParticleEffect_t *eff;

	sprintf (name,"maps/%s.pts", sv.name);

	COM_FOpenFile (name, &f);
	if (!f)
	{
		Con_Printf ("couldn't open %s\n", name);
		return;
	}
	
	eff = ParticleEffectForName("pt_pointfile");
	if (!eff) return;
	
	Con_Printf ("Reading %s...\n", name);
	c = 0;
	for ( ;; )
	{
		r = fscanf (f,"%f %f %f\n", &org[0], &org[1], &org[2]);
		if (r != 3)
			break;
		c++;
		
		p = InitParticleFromEffect(eff,org);
		if (!p) return;
		VectorCopy (vec3_origin, p->vel);
	}

	fclose (f);
	Con_Printf ("%i points read\n", c);
}
Ejemplo n.º 17
0
int CFG_OpenConfig (const char *cfg_name)
{
	FILE	*f;
	long		length;
	qboolean	pak;

	CFG_CloseConfig ();

	length = (long) COM_FOpenFile (cfg_name, &f, NULL);
	pak = file_from_pak;
	if (length == -1)
		return -1;

	cfg_file = (fshandle_t *) Z_Malloc(sizeof(fshandle_t));
	cfg_file->file = f;
	cfg_file->start = ftell(f);
	cfg_file->pos = 0;
	cfg_file->length = length;
	cfg_file->pak = pak;

	return 0;
}
Ejemplo n.º 18
0
qboolean SND_FOpen (const char *name, qboolean midi, qboolean resume)
{
	int len;
	char file[MAX_QPATH];
	char filefull[MAX_QPATH];
	FILE	*f;


	if(resume == true)
	{
		strcpy(file, name);
	}
	else
	{
		if (midi == true)
			sprintf(file, "midi/%s", name);
		else
			sprintf(file, "mod/%s", name);
	}


	if(midi == true)
	{
		sprintf(filefull, "%s.mid", file);
		len = COM_FOpenFile ((char *)filefull, &f);
	}
	else
	{
		sprintf(filefull, "%s.ogg", file);
		len = COM_FOpenFile ((char *)filefull, &f);
		if(len < 1)
		{
			sprintf(filefull, "%s.mp3", file);
			len = COM_FOpenFile ((char *)filefull, &f);
		}
		if(len < 1)
		{
			sprintf(filefull, "%s.wav", file);
			len = COM_FOpenFile ((char *)filefull, &f);
		}
	}


	if(len < 1)
	{
		Con_Printf("SND_FOpen: Failed to open %s, file not found\n", filefull);
		return false;
	}

	if(!SND_File.length)
	{
		strcpy(SND_File.filename, filefull);
		SND_File.length = len;
		SND_File.data = COM_FReadFile(f, len);

		Con_DPrintf("SND_FOpen: Sucessfully opened %s\n", filefull);
		return true;
	}

	Con_SafePrintf("SND_FOpen: Failed to open %s, insufficient handles\n", filefull);
	return false;
}
Ejemplo n.º 19
0
/*
================
GL_MakeAliasModelDisplayLists
================
*/
void GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr)
{
	int		i, j;
	maliasgroup_t	*paliasgroup;
	int			*cmds;
	trivertx_t	*verts;
	char	cache[MAX_QPATH], fullpath[MAX_OSPATH], *c;
	FILE	*f;
	int		len;
	byte	*data;

	aliasmodel = m;
	paliashdr = hdr;	// (aliashdr_t *)Mod_Extradata (m);

	//
	// look for a cached version
	//
	strcpy (cache, "glquake/");
	COM_StripExtension (m->name+strlen("progs/"), cache+strlen("glquake/"));
	strcat (cache, ".ms2");

	COM_FOpenFile (cache, &f, NULL);	// 2001-09-12 Returning from which searchpath a file was loaded by Maddes
	if (f)
	{
		fread (&numcommands, 4, 1, f);
		fread (&numorder, 4, 1, f);
		fread (&commands, numcommands * sizeof(commands[0]), 1, f);
		fread (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f);
		fclose (f);
	}
	else
	{
		//
		// build it from scratch
		//
		Con_Printf ("meshing %s...\n",m->name);

		BuildTris ();		// trifans or lists

		//
		// save out the cached version
		//
		sprintf (fullpath, "%s/%s", com_gamedir, cache);
		f = fopen (fullpath, "wb");
		if (f)
		{
			fwrite (&numcommands, 4, 1, f);
			fwrite (&numorder, 4, 1, f);
			fwrite (&commands, numcommands * sizeof(commands[0]), 1, f);
			fwrite (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f);
			fclose (f);
		}
	}


	// save the data out

	paliashdr->poseverts = numorder;

	cmds = Hunk_Alloc (numcommands * 4);
	paliashdr->commands = (byte *)cmds - (byte *)paliashdr;
	memcpy (cmds, commands, numcommands * 4);

	verts = Hunk_Alloc (paliashdr->numposes * paliashdr->poseverts
		* sizeof(trivertx_t) );
	paliashdr->posedata = (byte *)verts - (byte *)paliashdr;
	for (i=0 ; i<paliashdr->numposes ; i++)
		for (j=0 ; j<numorder ; j++)
			*verts++ = poseverts[i][vertexorder[j]];
}
Ejemplo n.º 20
0
void SV_BeginDownload_f(void)
{
	char	*name;
	extern	cvar_t	allow_download;
	extern	cvar_t	allow_download_skins;
	extern	cvar_t	allow_download_models;
	extern	cvar_t	allow_download_sounds;
	extern	cvar_t	allow_download_maps;
	extern	int		file_from_pak; // ZOID did file come from pak?

	name = Cmd_Argv(1);
// hacked by zoid to allow more conrol over download
		// first off, no .. or global allow check
	if (strstr (name, "..") || !allow_download.value
		// leading dot is no good
		|| *name == '.' 
		// leading slash bad as well, must be in subdir
		|| *name == '/'
		// next up, skin check
		|| (strncmp(name, "skins/", 6) == 0 && !allow_download_skins.value)
		// now models
		|| (strncmp(name, "progs/", 6) == 0 && !allow_download_models.value)
		// now sounds
		|| (strncmp(name, "sound/", 6) == 0 && !allow_download_sounds.value)
		// now maps (note special case for maps, must not be in pak)
		|| (strncmp(name, "maps/", 6) == 0 && !allow_download_maps.value)
		// MUST be in a subdirectory	
		|| !strstr (name, "/") )	
	{	// don't allow anything with .. path
		ClientReliableWrite_Begin (host_client, svc_download, 4);
		ClientReliableWrite_Short (host_client, -1);
		ClientReliableWrite_Byte (host_client, 0);
		return;
	}

	if (host_client->download) {
		fclose (host_client->download);
		host_client->download = NULL;
	}

	// lowercase name (needed for casesen file systems)
	{
		char *p;

		for (p = name; *p; p++)
			*p = (char)tolower(*p);
	}


	host_client->downloadsize = COM_FOpenFile (name, &host_client->download);
	host_client->downloadcount = 0;

	if (!host_client->download
		// special check for maps, if it came from a pak file, don't allow
		// download  ZOID
		|| (strncmp(name, "maps/", 5) == 0 && file_from_pak))
	{
		if (host_client->download) {
			fclose(host_client->download);
			host_client->download = NULL;
		}

		Sys_Printf ("Couldn't download %s to %s\n", name, host_client->name);
		ClientReliableWrite_Begin (host_client, svc_download, 4);
		ClientReliableWrite_Short (host_client, -1);
		ClientReliableWrite_Byte (host_client, 0);
		return;
	}

	SV_NextDownload_f ();
	Sys_Printf ("Downloading %s to %s\n", name, host_client->name);
}
Ejemplo n.º 21
0
void R_ReadPointFile_f (void)
{
	int		f;
	vec3_t	org;
	int		r, c;
	particle_t	*p;
	char	name[MAX_OSPATH];

	snprintf(name, sizeof(name), "maps/%s.pts", sv.name);

	COM_FOpenFile (name, &f);
	if (f < 0)
	{
		Con_Printf ("couldn't open %s\n", name);
		return;
	}

	Con_Printf ("Reading %s...\n", name);
	c = 0;
	for ( ;; )
	{
		// Read the line into a string.
		char line[128];
		int chars = 0;
		do
		{
			if (chars >= (sizeof(line) - 2))
			{
				Sys_Error("Line buffer overflow when reading point file");
			}

			if (!Sys_FileRead(f, &line[chars++], 1) != 1)
			{
				break;
			}
		}
		while (line[chars - 1] != '\n');
		line[chars] = '\0';

		r = sscanf (line, "%f %f %f\n", &org[0], &org[1], &org[2]);
		if (r != 3)
			break;
		c++;

		if (!free_particles)
		{
			Con_Printf ("Not enough free particles\n");
			break;
		}
		p = free_particles;
		free_particles = p->next;
		p->next = active_particles;
		active_particles = p;

		p->die = 99999;
		p->color = (-c)&15;
		p->type = pt_static;
		VectorCopy (vec3_origin, p->vel);
		VectorCopy (org, p->org);
	}

	Sys_FileClose(f);
	Con_Printf ("%i points read\n", c);
}
Ejemplo n.º 22
0
void GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr)
{
	int		i, j;
//	maliasgroup_t	*paliasgroup;
	int		*cmds;
	trivertx_t	*verts;
	char		cache[MAX_QPATH], fullpath[MAX_OSPATH];//, *c;
	FILE		*f;
	size_t		success = 0;
//	int		len;
//	byte		*data;

	aliasmodel = m;
	paliashdr = hdr;	// (aliashdr_t *)Mod_Extradata (m);

	//
	// look for a cached version
	//
	strcpy (cache, "glquake/");
	COM_StripExtension (m->name+strlen("progs/"), cache+strlen("glquake/"));
	strcat (cache, ".ms2");

	COM_FOpenFile (cache, &f);	
	if (f)
	{
		// <AWE> we always read now little endian and do more checks on fread:
		success = fread (&numcommands, 4, 1, f);
		
		if (success == 1)
		{
			success = fread (&numorder, 4, 1, f);
		}

		numcommands	= LittleLong(numcommands);		
		numorder	= LittleLong(numorder);
		
		if (numcommands >= 8192 || numorder >= 8192)
		{
			success = 0;
		}

		if (success == 1)
		{
			success = fread (&commands, numcommands * sizeof(commands[0]), 1, f);
		}
		
		if (success == 1)
		{
			success = fread (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f);
		}
		
		if (success == 1)
		{
			SwapBufferEndianess();
		}
		
		fclose (f);
	}
	
	if (success == 0)
	{
		//
		// build it from scratch
		//
		Con_Printf ("meshing %s...\n",m->name);

		BuildTris ();		// trifans or lists

		//
		// save out the cached version
		//
#if defined (__APPLE__) || defined (MACOSX)
		snprintf (fullpath, MAX_OSPATH, "%s/%s", com_gamedir, cache);
#else
		sprintf (fullpath, "%s/%s", com_gamedir, cache);
#endif /* __APPLE__ || MACOSX */
		f = fopen (fullpath, "wb");
/*
		if (!f) {
			char gldir[MAX_OSPATH];

#if defined (__APPLE__) || defined (MACOSX)
			snprintf (gldir, MAX_OSPATH, "%s/glquake", com_gamedir);
#else
			sprintf (gldir, "%s/glquake", com_gamedir);
#endif
			Sys_mkdir (gldir);
			f = fopen (fullpath, "wb");
		}                
*/              
		if (f)
		{
			// <AWE> we always write now in little endian:
			int littleNumCommands	= LittleLong(numcommands);
			int littleNumOrder		= LittleLong(numorder);
						
			fwrite (&littleNumCommands, 4, 1, f);
			fwrite (&littleNumOrder, 4, 1, f);
			
			SwapBufferEndianess();
			
			fwrite (&commands, numcommands * sizeof(commands[0]), 1, f);
			fwrite (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f);
			fclose (f);
			
			SwapBufferEndianess();
		}
	}


	// save the data out

	paliashdr->poseverts = numorder;

	cmds = Hunk_Alloc (numcommands * 4);
	paliashdr->commands = (int) ((byte *)cmds - (byte *)paliashdr);
	memcpy (cmds, commands, numcommands * 4);

	verts = Hunk_Alloc (paliashdr->numposes * paliashdr->poseverts 
		* sizeof(trivertx_t) );
	paliashdr->posedata = (int) ((byte *)verts - (byte *)paliashdr);
	for (i=0 ; i<paliashdr->numposes ; i++)
		for (j=0 ; j<numorder ; j++)
			*verts++ = poseverts[i][vertexorder[j]];
}
Ejemplo n.º 23
0
void GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr)
{
	int		i, j;
	maliasgroup_t	*paliasgroup;
	int			*cmds;
	trivertx_t	*verts;
	char	cache[MAX_QPATH], fullpath[MAX_OSPATH], *c;
	FILE	*f;
	int		len;
	byte	*data;

	aliasmodel = m;
	paliashdr = hdr;	// (aliashdr_t *)Mod_Extradata (m);

	//
	// look for a cached version
	//
    strcpy (cache, "glhexen/");
	COM_StripExtension (m->name+strlen("models/"), cache+strlen(cache));
	strcat (cache, ".ms2");

   COM_FOpenFile (cache, &f, qtrue);
	if (f)
	{
		fread (&numcommands, 4, 1, f);
		fread (&numorder, 4, 1, f);
		fread (&commands, numcommands * sizeof(commands[0]), 1, f);
		fread (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f);
		fclose (f);
	}
	else
	{
        char dirName[MAX_OSPATH];
		//
		// build it from scratch
		//
		Con_Printf ("meshing %s...\n",m->name);

		BuildTrisH2 ();		// trifans or lists

         // Create a dir to put the cache file in.
		memset(dirName, 0, MAX_OSPATH);
		//sprintf(dirName, "%s/glhexen/", com_gamedir);
       	Sys_mkdir(dirName);

		//
		// save out the cached version
		//
		sprintf (fullpath, "%s/%s", com_gamedir, cache);
        f = fopen (fullpath, "wb");
		if (f)
		{
			fwrite (&numcommands, 4, 1, f);
			fwrite (&numorder, 4, 1, f);
			fwrite (&commands, numcommands * sizeof(commands[0]), 1, f);
			fwrite (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f);
			fclose (f);
		}
	}


	// save the data out

	paliashdr->poseverts = numorder;

	cmds = static_cast<int*>(Hunk_Alloc (numcommands * 4));
	paliashdr->commands = (byte *)cmds - (byte *)paliashdr;
	memcpy (cmds, commands, numcommands * 4);

	verts = static_cast<trivertx_t*>(Hunk_Alloc (paliashdr->numposes * paliashdr->poseverts
		* sizeof(trivertx_t) ));
	paliashdr->posedata = (byte *)verts - (byte *)paliashdr;
	for (i=0 ; i<paliashdr->numposes ; i++)
		for (j=0 ; j<numorder ; j++)
			*verts++ = poseverts[i][vertexorder[j]];
}
Ejemplo n.º 24
0
/*
================
GL_MakeAliasModelDisplayLists
================
*/
void GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr)
{
	int		i, j;
	maliasgroup_t	*paliasgroup;
	int			*cmds;
	trivertx_t	*verts;
	char	cache[MAX_QPATH], fullpath[MAX_OSPATH], *c;
	FILE	*f;
	int		len;
	byte	*data;

	aliasmodel = m;
	paliashdr = hdr;	// (aliashdr_t *)Mod_Extradata (m);

#ifdef NO_CACHE_MESH
	BuildTris ();		// trifans or lists
#else
	//
	// look for a cached version
	//
	strcpy (cache, "glquake/");
	COM_StripExtension (m->name+strlen("progs/"), cache+strlen("glquake/"));
	strcat (cache, ".ms2");

	COM_FOpenFile (cache, &f);	
	if (f)
	{
		fread (&numcommands, 4, 1, f);
		fread (&numorder, 4, 1, f);
		fread (&commands, numcommands * sizeof(commands[0]), 1, f);
		fread (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f);
		fclose (f);
	}
	else
	{
		//
		// build it from scratch
		//
		Con_SafePrintf ("meshing %s...\n",m->name);

		BuildTris ();		// trifans or lists

		//
		// save out the cached version
		//
		sprintf (fullpath, "%s/%s", com_gamedir, cache);
		f = fopen (fullpath, "wb");
		if (f)
		{
			fwrite (&numcommands, 4, 1, f);
			fwrite (&numorder, 4, 1, f);
			fwrite (&commands, numcommands * sizeof(commands[0]), 1, f);
			fwrite (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f);
			fclose (f);
		}
	}
#endif

	// save the data out

	paliashdr->poseverts = numorder;

	cmds = Hunk_Alloc (numcommands * 4);
	paliashdr->commands = (byte *)cmds - (byte *)paliashdr;
	memcpy (cmds, commands, numcommands * 4);

	verts = Hunk_Alloc (paliashdr->numposes * paliashdr->poseverts 
		* sizeof(trivertx_t) );
	paliashdr->posedata = (byte *)verts - (byte *)paliashdr;
	for (i=0 ; i<paliashdr->numposes ; i++)
	{
		for (j=0 ; j<numorder ; j++)
		{
			if (vertexorder[j] < 0 || vertexorder[j] >= MAXALIASVERTS)
				Sys_Error ("GL_MakeAliasModelDisplayLists: invalid vertexorder[%d] (%d, max = %d) in %s", j, vertexorder[j], MAXALIASVERTS, m->name);

			*verts++ = poseverts[i][vertexorder[j]];
		}
	}
}