X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=model_shared.c;h=92cf45a5bf30d49f81e4b2c41acb10ddbee65ce9;hb=661db48d6874ee483de0871b6d3d29e55c42fd56;hp=05cb342750acd47a69e3d9c51cf353a4e7c30d47;hpb=63f4e0c538ca8f14b1e4fd30d032104e99c930e3;p=xonotic%2Fdarkplaces.git diff --git a/model_shared.c b/model_shared.c index 05cb3427..92cf45a5 100644 --- a/model_shared.c +++ b/model_shared.c @@ -247,21 +247,21 @@ static int Mod_FrameGroupify_ParseGroups(const char *buf, mod_framegroupify_pars bufptr = buf; i = 0; - for(;;) + while(bufptr) { // an anim scene! // REQUIRED: fetch start - if (!COM_ParseToken_Simple(&bufptr, true, false, true)) - break; + COM_ParseToken_Simple(&bufptr, true, false, true); + if (!bufptr) + break; // end of file if (!strcmp(com_token, "\n")) continue; // empty line start = atoi(com_token); // REQUIRED: fetch length - if (!COM_ParseToken_Simple(&bufptr, true, false, true)) - break; - if (!strcmp(com_token, "\n")) + COM_ParseToken_Simple(&bufptr, true, false, true); + if (!bufptr || !strcmp(com_token, "\n")) { Con_Printf("framegroups file: missing number of frames\n"); continue; @@ -269,36 +269,36 @@ static int Mod_FrameGroupify_ParseGroups(const char *buf, mod_framegroupify_pars len = atoi(com_token); // OPTIONAL args start - if (!COM_ParseToken_Simple(&bufptr, true, false, true)) - break; + COM_ParseToken_Simple(&bufptr, true, false, true); // OPTIONAL: fetch fps fps = 20; - if (strcmp(com_token, "\n")) + if (bufptr && strcmp(com_token, "\n")) { fps = atof(com_token); - if (!COM_ParseToken_Simple(&bufptr, true, false, true)) - break; + COM_ParseToken_Simple(&bufptr, true, false, true); } // OPTIONAL: fetch loopflag loop = true; - if (strcmp(com_token, "\n")) + if (bufptr && strcmp(com_token, "\n")) { loop = (atoi(com_token) != 0); - if (!COM_ParseToken_Simple(&bufptr, true, false, true)) - break; + COM_ParseToken_Simple(&bufptr, true, false, true); } // OPTIONAL: fetch name name[0] = 0; - if (strcmp(com_token, "\n")) + if (bufptr && strcmp(com_token, "\n")) { strlcpy(name, com_token, sizeof(name)); - if (!COM_ParseToken_Simple(&bufptr, true, false, true)) - break; + COM_ParseToken_Simple(&bufptr, true, false, true); } + // OPTIONAL: remaining unsupported tokens (eat them) + while (bufptr && strcmp(com_token, "\n")) + COM_ParseToken_Simple(&bufptr, true, false, true); + //Con_Printf("data: %d %d %d %f %d (%s)\n", i, start, len, fps, loop, name); if(cb) @@ -467,6 +467,9 @@ dp_model_t *Mod_LoadModel(dp_model_t *mod, qboolean crash, qboolean checkdisk) // errors can prevent the corresponding mod->loaded = true; mod->loaded = false; + // default lightmap scale + mod->lightmapscale = 1; + // default model radius and bounding box (mainly for missing models) mod->radius = 16; VectorSet(mod->normalmins, -mod->radius, -mod->radius, -mod->radius); @@ -2442,7 +2445,6 @@ qboolean Mod_LoadTextureFromQ3Shader(texture_t *texture, const char *name, qbool { if (developer_loading.integer) Con_Printf("%s: loaded shader for %s\n", loadmodel->name, name); - texture->surfaceparms = shader->surfaceparms; // allow disabling of picmip or compression by defaulttexflags texture->textureflags = (shader->textureflags & texflagsmask) | texflagsor; @@ -2631,6 +2633,40 @@ nothing GL_ZERO GL_ONE // if (shader->surfaceparms & Q3SURFACEPARM_LIGHTGRID ) texture->supercontents |= SUPERCONTENTS_LIGHTGRID ; // if (shader->surfaceparms & Q3SURFACEPARM_ANTIPORTAL ) texture->supercontents |= SUPERCONTENTS_ANTIPORTAL ; + texture->surfaceflags = 0; + if (shader->surfaceparms & Q3SURFACEPARM_ALPHASHADOW ) texture->surfaceflags |= Q3SURFACEFLAG_ALPHASHADOW ; + // if (shader->surfaceparms & Q3SURFACEPARM_AREAPORTAL ) texture->surfaceflags |= Q3SURFACEFLAG_AREAPORTAL ; + // if (shader->surfaceparms & Q3SURFACEPARM_CLUSTERPORTAL) texture->surfaceflags |= Q3SURFACEFLAG_CLUSTERPORTAL; + // if (shader->surfaceparms & Q3SURFACEPARM_DETAIL ) texture->surfaceflags |= Q3SURFACEFLAG_DETAIL ; + // if (shader->surfaceparms & Q3SURFACEPARM_DONOTENTER ) texture->surfaceflags |= Q3SURFACEFLAG_DONOTENTER ; + // if (shader->surfaceparms & Q3SURFACEPARM_FOG ) texture->surfaceflags |= Q3SURFACEFLAG_FOG ; + // if (shader->surfaceparms & Q3SURFACEPARM_LAVA ) texture->surfaceflags |= Q3SURFACEFLAG_LAVA ; + if (shader->surfaceparms & Q3SURFACEPARM_LIGHTFILTER ) texture->surfaceflags |= Q3SURFACEFLAG_LIGHTFILTER ; + if (shader->surfaceparms & Q3SURFACEPARM_METALSTEPS ) texture->surfaceflags |= Q3SURFACEFLAG_METALSTEPS ; + if (shader->surfaceparms & Q3SURFACEPARM_NODAMAGE ) texture->surfaceflags |= Q3SURFACEFLAG_NODAMAGE ; + if (shader->surfaceparms & Q3SURFACEPARM_NODLIGHT ) texture->surfaceflags |= Q3SURFACEFLAG_NODLIGHT ; + if (shader->surfaceparms & Q3SURFACEPARM_NODRAW ) texture->surfaceflags |= Q3SURFACEFLAG_NODRAW ; + // if (shader->surfaceparms & Q3SURFACEPARM_NODROP ) texture->surfaceflags |= Q3SURFACEFLAG_NODROP ; + if (shader->surfaceparms & Q3SURFACEPARM_NOIMPACT ) texture->surfaceflags |= Q3SURFACEFLAG_NOIMPACT ; + if (shader->surfaceparms & Q3SURFACEPARM_NOLIGHTMAP ) texture->surfaceflags |= Q3SURFACEFLAG_NOLIGHTMAP ; + if (shader->surfaceparms & Q3SURFACEPARM_NOMARKS ) texture->surfaceflags |= Q3SURFACEFLAG_NOMARKS ; + // if (shader->surfaceparms & Q3SURFACEPARM_NOMIPMAPS ) texture->surfaceflags |= Q3SURFACEFLAG_NOMIPMAPS ; + if (shader->surfaceparms & Q3SURFACEPARM_NONSOLID ) texture->surfaceflags |= Q3SURFACEFLAG_NONSOLID ; + // if (shader->surfaceparms & Q3SURFACEPARM_ORIGIN ) texture->surfaceflags |= Q3SURFACEFLAG_ORIGIN ; + // if (shader->surfaceparms & Q3SURFACEPARM_PLAYERCLIP ) texture->surfaceflags |= Q3SURFACEFLAG_PLAYERCLIP ; + if (shader->surfaceparms & Q3SURFACEPARM_SKY ) texture->surfaceflags |= Q3SURFACEFLAG_SKY ; + if (shader->surfaceparms & Q3SURFACEPARM_SLICK ) texture->surfaceflags |= Q3SURFACEFLAG_SLICK ; + // if (shader->surfaceparms & Q3SURFACEPARM_SLIME ) texture->surfaceflags |= Q3SURFACEFLAG_SLIME ; + // if (shader->surfaceparms & Q3SURFACEPARM_STRUCTURAL ) texture->surfaceflags |= Q3SURFACEFLAG_STRUCTURAL ; + // if (shader->surfaceparms & Q3SURFACEPARM_TRANS ) texture->surfaceflags |= Q3SURFACEFLAG_TRANS ; + // if (shader->surfaceparms & Q3SURFACEPARM_WATER ) texture->surfaceflags |= Q3SURFACEFLAG_WATER ; + if (shader->surfaceparms & Q3SURFACEPARM_POINTLIGHT ) texture->surfaceflags |= Q3SURFACEFLAG_POINTLIGHT ; + if (shader->surfaceparms & Q3SURFACEPARM_HINT ) texture->surfaceflags |= Q3SURFACEFLAG_HINT ; + if (shader->surfaceparms & Q3SURFACEPARM_DUST ) texture->surfaceflags |= Q3SURFACEFLAG_DUST ; + // if (shader->surfaceparms & Q3SURFACEPARM_BOTCLIP ) texture->surfaceflags |= Q3SURFACEFLAG_BOTCLIP ; + // if (shader->surfaceparms & Q3SURFACEPARM_LIGHTGRID ) texture->surfaceflags |= Q3SURFACEFLAG_LIGHTGRID ; + // if (shader->surfaceparms & Q3SURFACEPARM_ANTIPORTAL ) texture->surfaceflags |= Q3SURFACEFLAG_ANTIPORTAL ; + if (shader->dpmeshcollisions) texture->basematerialflags |= MATERIALFLAG_MESHCOLLISIONS; if (shader->dpshaderkill && developer_extra.integer) @@ -2640,14 +2676,12 @@ nothing GL_ZERO GL_ONE { if (developer_extra.integer) Con_DPrintf("^1%s:^7 using fallback noshader material for ^3\"%s\"\n", loadmodel->name, name); - texture->surfaceparms = 0; texture->supercontents = SUPERCONTENTS_SOLID | SUPERCONTENTS_OPAQUE; } else if (!strcmp(texture->name, "common/nodraw") || !strcmp(texture->name, "textures/common/nodraw")) { if (developer_extra.integer) Con_DPrintf("^1%s:^7 using fallback nodraw material for ^3\"%s\"\n", loadmodel->name, name); - texture->surfaceparms = 0; texture->basematerialflags = MATERIALFLAG_NODRAW | MATERIALFLAG_NOSHADOW; texture->supercontents = SUPERCONTENTS_SOLID; } @@ -2655,7 +2689,6 @@ nothing GL_ZERO GL_ONE { if (developer_extra.integer) Con_DPrintf("^1%s:^7 No shader found for texture ^3\"%s\"\n", loadmodel->name, texture->name); - texture->surfaceparms = 0; if (texture->surfaceflags & Q3SURFACEFLAG_NODRAW) { texture->basematerialflags |= MATERIALFLAG_NODRAW | MATERIALFLAG_NOSHADOW;