]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - csprogs.c
added RF_FULLBRIGHT and RF_NOSHADOW renderflags for CSQC
[xonotic/darkplaces.git] / csprogs.c
index a30dd109d3ffe7bf8e6e139b0a579d97d9f7b7c4..ff127451a2712c0db12ee34c29b74fc6de44ba24 100644 (file)
--- a/csprogs.c
+++ b/csprogs.c
@@ -176,6 +176,7 @@ qboolean CSQC_AddRenderEdict(prvm_edict_t *ed, int edictnum)
                r_refdef.scene.entities[r_refdef.scene.numentities++] = entrender;
                entrender->entitynumber = edictnum;
                //entrender->shadertime = 0; // shadertime was set by spawn()
+               entrender->flags = 0;
                entrender->alpha = 1;
                entrender->scale = 1;
                VectorSet(entrender->colormod, 1, 1, 1);
@@ -255,7 +256,6 @@ qboolean CSQC_AddRenderEdict(prvm_edict_t *ed, int edictnum)
                if(renderflags & RF_NOCULL)             entrender->flags |= RENDER_NOCULL;
                if(renderflags & RF_DEPTHHACK)  entrender->flags |= RENDER_NODEPTHTEST;
                if(renderflags & RF_ADDITIVE)           entrender->flags |= RENDER_ADDITIVE;
-
        }
 
        c = (int)ed->fields.client->colormap;
@@ -270,7 +270,7 @@ qboolean CSQC_AddRenderEdict(prvm_edict_t *ed, int edictnum)
        // either fullbright or lit
        if(!r_fullbright.integer)
        {
-               if (!(entrender->effects & EF_FULLBRIGHT))
+               if (!(entrender->effects & EF_FULLBRIGHT) && !(renderflags & RF_FULLBRIGHT))
                        entrender->flags |= RENDER_LIGHT;
                else if(r_equalize_entities_fullbright.integer)
                        entrender->flags |= RENDER_LIGHT | RENDER_EQUALIZE;
@@ -278,6 +278,7 @@ qboolean CSQC_AddRenderEdict(prvm_edict_t *ed, int edictnum)
        // hide player shadow during intermission or nehahra movie
        if (!(entrender->effects & (EF_NOSHADOW | EF_ADDITIVE | EF_NODEPTHTEST))
         &&  (entrender->alpha >= 1)
+        && !(renderflags & RF_NOSHADOW)
         && !(entrender->flags & RENDER_VIEWMODEL)
         && (!(entrender->flags & RENDER_EXTERIORMODEL) || (!cl.intermission && cls.protocol != PROTOCOL_NEHAHRAMOVIE && !cl_noplayershadow.integer)))
                entrender->flags |= RENDER_SHADOW;
@@ -670,7 +671,7 @@ void CSQC_ReadEntities (void)
                {
                        entnum = MSG_ReadShort();
                        if(!entnum || msg_badread)
-                               return;
+                               break;
                        realentnum = entnum & 0x7FFF;
                        prog->globals.client->self = cl.csqc_server2csqcentitynumber[realentnum];
                        if(entnum & 0x8000)
@@ -798,7 +799,7 @@ void Cmd_ClearCsqcFuncs (void);
 
 // returns true if the packet is valid, false if end of file is reached
 // used for dumping the CSQC download into demo files
-qboolean MakeDownloadPacket(const char *filename, unsigned char *data, unsigned long len, int crc, int cnt, sizebuf_t *buf, int protocol)
+qboolean MakeDownloadPacket(const char *filename, unsigned char *data, size_t len, int crc, int cnt, sizebuf_t *buf, int protocol)
 {
        int packetsize = buf->maxsize - 7; // byte short long
        int npackets = (len + packetsize - 1) / (packetsize);
@@ -810,7 +811,7 @@ qboolean MakeDownloadPacket(const char *filename, unsigned char *data, unsigned
        if(cnt == 0)
        {
                MSG_WriteByte(buf, svc_stufftext);
-               MSG_WriteString(buf, va("\ncl_downloadbegin %lu %s\n", len, filename));
+               MSG_WriteString(buf, va("\ncl_downloadbegin %lu %s\n", (unsigned long)len, filename));
                return true;
        }
        else if(cnt >= 1 && cnt <= npackets)
@@ -830,7 +831,7 @@ qboolean MakeDownloadPacket(const char *filename, unsigned char *data, unsigned
        else if(cnt == npackets + 1)
        {
                MSG_WriteByte(buf, svc_stufftext);
-               MSG_WriteString(buf, va("\ncl_downloadfinished %lu %d\n", len, crc));
+               MSG_WriteString(buf, va("\ncl_downloadfinished %lu %d\n", (unsigned long)len, crc));
                return true;
        }
        return false;
@@ -867,7 +868,7 @@ void CL_VM_Init (void)
        }
        if (csprogsdata)
        {
-               csprogsdatacrc = CRC_Block(csprogsdata, csprogsdatasize);
+               csprogsdatacrc = CRC_Block(csprogsdata, (size_t)csprogsdatasize);
                if (csprogsdatacrc != requiredcrc || csprogsdatasize != requiredsize)
                {
                        if (cls.demoplayback)
@@ -955,7 +956,7 @@ void CL_VM_Init (void)
                        i = 0;
 
                        CL_CutDemo(&demobuf, &demofilesize);
-                       while(MakeDownloadPacket(csqc_progname.string, csprogsdata, csprogsdatasize, csprogsdatacrc, i++, &sb, cls.protocol))
+                       while(MakeDownloadPacket(csqc_progname.string, csprogsdata, (size_t)csprogsdatasize, csprogsdatacrc, i++, &sb, cls.protocol))
                                CL_WriteDemoMessage(&sb);
                        CL_PasteDemo(&demobuf, &demofilesize);