]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - csprogs.c
added r_drawfog cvar at esteel's request
[xonotic/darkplaces.git] / csprogs.c
index 8627ea8f050b1b7261e3c44f079e07c411c0552f..525f497aa6243d354ae19fb3be22a86b872933fa 100644 (file)
--- a/csprogs.c
+++ b/csprogs.c
@@ -268,8 +268,8 @@ qboolean CL_VM_UpdateView (void)
                CSQC_SetGlobals();
                // clear renderable entity and light lists to prevent crashes if the
                // CSQC_UpdateView function does not call R_ClearScene as it should
-               r_refdef.numentities = 0;
-               r_refdef.numlights = 0;
+               r_refdef.scene.numentities = 0;
+               r_refdef.scene.numlights = 0;
                PRVM_ExecuteProgram(prog->funcoffsets.CSQC_UpdateView, "QC function CSQC_UpdateView is missing");
                //VectorCopy(oldangles, cl.viewangles);
                // Dresk : Reset Dmg Globals Here
@@ -554,21 +554,36 @@ void CSQC_ReadEntities (void)
                                        cl.csqc_server2csqcentitynumber[realentnum] = 0;
                                }
                                else
-                                       Con_Printf("Smth bad happens in csqc...\n");    //[515]: never happens ?
+                                       Con_Printf("Bad csqc_server2csqcentitynumber map\n");   //[515]: never happens ?
                        }
                        else
                        {
                                if(!prog->globals.client->self)
                                {
-                                       prvm_edict_t    *ed;
-                                       ed = PRVM_ED_Alloc();
-                                       ed->fields.client->entnum = realentnum;
-                                       prog->globals.client->self = cl.csqc_server2csqcentitynumber[realentnum] = PRVM_EDICT_TO_PROG(ed);
+                                       if(!prog->funcoffsets.CSQC_Ent_Spawn)
+                                       {
+                                               prvm_edict_t    *ed;
+                                               ed = PRVM_ED_Alloc();
+                                               ed->fields.client->entnum = realentnum;
+                                               prog->globals.client->self = cl.csqc_server2csqcentitynumber[realentnum] = PRVM_EDICT_TO_PROG(ed);
+                                       }
+                                       else
+                                       {
+                                               // entity( float entnum ) CSQC_Ent_Spawn;
+                                               // the qc function should set entnum, too (this way it also can return world [2/1/2008 Andreas]
+                                               PRVM_G_FLOAT(OFS_PARM0) = (float) realentnum;
+                                               // make sure no one gets wrong ideas
+                                               prog->globals.client->self = 0;
+                                               PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Ent_Spawn, "QC function CSQC_Ent_Spawn is missing");
+                                               prog->globals.client->self = cl.csqc_server2csqcentitynumber[realentnum] = PRVM_EDICT( PRVM_G_INT( OFS_RETURN ) );
+                                       }
                                        PRVM_G_FLOAT(OFS_PARM0) = 1;
+                                       PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Ent_Update, "QC function CSQC_Ent_Update is missing");                       
                                }
-                               else
+                               else {
                                        PRVM_G_FLOAT(OFS_PARM0) = 0;
-                               PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Ent_Update, "QC function CSQC_Ent_Update is missing");
+                                       PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Ent_Update, "QC function CSQC_Ent_Update is missing");
+                               }
                        }
                }
                prog->globals.client->self = oldself;
@@ -577,17 +592,8 @@ void CSQC_ReadEntities (void)
 
 void CL_VM_CB_BeginIncreaseEdicts(void)
 {
-       int i;
-       prvm_edict_t *ent;
-
        // links don't survive the transition, so unlink everything
-       for (i = 0, ent = prog->edicts;i < prog->max_edicts;i++, ent++)
-       {
-               if (!ent->priv.server->free)
-                       World_UnlinkEdict(prog->edicts + i);
-               memset(&ent->priv.server->areagrid, 0, sizeof(ent->priv.server->areagrid));
-       }
-       World_Clear(&cl.world);
+       World_UnlinkAll(&cl.world);
 }
 
 void CL_VM_CB_EndIncreaseEdicts(void)
@@ -750,13 +756,15 @@ void CL_VM_Init (void)
        // set time
        prog->globals.client->time = cl.time;
 
-       prog->globals.client->mapname = PRVM_SetEngineString(cl.worldmodel->name);
+       prog->globals.client->mapname = cl.worldmodel ? PRVM_SetEngineString(cl.worldmodel->name) : PRVM_SetEngineString("");
        prog->globals.client->player_localentnum = cl.playerentity;
 
        // set map description (use world entity 0)
        val = PRVM_EDICTFIELDVALUE(prog->edicts, prog->fieldoffsets.message);
        if(val)
                val->string = PRVM_SetEngineString(cl.levelname);
+       VectorCopy(cl.world.mins, prog->edicts->fields.client->mins);
+       VectorCopy(cl.world.maxs, prog->edicts->fields.client->maxs);
 
        // call the prog init
        PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Init, "QC function CSQC_Init is missing");