VM_SAFEPARMCOUNT(1, VM_remove);
ed = PRVM_G_EDICT(OFS_PARM0);
- if( PRVM_NUM_FOR_EDICT(ed) <= prog->reserved_edicts ) {
+ if( PRVM_NUM_FOR_EDICT(ed) <= prog->reserved_edicts )
+ {
Con_DPrint( "VM_remove: tried to remove the null entity or a reserved entity!\n" );
- } else if( ed->priv.required->free ) {
+ if (developer.integer >= 1)
+ PRVM_PrintState();
+ }
+ else if( ed->priv.required->free )
+ {
Con_DPrint( "VM_remove: tried to remove an already freed entity!\n" );
- } else {
- PRVM_ED_Free (ed);
+ if (developer.integer >= 1)
+ PRVM_PrintState();
}
+ else
+ PRVM_ED_Free (ed);
// if (ed == prog->edicts)
// PRVM_ERROR ("remove: tried to remove world");
// if (PRVM_NUM_FOR_EDICT(ed) <= sv.maxclients)
f = PRVM_G_INT(OFS_PARM1);
s = PRVM_G_STRING(OFS_PARM2);
- if (!s || !s[0])
- {
- // return reserved edict 0 (could be used for whatever the prog wants)
- VM_RETURN_EDICT(prog->edicts);
- return;
- }
+ // LordHavoc: apparently BloodMage does a find(world, weaponmodel, "") and
+ // expects it to find all the monsters, so we must be careful to support
+ // searching for ""
+ if (!s)
+ s = "";
for (e++ ; e < prog->num_edicts ; e++)
{
continue;
t = PRVM_E_STRING(ed,f);
if (!t)
- continue;
+ t = "";
if (!strcmp(t,s))
{
VM_RETURN_EDICT(ed);
f = PRVM_G_INT(OFS_PARM0);
s = PRVM_G_STRING(OFS_PARM1);
- if (!s || !s[0])
- {
- VM_RETURN_EDICT(prog->edicts);
- return;
- }
+
+ // LordHavoc: apparently BloodMage does a find(world, weaponmodel, "") and
+ // expects it to find all the monsters, so we must be careful to support
+ // searching for ""
+ if (!s)
+ s = "";
ent = PRVM_NEXT_EDICT(prog->edicts);
for (i = 1;i < prog->num_edicts;i++, ent = PRVM_NEXT_EDICT(ent))
continue;
t = PRVM_E_STRING(ent,f);
if (!t)
- continue;
+ t = "";
if (strcmp(t,s))
continue;
ed = PRVM_EDICT_NUM(e);
if (ed->priv.required->free)
continue;
+ if (!PRVM_E_FLOAT(ed,f))
+ continue;
if ((int)PRVM_E_FLOAT(ed,f) & s)
{
VM_RETURN_EDICT(ed);
prog->xfunction->builtinsprofile++;
if (ent->priv.required->free)
continue;
+ if (!PRVM_E_FLOAT(ent,f))
+ continue;
if (!((int)PRVM_E_FLOAT(ent,f) & s))
continue;
OS_MAC - not supported
*/
-#ifdef _WIN32
+#ifdef WIN32
PRVM_G_FLOAT(OFS_RETURN) = 0;
-#elif defined _MAC
+#elif defined(MACOSX)
PRVM_G_FLOAT(OFS_RETURN) = 2;
#else
PRVM_G_FLOAT(OFS_RETURN) = 1;
vm_polygons_initialized = true;
}
-void VM_DrawPolygonCallback (const entity_render_t *ent, int surfacenumber, const rtlight_t *rtlight)
+void VM_DrawPolygonCallback (const entity_render_t *ent, const rtlight_t *rtlight, int numsurfaces, int *surfacelist)
{
- const vm_polygon_t *p = &vm_polygons[surfacenumber];
- int flags = p->flags & 0x0f;
+ int surfacelistindex;
+ // LordHavoc: FIXME: this is stupid code
+ for (surfacelistindex = 0;surfacelistindex < numsurfaces;surfacelistindex++)
+ {
+ const vm_polygon_t *p = &vm_polygons[surfacelist[surfacelistindex]];
+ int flags = p->flags & 0x0f;
- if(flags == DRAWFLAG_ADDITIVE)
- GL_BlendFunc(GL_SRC_ALPHA, GL_ONE);
- else if(flags == DRAWFLAG_MODULATE)
- GL_BlendFunc(GL_DST_COLOR, GL_ZERO);
- else if(flags == DRAWFLAG_2XMODULATE)
- GL_BlendFunc(GL_DST_COLOR,GL_SRC_COLOR);
- else
- GL_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ if(flags == DRAWFLAG_ADDITIVE)
+ GL_BlendFunc(GL_SRC_ALPHA, GL_ONE);
+ else if(flags == DRAWFLAG_MODULATE)
+ GL_BlendFunc(GL_DST_COLOR, GL_ZERO);
+ else if(flags == DRAWFLAG_2XMODULATE)
+ GL_BlendFunc(GL_DST_COLOR,GL_SRC_COLOR);
+ else
+ GL_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- R_Mesh_TexBind(0, R_GetTexture(p->tex));
+ R_Mesh_TexBind(0, R_GetTexture(p->tex));
- //[515]: is speed is max ?
- if(p->flags & VM_POLYGON_FLLINES) //[515]: lines
- {
- qglLineWidth(p->data[13]);
- qglBegin(GL_LINE_LOOP);
- qglTexCoord1f (p->data[12]);
- qglColor4f (p->data[20], p->data[21], p->data[22], p->data[23]);
- qglVertex3f (p->data[0] , p->data[1], p->data[2]);
+ CHECKGLERROR
+ //[515]: is speed is max ?
+ if(p->flags & VM_POLYGON_FLLINES) //[515]: lines
+ {
+ qglLineWidth(p->data[13]);CHECKGLERROR
+ qglBegin(GL_LINE_LOOP);
+ qglTexCoord1f (p->data[12]);
+ qglColor4f (p->data[20], p->data[21], p->data[22], p->data[23]);
+ qglVertex3f (p->data[0] , p->data[1], p->data[2]);
- qglTexCoord1f (p->data[14]);
- qglColor4f (p->data[24], p->data[25], p->data[26], p->data[27]);
- qglVertex3f (p->data[3] , p->data[4], p->data[5]);
+ qglTexCoord1f (p->data[14]);
+ qglColor4f (p->data[24], p->data[25], p->data[26], p->data[27]);
+ qglVertex3f (p->data[3] , p->data[4], p->data[5]);
- if(p->flags & VM_POLYGON_FL3V)
- {
- qglTexCoord1f (p->data[16]);
+ if(p->flags & VM_POLYGON_FL3V)
+ {
+ qglTexCoord1f (p->data[16]);
+ qglColor4f (p->data[28], p->data[29], p->data[30], p->data[31]);
+ qglVertex3f (p->data[6] , p->data[7], p->data[8]);
+
+ if(p->flags & VM_POLYGON_FL4V)
+ {
+ qglTexCoord1f (p->data[18]);
+ qglColor4f (p->data[32], p->data[33], p->data[34], p->data[35]);
+ qglVertex3f (p->data[9] , p->data[10], p->data[11]);
+ }
+ }
+ qglEnd();
+ CHECKGLERROR
+ }
+ else
+ {
+ qglBegin(GL_POLYGON);
+ qglTexCoord2f (p->data[12], p->data[13]);
+ qglColor4f (p->data[20], p->data[21], p->data[22], p->data[23]);
+ qglVertex3f (p->data[0] , p->data[1], p->data[2]);
+
+ qglTexCoord2f (p->data[14], p->data[15]);
+ qglColor4f (p->data[24], p->data[25], p->data[26], p->data[27]);
+ qglVertex3f (p->data[3] , p->data[4], p->data[5]);
+
+ qglTexCoord2f (p->data[16], p->data[17]);
qglColor4f (p->data[28], p->data[29], p->data[30], p->data[31]);
qglVertex3f (p->data[6] , p->data[7], p->data[8]);
if(p->flags & VM_POLYGON_FL4V)
{
- qglTexCoord1f (p->data[18]);
+ qglTexCoord2f (p->data[18], p->data[19]);
qglColor4f (p->data[32], p->data[33], p->data[34], p->data[35]);
qglVertex3f (p->data[9] , p->data[10], p->data[11]);
}
- }
- qglEnd();
- }
- else
- {
- qglBegin(GL_POLYGON);
- qglTexCoord2f (p->data[12], p->data[13]);
- qglColor4f (p->data[20], p->data[21], p->data[22], p->data[23]);
- qglVertex3f (p->data[0] , p->data[1], p->data[2]);
-
- qglTexCoord2f (p->data[14], p->data[15]);
- qglColor4f (p->data[24], p->data[25], p->data[26], p->data[27]);
- qglVertex3f (p->data[3] , p->data[4], p->data[5]);
-
- qglTexCoord2f (p->data[16], p->data[17]);
- qglColor4f (p->data[28], p->data[29], p->data[30], p->data[31]);
- qglVertex3f (p->data[6] , p->data[7], p->data[8]);
-
- if(p->flags & VM_POLYGON_FL4V)
- {
- qglTexCoord2f (p->data[18], p->data[19]);
- qglColor4f (p->data[32], p->data[33], p->data[34], p->data[35]);
- qglVertex3f (p->data[9] , p->data[10], p->data[11]);
- }
- qglEnd();
+ qglEnd();
+ CHECKGLERROR
+ }
}
}
if(!vm_drawpolygons_num)
return;
for(i = 0;i < vm_drawpolygons_num;i++)
- R_MeshQueue_Add(VM_DrawPolygonCallback, NULL, i, NULL);
+ VM_DrawPolygonCallback(NULL, NULL, i, NULL);
vm_drawpolygons_num = 0;
}