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); }
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); } }
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; }
/* ==================== 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; }
/* ==================== 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); }
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); }
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); }
/* =============== 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); }
/* ==================== 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); }
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); }
/* ====================== 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"); }
/* =============== 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); }
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); }
/* =============== 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); } }
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); }
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; }
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; }
/* ================ 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]]; }
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); }
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); }
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]]; }
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]]; }
/* ================ 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]]; } } }