void QFile_ReadMaterialTypes(char* filename) { int i; FILE *f; if (materialtypes != defaultmaterialtypes) { if (materialtypes) free(materialtypes); materialtypes = (materialtype_t*)malloc(256 * sizeof(materialtype_t)); } f = fopen (filename, "rb"); if (!f) { materialtypes = defaultmaterialtypes; return; } fclose (f); LoadScriptFile(filename); i = 0; do { GetScriptToken (true); if (endofscript) { break; } if (strcmp(sof_token, "material") != 0) { while (ScriptTokenAvailable()) { GetScriptToken(false); } } else { GetScriptToken(false); materialtypes[i].name = (char*)malloc(strlen(sof_token) + 1); strcpy(materialtypes[i].name, sof_token); GetScriptToken (false); materialtypes[i].value = atoi(sof_token); } } while (i++ < 255); materialtypes[i].name = NULL; materialtypes[i].value = 0; }
/* =============== Cmd_Frame =============== */ void Cmd_Frame( void ){ while ( ScriptTokenAvailable() ) { GetScriptToken( false ); if ( g_skipmodel ) { continue; } if ( g_release || g_archive ) { model.num_frames = 1; // don't skip the writeout continue; } H_printf( "#define FRAME_%-16s\t%i\n", token, model.num_frames ); GrabFrame( token ); } }
/* =============== Cmd_Maps Only relevent for release and pak files. Releases the .bsp files for the maps, and scans all of the files to build a list of all textures used, which are then released. =============== */ void Cmd_Maps (void) { char map[1024]; int i; while (ScriptTokenAvailable ()) { GetScriptToken (false); sprintf (map, "maps/%s.bsp", token); ReleaseFile (map); if (!g_release) continue; // get all the texture references sprintf (map, "%smaps/%s.bsp", gamedir, token); LoadBSPFileTexinfo (map); for (i=0 ; i<numtexinfo ; i++) ReleaseTexture (texinfo[i].texture); } }
/* =============== Cmd_Skin Skins aren't actually stored in the file, only a reference is saved out to the header file. =============== */ void Cmd_Skin (void) { byte *palette; byte *pixels; int width, height; byte *cropped; int y; char name[1024], savename[1024]; GetScriptToken (false); if (model.num_skins == MAX_MD2SKINS) Error ("model.num_skins == MAX_MD2SKINS"); if (g_skipmodel) return; #if 1 sprintf (name, "%s/%s.pcx", cddir, token); sprintf (savename, "%s/!%s.pcx", g_outputDir, token); sprintf (g_skins[model.num_skins], "%s/!%s.pcx", cdpartial, token); #else sprintf (name, "%s/%s.lbm", cdarchive, token); strcpy (name, ExpandPathAndArchive( name ) ); // sprintf (name, "%s/%s.lbm", cddir, token); if (ScriptTokenAvailable()) { GetScriptToken (false); sprintf (g_skins[model.num_skins], "%s.pcx", token); sprintf (savename, "%s%s.pcx", g_outputDir, g_skins[model.num_skins]); } else { sprintf (savename, "%s/%s.pcx", g_outputDir, token); sprintf (g_skins[model.num_skins], "%s/%s.pcx", cdpartial, token); } #endif model.num_skins++; if (g_skipmodel || g_release || g_archive) return; // load the image printf ("loading %s\n", name); Load256Image (name, &pixels, &palette, &width, &height); // RemapZero (pixels, palette, width, height); // crop it to the proper size cropped = (byte *) SafeMalloc (model.skinwidth*model.skinheight, "Cmd_Skin"); for (y=0 ; y<model.skinheight ; y++) { memcpy (cropped+y*model.skinwidth, pixels+y*width, model.skinwidth); } // save off the new image printf ("saving %s\n", savename); CreatePath (savename); WritePCXfile (savename, cropped, model.skinwidth, model.skinheight, palette); free (pixels); free (palette); free (cropped); }
/* =============== ParseScript =============== */ void ParseScript (void) { while (1) { do { // look for a line starting with a $ command GetScriptToken (true); if (endofscript) return; if (token[0] == '$') break; while (ScriptTokenAvailable()) GetScriptToken (false); } while (1); // // model commands // if (!strcmp (token, "$modelname")) MODELCMD_Modelname (MODEL_MD2); else if (!strcmp (token, "$cd")) MODELCMD_Cd (MODEL_MD2); else if (!strcmp (token, "$origin")) MODELCMD_Origin (MODEL_MD2); else if (!strcmp (token, "$cluster")) MODELCMD_Cluster (MODEL_MD2); else if (!strcmp (token, "$base")) MODELCMD_Base (MODEL_MD2); else if (!strcmp (token, "$scale")) MODELCMD_ScaleUp (MODEL_MD2); else if (!strcmp (token, "$frame")) MODELCMD_Frame (MODEL_MD2); else if (!strcmp (token, "$skin")) MODELCMD_Skin (MODEL_MD2); else if (!strcmp (token, "$skinsize")) MODELCMD_Skinsize (MODEL_MD2); // // flexible model commands // else if (!strcmp (token, "$fm_modelname")) MODELCMD_Modelname (MODEL_FM); else if (!strcmp (token, "$fm_base")) MODELCMD_Base (MODEL_FM); else if (!strcmp (token, "$fm_basest")) MODELCMD_BaseST (MODEL_FM); else if (!strcmp (token, "$fm_cd")) MODELCMD_Cd (MODEL_FM); else if (!strcmp (token, "$fm_origin")) MODELCMD_Origin (MODEL_FM); else if (!strcmp (token, "$fm_cluster")) MODELCMD_Cluster (MODEL_FM); else if (!strcmp (token, "$fm_skeleton")) MODELCMD_Skeleton (MODEL_FM); else if (!strcmp (token, "$fm_scale")) MODELCMD_ScaleUp (MODEL_FM); else if (!strcmp (token, "$fm_frame")) MODELCMD_Frame (MODEL_FM); else if (!strcmp (token, "$fm_skeletal_frame")) // left in for compadibility with qdt already using fm_skeletal_frame MODELCMD_Frame (MODEL_FM); else if (!strcmp (token, "$fm_skin")) MODELCMD_Skin (MODEL_FM); else if (!strcmp (token, "$fm_skinsize")) MODELCMD_Skinsize (MODEL_FM); else if (!strcmp (token, "$fm_begin_group")) MODELCMD_BeginGroup(MODEL_FM); else if (!strcmp (token, "$fm_end_group")) MODELCMD_EndGroup(MODEL_FM); else if (!strcmp (token, "$fm_referenced")) MODELCMD_Referenced(MODEL_FM); else if (!strcmp (token, "$fm_node_order")) MODELCMD_NodeOrder(MODEL_FM); // // sprite commands // else if (!strcmp (token, "$spritename")) Cmd_SpriteName (); else if (!strcmp (token, "$sprdir")) Cmd_Sprdir (); else if (!strcmp (token, "$load")) Cmd_Load (); else if (!strcmp (token, "$spriteframe")) Cmd_SpriteFrame (); // // image commands // else if (!strcmpi (token, "$grab")) Cmd_Grab (); else if (!strcmpi (token, "$raw")) Cmd_Raw (); else if (!strcmpi (token, "$colormap")) Cmd_Colormap (); else if (!strcmpi (token, "$mippal")) Cmd_Mippal (); else if (!strcmpi (token, "$mipdir")) Cmd_Mipdir (); else if (!strcmpi (token, "$mip")) Cmd_Mip (); else if (!strcmp (token, "$environment")) Cmd_Environment (); // // pics // else if (!strcmp (token, "$picdir")) Cmd_Picdir (); else if (!strcmp (token, "$pic")) Cmd_Pic (); // // book // else if (!strcmp (token, "$bookdir")) Cmd_Bookdir (); else if (!strcmp (token, "$book")) Cmd_Book (); // // tmix // else if (!strcmp (token, "$texturemix")) Cmd_TextureMix (); // // video // else if (!strcmp (token, "$video")) Cmd_Video (); // // misc // else if (!strcmp (token, "$file")) Cmd_File (); else if (!strcmp (token, "$dir")) Cmd_Dir (); else if (!strcmp (token, "$maps")) Cmd_Maps (); else if (!strcmp (token, "$alphalight")) Cmd_Alphalight (); else if (!strcmp (token, "$inverse16table" )) Cmd_Inverse16Table(); else Error ("bad command %s\n", token); } }