diff --git a/src/objects/random-item.c b/src/objects/random-item.c index 5e07c6de5..fc5159487 100644 --- a/src/objects/random-item.c +++ b/src/objects/random-item.c @@ -18,6 +18,7 @@ #include "../r_defs.h" #include "../k_battle.h" #include "../m_random.h" +#include "../k_specialstage.h" // specialstageinfo #define FLOAT_HEIGHT ( 12 * FRACUNIT ) #define FLOAT_TIME ( 2 * TICRATE ) @@ -115,9 +116,13 @@ void Obj_RandomItemVisuals(mobj_t *mobj) // // Then extraval1 starts ticking up and triggers the transformation from Ringbox to Random Item. if (mobj->fuse == 0 && !(mobj->flags & MF_NOCLIPTHING) && !(mobj->flags2 & MF2_AMBUSH) - && !cv_thunderdome.value && !(modeattacking & ATTACKING_SPB)) + && !cv_thunderdome.value && (modeattacking == 0)) { mobj->extravalue1++; + + if (specialstageinfo.valid) // Players need ammo in Special, transform to RANDOMITEM right away! + mobj->extravalue1 = max(mobj->extravalue1, RINGBOX_TIME); + if (mobj->extravalue1 == RINGBOX_TIME) { // Sync the position in RINGBOX and RANDOMITEM animations. diff --git a/src/p_inter.c b/src/p_inter.c index e779150cc..fb21ddac8 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -207,7 +207,8 @@ static void P_ItemPop(mobj_t *actor) Obj_SpawnItemDebrisEffects(actor, actor->target); - P_SetMobjState(actor, S_RINGBOX1); + if (!specialstageinfo.valid) // In Special, you'll respawn as a Ring Box (random-item.c), don't confuse the player. + P_SetMobjState(actor, S_RINGBOX1); actor->extravalue1 = 0; // de-solidify