diff --git a/src/info.c b/src/info.c index 50da228e59297b64a3ac373690535c3c42816717..40495805830902d30e2736026436933f9f91894b 100644 --- a/src/info.c +++ b/src/info.c @@ -13448,7 +13448,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // attacksound S_NULL, // painstate 12*TICRATE, // painchance (sets how long an unridden rock should last before disappearing - set to 0 to disable) - sfx_None, // painsound + sfx_s3k49, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate diff --git a/src/p_enemy.c b/src/p_enemy.c index ea09533dfdbaf1432c2643460f44f46e1292fd4b..26d079cb418c5eb5c4f59376fafc517872dff45f 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -14534,6 +14534,9 @@ void A_RolloutRock(mobj_t *actor) actor->friction = FRACUNIT; // turns out riding on solids sucks, so let's just make it easier on ourselves + if (actor->eflags & MFE_JUSTHITFLOOR) + S_StartSound(actor, actor->info->painsound); + if (actor->threshold) actor->threshold--; diff --git a/src/p_map.c b/src/p_map.c index 28c5ac9553012c60cf8c966548d2569aa7a75719..97bff8156977c2b55b2d3364fde4db5b2bb6e448 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1032,7 +1032,8 @@ static boolean PIT_CheckThing(mobj_t *thing) P_SetPlayerMobjState(tmthing, S_PLAY_WALK); tmthing->player->powers[pw_carry] = CR_ROLLOUT; P_SetTarget(&tmthing->tracer, thing); - P_SetObjectMomZ(thing, tmthing->momz, true); + if (!P_IsObjectOnGround(thing)) + thing->momz += tmthing->momz; return true; } } @@ -1063,6 +1064,7 @@ static boolean PIT_CheckThing(mobj_t *thing) thing->momy = tmthing->momy; tmthing->momx = tempmomx; tmthing->momy = tempmomy; + S_StartSound(thing, thing->info->painsound); } } diff --git a/src/p_user.c b/src/p_user.c index 080d51e5371c97ff923ea379c26e9f222501f6cc..0140bee4dec4992ede5e58c1c0c1386b82a37891 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4429,6 +4429,8 @@ void P_DoJump(player_t *player, boolean soundandstate) player->mo->momz = 9*FRACUNIT; if (P_MobjFlip(player->mo->tracer)*player->mo->tracer->momz > 0) player->mo->momz += player->mo->tracer->momz; + if (!P_IsObjectOnGround(player->mo->tracer)) + P_SetObjectMomZ(player->mo->tracer, -9*FRACUNIT, true); player->powers[pw_carry] = CR_NONE; player->mo->tracer->flags |= MF_PUSHABLE; P_SetTarget(&player->mo->tracer->tracer, NULL);