]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - csprogs.c
some const fixes and type fixes found by gcc -combine
[xonotic/darkplaces.git] / csprogs.c
index 0e5bba3e87ec290f26d9a34a4a01b3219c615666..39dbc6ff664cd1adc5c4bf54dd76141cd107a4f6 100644 (file)
--- a/csprogs.c
+++ b/csprogs.c
@@ -130,7 +130,7 @@ qboolean CSQC_AddRenderEdict(prvm_edict_t *ed)
        float scale;
        prvm_eval_t *val;
        entity_render_t *entrender;
-       model_t *model;
+       dp_model_t *model;
        matrix4x4_t tagmatrix, matrix2;
 
        model = CL_GetModelFromEdict(ed);
@@ -243,6 +243,7 @@ qboolean CL_VM_InputEvent (qboolean down, int key, int ascii)
                else
                {
                        prog->globals.client->time = cl.time;
+                       prog->globals.client->self = cl.csqc_server2csqcentitynumber[cl.playerentity];
                        PRVM_G_FLOAT(OFS_PARM0) = !down; // 0 is down, 1 is up
                        PRVM_G_FLOAT(OFS_PARM1) = key;
                        PRVM_G_FLOAT(OFS_PARM2) = ascii;
@@ -265,6 +266,7 @@ qboolean CL_VM_UpdateView (void)
        CSQC_BEGIN
                //VectorCopy(cl.viewangles, oldangles);
                prog->globals.client->time = cl.time;
+               prog->globals.client->self = cl.csqc_server2csqcentitynumber[cl.playerentity];
                CSQC_SetGlobals();
                // clear renderable entity and light lists to prevent crashes if the
                // CSQC_UpdateView function does not call R_ClearScene as it should
@@ -289,6 +291,7 @@ qboolean CL_VM_ConsoleCommand (const char *cmd)
        if (prog->funcoffsets.CSQC_ConsoleCommand)
        {
                prog->globals.client->time = cl.time;
+               prog->globals.client->self = cl.csqc_server2csqcentitynumber[cl.playerentity];
                restorevm_tempstringsbuf_cursize = vm_tempstringsbuf.cursize;
                PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString(cmd);
                PRVM_ExecuteProgram(prog->funcoffsets.CSQC_ConsoleCommand, "QC function CSQC_ConsoleCommand is missing");
@@ -310,6 +313,7 @@ qboolean CL_VM_Parse_TempEntity (void)
        {
                t = msg_readcount;
                prog->globals.client->time = cl.time;
+               prog->globals.client->self = cl.csqc_server2csqcentitynumber[cl.playerentity];
                PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Parse_TempEntity, "QC function CSQC_Parse_TempEntity is missing");
                r = CSQC_RETURNVAL;
                if(!r)
@@ -351,6 +355,7 @@ void CL_VM_Parse_StuffCmd (const char *msg)
        if(prog->funcoffsets.CSQC_Parse_StuffCmd)
        {
                prog->globals.client->time = cl.time;
+               prog->globals.client->self = cl.csqc_server2csqcentitynumber[cl.playerentity];
                restorevm_tempstringsbuf_cursize = vm_tempstringsbuf.cursize;
                PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString(msg);
                PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Parse_StuffCmd, "QC function CSQC_Parse_StuffCmd is missing");
@@ -365,6 +370,7 @@ static void CL_VM_Parse_Print (const char *msg)
 {
        int restorevm_tempstringsbuf_cursize;
        prog->globals.client->time = cl.time;
+       prog->globals.client->self = cl.csqc_server2csqcentitynumber[cl.playerentity];
        restorevm_tempstringsbuf_cursize = vm_tempstringsbuf.cursize;
        PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString(msg);
        PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Parse_Print, "QC function CSQC_Parse_Print is missing");
@@ -409,20 +415,21 @@ void CL_VM_Parse_CenterPrint (const char *msg)
        int restorevm_tempstringsbuf_cursize;
        if(!cl.csqc_loaded)
        {
-               SCR_CenterPrint((char*)msg);
+               SCR_CenterPrint(msg);
                return;
        }
        CSQC_BEGIN
        if(prog->funcoffsets.CSQC_Parse_CenterPrint)
        {
                prog->globals.client->time = cl.time;
+               prog->globals.client->self = cl.csqc_server2csqcentitynumber[cl.playerentity];
                restorevm_tempstringsbuf_cursize = vm_tempstringsbuf.cursize;
                PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString(msg);
                PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Parse_CenterPrint, "QC function CSQC_Parse_CenterPrint is missing");
                vm_tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;
        }
        else
-               SCR_CenterPrint((char*)msg);
+               SCR_CenterPrint(msg);
        CSQC_END
 }
 
@@ -459,6 +466,7 @@ qboolean CL_VM_Event_Sound(int sound_num, int volume, int channel, float attenua
                if(prog->funcoffsets.CSQC_Event_Sound)
                {
                        prog->globals.client->time = cl.time;
+                       prog->globals.client->self = cl.csqc_server2csqcentitynumber[cl.playerentity];
                        PRVM_G_FLOAT(OFS_PARM0) = ent;
                        PRVM_G_FLOAT(OFS_PARM1) = channel;
                        PRVM_G_INT(OFS_PARM2) = PRVM_SetTempString(cl.sound_name[sound_num] );
@@ -519,6 +527,7 @@ float CL_VM_Event (float event)             //[515]: needed ? I'd say "YES", but don't know
        if(prog->funcoffsets.CSQC_Event)
        {
                prog->globals.client->time = cl.time;
+               prog->globals.client->self = cl.csqc_server2csqcentitynumber[cl.playerentity];
                PRVM_G_FLOAT(OFS_PARM0) = event;
                PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Event, "QC function CSQC_Event is missing");
                r = CSQC_RETURNVAL;
@@ -566,8 +575,6 @@ void CSQC_ReadEntities (void)
                                                ed = PRVM_ED_Alloc();
                                                ed->fields.client->entnum = realentnum;
                                                prog->globals.client->self = cl.csqc_server2csqcentitynumber[realentnum] = PRVM_EDICT_TO_PROG(ed);
-                                               PRVM_G_FLOAT(OFS_PARM0) = 1;
-                                               PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Ent_Update, "QC function CSQC_Ent_Update is missing");
                                        }
                                        else
                                        {
@@ -577,10 +584,10 @@ void CSQC_ReadEntities (void)
                                                // 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");
-                                               entnum = PRVM_G_INT(OFS_RETURN);
-                                               PRVM_CHECKEDICTNUM(entnum);
-                                               cl.csqc_server2csqcentitynumber[realentnum] = entnum;
+                                               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 {
                                        PRVM_G_FLOAT(OFS_PARM0) = 0;
@@ -594,17 +601,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)
@@ -766,14 +764,17 @@ void CL_VM_Init (void)
 
        // set time
        prog->globals.client->time = cl.time;
+       prog->globals.client->self = 0;
 
-       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");
@@ -797,6 +798,7 @@ void CL_VM_ShutDown (void)
                return;
        CSQC_BEGIN
                prog->globals.client->time = cl.time;
+               prog->globals.client->self = 0;
                if (prog->funcoffsets.CSQC_Shutdown)
                        PRVM_ExecuteProgram(prog->funcoffsets.CSQC_Shutdown, "QC function CSQC_Shutdown is missing");
                PRVM_ResetProg();