]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - pr_cmds.c
added GAME_NEOTERIC
[xonotic/darkplaces.git] / pr_cmds.c
index 3f33113bca6fb0a579b8fea702dd94158a26fa9e..81a618190a3fc2d6a1750f8e3ceb44402f1ab514 100644 (file)
--- a/pr_cmds.c
+++ b/pr_cmds.c
@@ -76,6 +76,7 @@ char *ENGINE_EXTENSIONS =
 "DP_EF_FLAME "
 "DP_EF_FULLBRIGHT "
 "DP_EF_NODRAW "
+"DP_EF_NOSHADOW "
 "DP_EF_RED "
 "DP_EF_STARDUST "
 "DP_ENT_ALPHA "
@@ -125,6 +126,7 @@ char *ENGINE_EXTENSIONS =
 "DP_SV_EXTERIORMODELTOCLIENT "
 "DP_SV_NODRAWTOCLIENT "
 "DP_SV_PLAYERPHYSICS "
+"DP_SV_ROTATINGBMODEL "
 "DP_SV_SETCOLOR "
 "DP_SV_SLOWMO "
 "DP_TE_BLOOD "
@@ -2608,9 +2610,9 @@ static msurface_t *getsurface(edict_t *ed, int surfnum)
        if (modelindex < 1 || modelindex >= MAX_MODELS)
                return NULL;
        model = sv.models[modelindex];
-       if (surfnum < 0 || surfnum >= model->brushq1.nummodelsurfaces)
+       if (surfnum < 0 || surfnum >= model->nummodelsurfaces)
                return NULL;
-       return model->brushq1.surfaces + surfnum + model->brushq1.firstmodelsurface;
+       return model->brushq1.surfaces + surfnum + model->firstmodelsurface;
 }
 
 
@@ -2694,9 +2696,9 @@ void PF_getsurfacenearpoint(void)
        VectorSubtract(point, ed->v->origin, p);
        best = -1;
        bestdist = 1000000000;
-       for (surfnum = 0;surfnum < model->brushq1.nummodelsurfaces;surfnum++)
+       for (surfnum = 0;surfnum < model->nummodelsurfaces;surfnum++)
        {
-               surf = model->brushq1.surfaces + surfnum + model->brushq1.firstmodelsurface;
+               surf = model->brushq1.surfaces + surfnum + model->firstmodelsurface;
                dist = PlaneDiff(p, surf->plane);
                dist = dist * dist;
                if (dist < bestdist)
@@ -2763,7 +2765,7 @@ void PF_stof(void)
 //float(string filename, float mode) fopen = #110; // opens a file inside quake/gamedir/data/ (mode is FILE_READ, FILE_APPEND, or FILE_WRITE), returns fhandle >= 0 if successful, or fhandle < 0 if unable to open file for any reason
 void PF_fopen(void)
 {
-       int filenum, mode;
+       int filenum, mode, i;
        char *modestring, *filename;
        for (filenum = 0;filenum < MAX_PRFILES;filenum++)
                if (pr_files[filenum] == NULL)
@@ -2792,17 +2794,26 @@ void PF_fopen(void)
                return;
        }
        filename = G_STRING(OFS_PARM0);
-       // .. is parent directory on many platforms
-       // / is parent directory on Amiga
+       // control characters do not cause issues with any platforms I know of, but they are usually annoying to deal with
+       // ../ is parent directory on many platforms
+       // // is parent directory on Amiga
+       // / at the beginning of a path is root on unix, and parent directory on Amiga
        // : is root of drive on Amiga (also used as a directory separator on Mac, but / works there too, so that's a bad idea)
        // \ is a windows-ism (so it's naughty to use it, / works on all platforms)
-       if ((filename[0] == '.' && filename[1] == '.') || filename[0] == '/' || strrchr(filename, ':') || strrchr(filename, '\\'))
+       for (i = 0;filename[i];i++)
        {
-               Con_Printf("PF_fopen: dangerous or non-portable filename \"%s\" not allowed. (contains : or \\ or begins with .. or /)\n", filename);
-               G_FLOAT(OFS_RETURN) = -4;
-               return;
+               if (filename[i] < ' ' || (filename[i] == '/' && filename[i+1] == '/') || (filename[i] == '.' && filename[i+1] == '.') || filename[i] == ':' || filename[i] == '\\' || filename[0] == '/')
+               {
+                       Con_Printf("PF_fopen: dangerous/confusing/annoying/non-portable filename \"%s\" not allowed. (contains control characters or // or .. or : or \\ or begins with /)\n", filename);
+                       G_FLOAT(OFS_RETURN) = -4;
+                       return;
+               }
        }
        pr_files[filenum] = FS_Open(va("data/%s", filename), modestring, false);
+
+       if (pr_files[filenum] == NULL && modestring == "rb")
+               pr_files[filenum] = FS_Open(filename, modestring, false);
+
        if (pr_files[filenum] == NULL)
                G_FLOAT(OFS_RETURN) = -1;
        else