Let Drop Targets collide with other players immediately after being thrown
This commit is contained in:
parent
b8cc9020e9
commit
35a181e0db
3 changed files with 60 additions and 3 deletions
|
|
@ -514,9 +514,6 @@ boolean K_DropTargetCollide(mobj_t *t1, mobj_t *t2)
|
|||
{
|
||||
mobj_t *draggeddroptarget = (t1->type == MT_DROPTARGET_SHIELD) ? t1->target : NULL;
|
||||
|
||||
if ((t1->threshold > 0 && (!draggeddroptarget)) || (t2->threshold > 0))
|
||||
return true;
|
||||
|
||||
if (((t1->target == t2) || (t1->target == t2->target)) && (t1->threshold > 0 || (t2->type != MT_PLAYER && t2->threshold > 0)))
|
||||
return true;
|
||||
|
||||
|
|
|
|||
|
|
@ -324,6 +324,7 @@ boolean P_CheckDeathPitCollide(mobj_t *mo);
|
|||
boolean P_CheckSolidLava(ffloor_t *rover);
|
||||
void P_AdjustMobjFloorZ_FFloors(mobj_t *mo, sector_t *sector, UINT8 motype);
|
||||
|
||||
mobj_t *P_SpawnMobjFromMobjUnscaled(mobj_t *mobj, fixed_t xofs, fixed_t yofs, fixed_t zofs, mobjtype_t type);
|
||||
mobj_t *P_SpawnMobjFromMobj(mobj_t *mobj, fixed_t xofs, fixed_t yofs, fixed_t zofs, mobjtype_t type);
|
||||
|
||||
mobj_t *P_SpawnMissile(mobj_t *source, mobj_t *dest, mobjtype_t type);
|
||||
|
|
|
|||
59
src/p_mobj.c
59
src/p_mobj.c
|
|
@ -13411,6 +13411,65 @@ fixed_t P_ScaleFromMap(fixed_t n, fixed_t scale)
|
|||
return FixedMul(n, FixedDiv(scale, mapobjectscale));
|
||||
}
|
||||
|
||||
//
|
||||
// P_SpawnMobjFromMobjUnscaled
|
||||
// Spawns an object with offsets relative to the position of another object.
|
||||
// Scale, gravity flip, etc. is taken into account automatically.
|
||||
//
|
||||
mobj_t *P_SpawnMobjFromMobjUnscaled(mobj_t *mobj, fixed_t xofs, fixed_t yofs, fixed_t zofs, mobjtype_t type)
|
||||
{
|
||||
mobj_t *newmobj;
|
||||
|
||||
newmobj = P_SpawnMobj(mobj->x + xofs, mobj->y + yofs, mobj->z + zofs, type);
|
||||
if (!newmobj)
|
||||
return NULL;
|
||||
|
||||
newmobj->destscale = P_ScaleFromMap(mobj->destscale, newmobj->destscale);
|
||||
P_SetScale(newmobj, P_ScaleFromMap(mobj->scale, newmobj->scale));
|
||||
|
||||
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||
{
|
||||
newmobj->eflags |= MFE_VERTICALFLIP;
|
||||
newmobj->flags2 |= MF2_OBJECTFLIP;
|
||||
newmobj->z = mobj->z + mobj->height - zofs - newmobj->height;
|
||||
|
||||
newmobj->old_z = mobj->old_z + mobj->height - zofs - newmobj->height;
|
||||
newmobj->old_z2 = mobj->old_z2 + mobj->height - zofs - newmobj->height;
|
||||
}
|
||||
else
|
||||
{
|
||||
newmobj->old_z = mobj->old_z + zofs;
|
||||
newmobj->old_z2 = mobj->old_z2 + zofs;
|
||||
}
|
||||
|
||||
newmobj->old_x2 = mobj->old_x2 + xofs;
|
||||
newmobj->old_y2 = mobj->old_y2 + yofs;
|
||||
newmobj->old_x = mobj->old_x + xofs;
|
||||
newmobj->old_y = mobj->old_y + yofs;
|
||||
|
||||
// This angle hack is needed for Lua scripts that set the angle after
|
||||
// spawning, to avoid erroneous interpolation.
|
||||
if (mobj->player)
|
||||
{
|
||||
newmobj->old_angle2 = mobj->player->old_drawangle2;
|
||||
newmobj->old_angle = mobj->player->old_drawangle;
|
||||
}
|
||||
else
|
||||
{
|
||||
newmobj->old_angle2 = mobj->old_angle2;
|
||||
newmobj->old_angle = mobj->old_angle;
|
||||
}
|
||||
|
||||
newmobj->old_scale2 = mobj->old_scale2;
|
||||
newmobj->old_scale = mobj->old_scale;
|
||||
newmobj->old_spritexscale = mobj->old_spritexscale;
|
||||
newmobj->old_spriteyscale = mobj->old_spriteyscale;
|
||||
newmobj->old_spritexoffset = mobj->old_spritexoffset;
|
||||
newmobj->old_spriteyoffset = mobj->old_spriteyoffset;
|
||||
|
||||
return newmobj;
|
||||
}
|
||||
|
||||
//
|
||||
// P_SpawnMobjFromMobj
|
||||
// Spawns an object with offsets relative to the position of another object.
|
||||
|
|
|
|||
Loading…
Reference in a new issue