int SendEntity; // ssqc
int Version; // ssqc
int alpha; // ssqc / csqc
+ int allowtouchwithowner;
int ammo_cells1; // ssqc - Dissolution of Eternity mission pack
int ammo_lava_nails; // ssqc - Dissolution of Eternity mission pack
int ammo_multi_rockets; // ssqc - Dissolution of Eternity mission pack
// server and client qc use a lot of similar fields, so this is combined
prog->fieldoffsets.SendEntity = PRVM_ED_FindFieldOffset("SendEntity");
prog->fieldoffsets.Version = PRVM_ED_FindFieldOffset("Version");
+ prog->fieldoffsets.allowtouchwithowner = PRVM_ED_FindFieldOffset("allowtouchwithowner");
prog->fieldoffsets.alpha = PRVM_ED_FindFieldOffset("alpha");
prog->fieldoffsets.ammo_cells1 = PRVM_ED_FindFieldOffset("ammo_cells1");
prog->fieldoffsets.ammo_lava_nails = PRVM_ED_FindFieldOffset("ammo_lava_nails");
{ev_entity, "nodrawtoclient"},
{ev_entity, "tag_entity"},
{ev_entity, "viewmodelforclient"},
+ {ev_float, "allowtouchwithowner"},
{ev_float, "alpha"},
{ev_float, "ammo_cells1"},
{ev_float, "ammo_lava_nails"},
int numtouchedicts;
prvm_edict_t *touchedicts[MAX_EDICTS];
+ // Get Allow Touch with Owner
+ int nAllowTouchWithOwner = PRVM_EDICTFIELDVALUE(passedict, prog->fieldoffsets.allowtouchwithowner)->_int;
+
VectorCopy(start, clipstart);
VectorCopy(end, clipend);
VectorCopy(mins, clipmins);
if (passedict == touch)
continue;
// don't clip owned entities against owner
- if (traceowner == touch)
+ if (!nAllowTouchWithOwner && traceowner == touch)
continue;
// don't clip owner against owned entities
- if (passedictprog == touch->fields.server->owner)
+ if (!nAllowTouchWithOwner && passedictprog == touch->fields.server->owner)
continue;
// don't clip points against points (they can't collide)
if (pointtrace && VectorCompare(touch->fields.server->mins, touch->fields.server->maxs) && (type != MOVE_MISSILE || !((int)touch->fields.server->flags & FL_MONSTER)))
"DP_SND_STEREOWAV "
"DP_SOLIDCORPSE "
"DP_SPRITE32 "
+"DP_SV_ALLOWTOUCHWITHOWNER "
"DP_SV_BOTCLIENT "
"DP_SV_CLIENTCOLORS "
"DP_SV_CLIENTNAME "