diff --git a/src/info.c b/src/info.c index 6e4d381190e4121b1ade8d629ad478e7649f4868..39dcdf6548515b456e957302a136c682cc0475e3 100644 --- a/src/info.c +++ b/src/info.c @@ -12066,7 +12066,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass 0, // damage sfx_s3k90, // activesound - MF_SOLID|MF_NOGRAVITY|MF_RUNSPAWNFUNC|MF_PAPERCOLLISION, // flags + MF_SOLID|MF_NOGRAVITY|MF_RUNSPAWNFUNC|MF_PAPERCOLLISION|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, diff --git a/src/p_map.c b/src/p_map.c index 906ca8c519fb62a883d9eff6db7460c3c9dcea5e..abd4174d67c1748a65266082e64f55183a295f37 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -844,7 +844,7 @@ static boolean PIT_CheckThing(mobj_t *thing) angle_t ang = R_PointToAngle2(0, 0, dx, dy) - thing->angle; fixed_t s = FINESINE((ang >> ANGLETOFINESHIFT) & FINEMASK); S_StartSound(tmthing, thing->info->activesound); - thing->extravalue2 += FixedMul(s, dm); + thing->extravalue2 += 2*FixedMul(s, dm)/3; return true; } } diff --git a/src/p_mobj.c b/src/p_mobj.c index 7163dbe79f3c9184714dfcb1bfee57f2ad5a6cb6..d9210441ac8a609e6fd9c21583978c57ce535668 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8536,6 +8536,7 @@ void P_MobjThinker(mobj_t *mobj) fixed_t s0 = -96*FINESINE(fa); angle_t fma; fixed_t c, s; + angle_t angdiff; // Adjust angular speed fixed_t da = AngleFixed(mobj->angle - oang); @@ -8546,6 +8547,18 @@ void P_MobjThinker(mobj_t *mobj) // Update angle mobj->angle += FixedAngle(mobj->extravalue2); + angdiff = mobj->angle - FixedAngle(mobj->extravalue1); + if (angdiff > (ANGLE_90 - ANG2) && angdiff < ANGLE_180) + { + mobj->angle = FixedAngle(mobj->extravalue1) + (ANGLE_90 - ANG2); + mobj->extravalue2 /= 2; + } + else if (angdiff < (ANGLE_270 + ANG2) && angdiff >= ANGLE_180) + { + mobj->angle = FixedAngle(mobj->extravalue1) + (ANGLE_270 + ANG2); + mobj->extravalue2 /= 2; + } + // Update position fma = (mobj->angle >> ANGLETOFINESHIFT) & FINEMASK; c = 48*FINECOSINE(fma);