Merge branch 'rvz1-crashfix' into 'next'
Fix crash on mapload when removing Dragonbomber with Lua See merge request STJr/SRB2!545
This commit is contained in:
commit
184d04e6d5
|
@ -14712,20 +14712,35 @@ void A_DragonWing(mobj_t *actor)
|
||||||
void A_DragonSegment(mobj_t *actor)
|
void A_DragonSegment(mobj_t *actor)
|
||||||
{
|
{
|
||||||
mobj_t *target = actor->target;
|
mobj_t *target = actor->target;
|
||||||
fixed_t dist = P_AproxDistance(P_AproxDistance(actor->x - target->x, actor->y - target->y), actor->z - target->z);
|
fixed_t dist;
|
||||||
fixed_t radius = actor->radius + target->radius;
|
fixed_t radius;
|
||||||
angle_t hangle = R_PointToAngle2(target->x, target->y, actor->x, actor->y);
|
angle_t hangle;
|
||||||
angle_t zangle = R_PointToAngle2(0, target->z, dist, actor->z);
|
angle_t zangle;
|
||||||
fixed_t hdist = P_ReturnThrustX(target, zangle, radius);
|
fixed_t hdist;
|
||||||
fixed_t xdist = P_ReturnThrustX(target, hangle, hdist);
|
fixed_t xdist;
|
||||||
fixed_t ydist = P_ReturnThrustY(target, hangle, hdist);
|
fixed_t ydist;
|
||||||
fixed_t zdist = P_ReturnThrustY(target, zangle, radius);
|
fixed_t zdist;
|
||||||
|
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (LUA_CallAction("A_DragonSegment", actor))
|
if (LUA_CallAction("A_DragonSegment", actor))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (target == NULL || !target->health)
|
||||||
|
{
|
||||||
|
P_RemoveMobj(actor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dist = P_AproxDistance(P_AproxDistance(actor->x - target->x, actor->y - target->y), actor->z - target->z);
|
||||||
|
radius = actor->radius + target->radius;
|
||||||
|
hangle = R_PointToAngle2(target->x, target->y, actor->x, actor->y);
|
||||||
|
zangle = R_PointToAngle2(0, target->z, dist, actor->z);
|
||||||
|
hdist = P_ReturnThrustX(target, zangle, radius);
|
||||||
|
xdist = P_ReturnThrustX(target, hangle, hdist);
|
||||||
|
ydist = P_ReturnThrustY(target, hangle, hdist);
|
||||||
|
zdist = P_ReturnThrustY(target, zangle, radius);
|
||||||
|
|
||||||
actor->angle = hangle;
|
actor->angle = hangle;
|
||||||
P_TeleportMove(actor, target->x + xdist, target->y + ydist, target->z + zdist);
|
P_TeleportMove(actor, target->x + xdist, target->y + ydist, target->z + zdist);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue