]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_cmds.c
progs: Implement new extension DP_QC_FS_SEARCH_PACKFILE
[xonotic/darkplaces.git] / prvm_cmds.c
index 2723076c73dc0d881b78eec47d09af8bd299e135..5216d3f785f1767f8028108e8e9348928c8acbc2 100644 (file)
@@ -32,7 +32,7 @@ void VM_Warning(prvm_prog_t *prog, const char *fmt, ...)
        dpvsnprintf(msg,sizeof(msg),fmt,argptr);
        va_end(argptr);
 
-       Con_Warn(msg);
+       Con_Printf(CON_WARN "%s", msg);
 
        // TODO: either add a cvar/cmd to control the state dumping or replace some of the calls with Con_Printf [9/13/2006 Black]
        if(prvm_backtraceforwarnings.integer && recursive != host.realtime) // NOTE: this compares to the time, just in case if PRVM_PrintState causes a Host_Error and keeps recursive set
@@ -108,7 +108,7 @@ void VM_FrameBlendFromFrameGroupBlend(frameblend_t *frameblend, const framegroup
                return;
        }
 
-       nolerp = (model->type == mod_sprite) ? !r_lerpsprites.integer : !r_lerpmodels.integer;
+       nolerp = ((model->type == mod_sprite) ? !r_lerpsprites.integer : !r_lerpmodels.integer) || (model->nolerp == true);
        numframes = model->numframes;
        for (k = 0, g = framegroupblend;k < MAX_FRAMEGROUPBLENDS;k++, g++)
        {
@@ -265,20 +265,11 @@ checkextension(extensionname)
 // kind of helper function
 static qboolean checkextension(prvm_prog_t *prog, const char *name)
 {
-       int len;
-       const char *e, *start;
-       len = (int)strlen(name);
+       const char **e;
 
        for (e = prog->extensionstring;*e;e++)
        {
-               while (*e == ' ')
-                       e++;
-               if (!*e)
-                       break;
-               start = e;
-               while (*e && *e != ' ')
-                       e++;
-               if ((e - start) == len && !strncasecmp(start, name, len))
+               if(!strcasecmp(*e, name))
                {
 #ifdef USEODE
                        // special sheck for ODE
@@ -331,7 +322,7 @@ void VM_error(prvm_prog_t *prog)
        char string[VM_STRINGTEMP_LENGTH];
 
        VM_VarString(prog, 0, string, sizeof(string));
-       Con_Errorf("======%s ERROR in %s:\n%s\n", prog->name, PRVM_GetString(prog, prog->xfunction->s_name), string);
+       Con_Printf(CON_ERROR "======%s ERROR in %s:\n%s\n", prog->name, PRVM_GetString(prog, prog->xfunction->s_name), string);
        ed = PRVM_PROG_TO_EDICT(PRVM_allglobaledict(self));
        PRVM_ED_Print(prog, ed, NULL);
 
@@ -354,11 +345,11 @@ void VM_objerror(prvm_prog_t *prog)
        char string[VM_STRINGTEMP_LENGTH];
 
        VM_VarString(prog, 0, string, sizeof(string));
-       Con_Errorf("======OBJECT ERROR======\n"); // , prog->name, PRVM_GetString(prog->xfunction->s_name), string); // or include them? FIXME
+       Con_Printf(CON_ERROR "======OBJECT ERROR======\n"); // , prog->name, PRVM_GetString(prog->xfunction->s_name), string); // or include them? FIXME
        ed = PRVM_PROG_TO_EDICT(PRVM_allglobaledict(self));
        PRVM_ED_Print(prog, ed, NULL);
        PRVM_ED_Free (prog, ed);
-       Con_Errorf("%s OBJECT ERROR in %s:\n%s\nTip: read above for entity information\n", prog->name, PRVM_GetString(prog, prog->xfunction->s_name), string);
+       Con_Printf(CON_ERROR "%s OBJECT ERROR in %s:\n%s\nTip: read above for entity information\n", prog->name, PRVM_GetString(prog, prog->xfunction->s_name), string);
 }
 
 /*
@@ -3097,16 +3088,16 @@ static void VM_Search_Reset(prvm_prog_t *prog)
 =========
 VM_search_begin
 
-float search_begin(string pattern, float caseinsensitive, float quiet)
+float search_begin(string pattern, float caseinsensitive, float quiet[, string packfile])
 =========
 */
 void VM_search_begin(prvm_prog_t *prog)
 {
        int handle;
-       const char *pattern;
+       const char *packfile = NULL, *pattern;
        int caseinsens, quiet;
 
-       VM_SAFEPARMCOUNT(3, VM_search_begin);
+       VM_SAFEPARMCOUNTRANGE(3, 4, VM_search_begin);
 
        pattern = PRVM_G_STRING(OFS_PARM0);
 
@@ -3115,6 +3106,10 @@ void VM_search_begin(prvm_prog_t *prog)
        caseinsens = (int)PRVM_G_FLOAT(OFS_PARM1);
        quiet = (int)PRVM_G_FLOAT(OFS_PARM2);
 
+       // optional packfile parameter (DP_QC_FS_SEARCH_PACKFILE)
+       if(prog->argc >= 4)
+               packfile = PRVM_G_STRING(OFS_PARM3);
+
        for(handle = 0; handle < PRVM_MAX_OPENSEARCHES; handle++)
                if(!prog->opensearches[handle])
                        break;
@@ -3126,7 +3121,7 @@ void VM_search_begin(prvm_prog_t *prog)
                return;
        }
 
-       if(!(prog->opensearches[handle] = FS_Search(pattern,caseinsens, quiet)))
+       if(!(prog->opensearches[handle] = FS_Search(pattern,caseinsens, quiet, packfile)))
                PRVM_G_FLOAT(OFS_RETURN) = -1;
        else
        {