I call this... the GFZ3 Unfuckening.

* GFZ3 Eggmobile's laser won't change its angle when you move left and right anymore.
    * Changed because its ability to move quickly was extremely punishing for new players (see ProJared's youtube video on the matter).
    * http://gfycat.com/PassionateUnknownAgama (the twitching on the third laser has been fixed since this was recorded)
* GFZ3 Eggmobile will, when too far away from the ground and moving upwards, slow itself down vertically.
    * This was punishing and annoying for both old and new players alike.
    * http://gfycat.com/ShabbyAncientEarthworm (old values - the typical settling height is slightly lower now)
This commit is contained in:
toasterbabe 2016-09-29 12:36:20 +01:00
parent 31d3c09d15
commit bf7ed0b9e9
2 changed files with 21 additions and 6 deletions

View file

@ -2092,12 +2092,13 @@ void A_Boss1Laser(mobj_t *actor)
if (!(actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH)) if (!(actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH))
{ {
point = P_SpawnMobj(x + P_ReturnThrustX(actor, actor->angle, actor->radius), y + P_ReturnThrustY(actor, actor->angle, actor->radius), actor->z - actor->height / 2, MT_EGGMOBILE_TARGET); point = P_SpawnMobj(x + P_ReturnThrustX(actor, actor->angle, actor->radius), y + P_ReturnThrustY(actor, actor->angle, actor->radius), actor->z - actor->height / 2, MT_EGGMOBILE_TARGET);
point->angle = actor->angle;
point->fuse = actor->tics+1; point->fuse = actor->tics+1;
P_SetTarget(&point->target, actor->target); P_SetTarget(&point->target, actor->target);
P_SetTarget(&actor->target, point); P_SetTarget(&actor->target, point);
} }
} }
else if (actor->target && !(actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH)) else if (actor->target && actor->target->type != MT_EGGMOBILE_TARGET && !(actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH))
actor->angle = R_PointToAngle2(x, y, actor->target->x, actor->target->y); actor->angle = R_PointToAngle2(x, y, actor->target->x, actor->target->y);
if (actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH) if (actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH)
@ -2148,11 +2149,16 @@ void A_Boss1Laser(mobj_t *actor)
// var1: // var1:
// 0 - accelerative focus with friction // 0 - accelerative focus with friction
// 1 - steady focus with fixed movement speed // 1 - steady focus with fixed movement speed
// var2 = unused // anything else - don't move
// var2:
// 0 - don't trace target, just move forwards
// & 1 - change horizontal angle
// & 2 - change vertical angle
// //
void A_FocusTarget(mobj_t *actor) void A_FocusTarget(mobj_t *actor)
{ {
INT32 locvar1 = var1; INT32 locvar1 = var1;
INT32 locvar2 = var2;
#ifdef HAVE_BLUA #ifdef HAVE_BLUA
if (LUA_CallAction("A_FocusTarget", actor)) if (LUA_CallAction("A_FocusTarget", actor))
return; return;
@ -2161,9 +2167,9 @@ void A_FocusTarget(mobj_t *actor)
if (actor->target) if (actor->target)
{ {
fixed_t speed = FixedMul(actor->info->speed, actor->scale); fixed_t speed = FixedMul(actor->info->speed, actor->scale);
fixed_t dist = R_PointToDist2(actor->x, actor->y, actor->target->x, actor->target->y); fixed_t dist = (locvar2 ? R_PointToDist2(actor->x, actor->y, actor->target->x, actor->target->y) : speed+1);
angle_t vangle = R_PointToAngle2(actor->z , 0, actor->target->z + (actor->target->height>>1), dist); angle_t hangle = ((locvar2 & 1) ? R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y) : actor->angle);
angle_t hangle = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y); angle_t vangle = ((locvar2 & 2) ? R_PointToAngle2(actor->z , 0, actor->target->z + (actor->target->height>>1), dist) : ANGLE_90);
switch(locvar1) switch(locvar1)
{ {
case 0: case 0:

View file

@ -4436,7 +4436,16 @@ static void P_Boss1Thinker(mobj_t *mobj)
return; return;
} }
if (mobj->state != &states[mobj->info->spawnstate] && mobj->health > 0 && mobj->flags & MF_FLOAT && !(mobj->flags2 & MF2_SKULLFLY)) if (mobj->flags2 & MF2_SKULLFLY)
{
if (P_MobjFlip(mobj)*mobj->momz > 0
&& ((mobj->eflags & MFE_VERTICALFLIP
&& (mobj->z+mobj->height) < (mobj->ceilingz-(2*mobj->height)))
|| (!(mobj->eflags & MFE_VERTICALFLIP)
&& mobj->z > (mobj->floorz+(2*mobj->height)))))
mobj->momz = FixedMul(mobj->momz, 60000);
}
else if (mobj->state != &states[mobj->info->spawnstate] && mobj->health > 0 && mobj->flags & MF_FLOAT)
mobj->momz = FixedMul(mobj->momz,7*FRACUNIT/8); mobj->momz = FixedMul(mobj->momz,7*FRACUNIT/8);
if (mobj->state == &states[mobj->info->meleestate] if (mobj->state == &states[mobj->info->meleestate]