diff --git a/src/p_mobj.c b/src/p_mobj.c index b0ce8a6d6..60a3a6409 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -5337,6 +5337,39 @@ boolean P_IsKartFieldItem(INT32 type) } } +// This item keeps track of its owner by the mobj target +boolean P_IsRelinkItem(INT32 type) +{ + switch (type) + { + case MT_POGOSPRING: + case MT_EGGMANITEM: + case MT_EGGMANITEM_SHIELD: + case MT_BANANA: + case MT_BANANA_SHIELD: + case MT_ORBINAUT: + case MT_ORBINAUT_SHIELD: + case MT_JAWZ: + case MT_JAWZ_SHIELD: + case MT_SSMINE: + case MT_SSMINE_SHIELD: + case MT_LANDMINE: + case MT_DROPTARGET: + case MT_DROPTARGET_SHIELD: + case MT_BALLHOG: + case MT_SPB: + case MT_BUBBLESHIELDTRAP: + case MT_GARDENTOP: + case MT_HYUDORO_CENTER: + case MT_SINK: + case MT_GACHABOM: + return true; + + default: + return false; + } +} + boolean K_IsMissileOrKartItem(mobj_t *mo) { if (mo->flags & MF_MISSILE) @@ -10355,7 +10388,7 @@ void P_MobjThinker(mobj_t *mobj) I_Assert(mobj != NULL); I_Assert(!P_MobjWasRemoved(mobj)); - if (P_IsKartItem(mobj->type) && mobj->target && !P_MobjWasRemoved(mobj->target)) + if (P_IsRelinkItem(mobj->type) && mobj->target && !P_MobjWasRemoved(mobj->target)) { player_t *link = mobj->target->player; if (link && playeringame[link-players] && !link->spectator) @@ -10366,7 +10399,7 @@ void P_MobjThinker(mobj_t *mobj) if (mobj->target && P_MobjWasRemoved(mobj->target)) { P_SetTarget(&mobj->target, NULL); - if (P_IsKartItem(mobj->type) && mobj->relinkplayer && mobj->relinkplayer <= MAXPLAYERS) + if (P_IsRelinkItem(mobj->type) && mobj->relinkplayer && mobj->relinkplayer <= MAXPLAYERS) { player_t *relink = &players[mobj->relinkplayer-1]; if (playeringame[relink-players] && !relink->spectator && relink->mo && !P_MobjWasRemoved(relink->mo)) diff --git a/src/p_mobj.h b/src/p_mobj.h index 353011ddf..eec956024 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -547,6 +547,7 @@ void P_AddCachedAction(mobj_t *mobj, INT32 statenum); boolean P_IsKartItem(INT32 type); boolean P_IsKartFieldItem(INT32 type); +boolean P_IsRelinkItem(INT32 type); boolean K_IsMissileOrKartItem(mobj_t *mo); boolean P_CanDeleteKartItem(INT32 type);