mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
When snatching orbitals, remove item from owner
This commit is contained in:
parent
8fcf835330
commit
572f3bc006
3 changed files with 49 additions and 42 deletions
|
|
@ -17257,6 +17257,7 @@ boolean K_TryPickMeUp(mobj_t *m1, mobj_t *m2, boolean allowHostile)
|
||||||
|
|
||||||
K_AddHitLag(victim, 3, false);
|
K_AddHitLag(victim, 3, false);
|
||||||
|
|
||||||
|
P_UpdateRemovedOrbital(inflictor, victim, victim);
|
||||||
P_RemoveMobj(inflictor);
|
P_RemoveMobj(inflictor);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1775,6 +1775,51 @@ boolean P_CheckRacers(void)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void P_UpdateRemovedOrbital(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
||||||
|
{
|
||||||
|
// SRB2kart
|
||||||
|
// I wish I knew a better way to do this
|
||||||
|
if (!P_MobjWasRemoved(target->target) && target->target->player && !P_MobjWasRemoved(target->target->player->mo))
|
||||||
|
{
|
||||||
|
if ((target->target->player->itemflags & IF_EGGMANOUT) && target->type == MT_EGGMANITEM_SHIELD)
|
||||||
|
target->target->player->itemflags &= ~IF_EGGMANOUT;
|
||||||
|
|
||||||
|
if (target->target->player->itemflags & IF_ITEMOUT)
|
||||||
|
{
|
||||||
|
if ((target->type == MT_BANANA_SHIELD && target->target->player->itemtype == KITEM_BANANA) // trail items
|
||||||
|
|| (target->type == MT_SSMINE_SHIELD && target->target->player->itemtype == KITEM_MINE)
|
||||||
|
|| (target->type == MT_DROPTARGET_SHIELD && target->target->player->itemtype == KITEM_DROPTARGET)
|
||||||
|
|| (target->type == MT_SINK_SHIELD && target->target->player->itemtype == KITEM_KITCHENSINK))
|
||||||
|
{
|
||||||
|
if (target->movedir != 0 && target->movedir < (UINT16)target->target->player->itemamount)
|
||||||
|
{
|
||||||
|
if (target->target->hnext && !P_MobjWasRemoved(target->target->hnext))
|
||||||
|
K_KillBananaChain(target->target->hnext, inflictor, source);
|
||||||
|
target->target->player->itemamount = 0;
|
||||||
|
}
|
||||||
|
else if (target->target->player->itemamount)
|
||||||
|
target->target->player->itemamount--;
|
||||||
|
}
|
||||||
|
else if ((target->type == MT_ORBINAUT_SHIELD && target->target->player->itemtype == KITEM_ORBINAUT) // orbit items
|
||||||
|
|| (target->type == MT_JAWZ_SHIELD && target->target->player->itemtype == KITEM_JAWZ))
|
||||||
|
{
|
||||||
|
if (target->target->player->itemamount)
|
||||||
|
target->target->player->itemamount--;
|
||||||
|
if (target->lastlook != 0)
|
||||||
|
{
|
||||||
|
K_RepairOrbitChain(target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!target->target->player->itemamount)
|
||||||
|
target->target->player->itemflags &= ~IF_ITEMOUT;
|
||||||
|
|
||||||
|
if (target->target->hnext == target)
|
||||||
|
P_SetTarget(&target->target->hnext, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Kills an object.
|
/** Kills an object.
|
||||||
*
|
*
|
||||||
* \param target The victim.
|
* \param target The victim.
|
||||||
|
|
@ -1826,47 +1871,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
||||||
|
|
||||||
//K_SetHitLagForObjects(target, inflictor, source, MAXHITLAGTICS, true);
|
//K_SetHitLagForObjects(target, inflictor, source, MAXHITLAGTICS, true);
|
||||||
|
|
||||||
// SRB2kart
|
P_UpdateRemovedOrbital(target, inflictor, source);
|
||||||
// I wish I knew a better way to do this
|
|
||||||
if (!P_MobjWasRemoved(target->target) && target->target->player && !P_MobjWasRemoved(target->target->player->mo))
|
|
||||||
{
|
|
||||||
if ((target->target->player->itemflags & IF_EGGMANOUT) && target->type == MT_EGGMANITEM_SHIELD)
|
|
||||||
target->target->player->itemflags &= ~IF_EGGMANOUT;
|
|
||||||
|
|
||||||
if (target->target->player->itemflags & IF_ITEMOUT)
|
|
||||||
{
|
|
||||||
if ((target->type == MT_BANANA_SHIELD && target->target->player->itemtype == KITEM_BANANA) // trail items
|
|
||||||
|| (target->type == MT_SSMINE_SHIELD && target->target->player->itemtype == KITEM_MINE)
|
|
||||||
|| (target->type == MT_DROPTARGET_SHIELD && target->target->player->itemtype == KITEM_DROPTARGET)
|
|
||||||
|| (target->type == MT_SINK_SHIELD && target->target->player->itemtype == KITEM_KITCHENSINK))
|
|
||||||
{
|
|
||||||
if (target->movedir != 0 && target->movedir < (UINT16)target->target->player->itemamount)
|
|
||||||
{
|
|
||||||
if (target->target->hnext && !P_MobjWasRemoved(target->target->hnext))
|
|
||||||
K_KillBananaChain(target->target->hnext, inflictor, source);
|
|
||||||
target->target->player->itemamount = 0;
|
|
||||||
}
|
|
||||||
else if (target->target->player->itemamount)
|
|
||||||
target->target->player->itemamount--;
|
|
||||||
}
|
|
||||||
else if ((target->type == MT_ORBINAUT_SHIELD && target->target->player->itemtype == KITEM_ORBINAUT) // orbit items
|
|
||||||
|| (target->type == MT_JAWZ_SHIELD && target->target->player->itemtype == KITEM_JAWZ))
|
|
||||||
{
|
|
||||||
if (target->target->player->itemamount)
|
|
||||||
target->target->player->itemamount--;
|
|
||||||
if (target->lastlook != 0)
|
|
||||||
{
|
|
||||||
K_RepairOrbitChain(target);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!target->target->player->itemamount)
|
|
||||||
target->target->player->itemflags &= ~IF_ITEMOUT;
|
|
||||||
|
|
||||||
if (target->target->hnext == target)
|
|
||||||
P_SetTarget(&target->target->hnext, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Above block does not clean up rocket sneakers when a player dies, so we need to do it here target->target is null when using rocket sneakers
|
// Above block does not clean up rocket sneakers when a player dies, so we need to do it here target->target is null when using rocket sneakers
|
||||||
if (target->player)
|
if (target->player)
|
||||||
K_DropRocketSneaker(target->player);
|
K_DropRocketSneaker(target->player);
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ typedef enum
|
||||||
THINK_MAIN,
|
THINK_MAIN,
|
||||||
THINK_MOBJ,
|
THINK_MOBJ,
|
||||||
// This is kept for backwards compat with old demos.
|
// This is kept for backwards compat with old demos.
|
||||||
THINK_DYNSLOPEDEMO,
|
THINK_DYNSLOPEDEMO,
|
||||||
|
|
||||||
// Lists after this may exist but they do not call an
|
// Lists after this may exist but they do not call an
|
||||||
// action in P_RunThinkers
|
// action in P_RunThinkers
|
||||||
|
|
@ -551,6 +551,7 @@ void P_ForceConstant(const BasicFF_t *FFInfo);
|
||||||
void P_RampConstant(const BasicFF_t *FFInfo, INT32 Start, INT32 End);
|
void P_RampConstant(const BasicFF_t *FFInfo, INT32 Start, INT32 End);
|
||||||
void P_SpecialStageDamage(player_t *player, mobj_t *inflictor, mobj_t *source);
|
void P_SpecialStageDamage(player_t *player, mobj_t *inflictor, mobj_t *source);
|
||||||
boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype);
|
boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype);
|
||||||
|
void P_UpdateRemovedOrbital(mobj_t *target, mobj_t *inflictor, mobj_t *source);
|
||||||
void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damagetype);
|
void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damagetype);
|
||||||
void P_FlingBurst(player_t *player, angle_t fa, mobjtype_t objType, tic_t objFuse, fixed_t objScale, INT32 i);
|
void P_FlingBurst(player_t *player, angle_t fa, mobjtype_t objType, tic_t objFuse, fixed_t objScale, INT32 i);
|
||||||
void P_PlayerRingBurst(player_t *player, INT32 num_rings); /// \todo better fit in p_user.c
|
void P_PlayerRingBurst(player_t *player, INT32 num_rings); /// \todo better fit in p_user.c
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue