diff --git a/src/dehacked.c b/src/dehacked.c index 8c6147424..e8f29e03e 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -5392,6 +5392,8 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_FORC19", "S_FORC20", + "S_FORC21", + "S_ELEM1", "S_ELEM2", "S_ELEM3", diff --git a/src/info.c b/src/info.c index 85630766a..42706cc8d 100644 --- a/src/info.c +++ b/src/info.c @@ -2121,6 +2121,8 @@ state_t states[NUMSTATES] = {SPR_FORC, FF_TRANS50|18, 3, {NULL}, 0, 0, S_FORC20}, // S_FORC19 {SPR_FORC, FF_TRANS50|19, 3, {NULL}, 0, 0, S_FORC11}, // S_FORC20 + {SPR_FORC, FF_TRANS50|20, -1, {NULL}, 0, 0, S_NULL}, // S_FORC21 + {SPR_ELEM, FF_TRANS50 , 4, {NULL}, 0, 0, S_ELEM2 }, // S_ELEM1 {SPR_ELEM, FF_TRANS50| 1, 4, {NULL}, 0, 0, S_ELEM3 }, // S_ELEM2 {SPR_ELEM, FF_TRANS50| 2, 4, {NULL}, 0, 0, S_ELEM4 }, // S_ELEM3 @@ -10845,7 +10847,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 0, // damage sfx_None, // activesound MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags - S_NULL // raisestate + S_FORC21 // raisestate }, { // MT_ARMAGEDDON_ORB diff --git a/src/info.h b/src/info.h index 618e848c5..8624f13a0 100644 --- a/src/info.h +++ b/src/info.h @@ -2306,6 +2306,8 @@ typedef enum state S_FORC19, S_FORC20, + S_FORC21, + S_ELEM1, S_ELEM2, S_ELEM3, diff --git a/src/p_mobj.c b/src/p_mobj.c index 5af16f0ff..77952c269 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6839,12 +6839,10 @@ void P_MobjThinker(mobj_t *mobj) && (mobj->target->player->powers[pw_shield] & SH_FORCE) && */ (mobj->target->player->pflags & PF_SHIELDABILITY)) { - mobj_t *whoosh = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_GHOST); - whoosh->sprite = SPR_FORC; - whoosh->frame = 20|(tr_trans50<info->raisestate); whoosh->destscale = whoosh->scale<<1; whoosh->fuse = 10; - whoosh->tics = -1; whoosh->flags |= MF_NOCLIPHEIGHT; whoosh->height = 42*FRACUNIT; mobj->target->player->pflags &= ~PF_SHIELDABILITY; // prevent eternal whoosh diff --git a/src/p_user.c b/src/p_user.c index 18f804a9e..8b871f72b 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7008,14 +7008,13 @@ static void P_MovePlayer(player_t *player) // Force shield activation if (player->powers[pw_shield] & SH_FORCE) { -//#define PERFECTFORCESTOP player->pflags |= PF_THOKKED|PF_SHIELDABILITY; - player->mo->momx = player->mo->momy = 0; #if 1 // almost imperceptible hop for the purposes of aligning with the aura for as long as possible P_SetObjectMomZ(player->mo, -4*P_GetMobjGravity(player->mo), false); #else - player->mo->momz = 0; + player->mo->momz = // intentionally carries to post-endif line as multiple-assignment #endif + player->mo->momx = player->mo->momy = 0; S_StartSound(player->mo, sfx_ngskid); } else