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);
|
||||
|
||||
P_UpdateRemovedOrbital(inflictor, victim, victim);
|
||||
P_RemoveMobj(inflictor);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1775,6 +1775,51 @@ boolean P_CheckRacers(void)
|
|||
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.
|
||||
*
|
||||
* \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);
|
||||
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
P_UpdateRemovedOrbital(target, inflictor, source);
|
||||
// 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)
|
||||
K_DropRocketSneaker(target->player);
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ typedef enum
|
|||
THINK_MAIN,
|
||||
THINK_MOBJ,
|
||||
// This is kept for backwards compat with old demos.
|
||||
THINK_DYNSLOPEDEMO,
|
||||
THINK_DYNSLOPEDEMO,
|
||||
|
||||
// Lists after this may exist but they do not call an
|
||||
// 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_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);
|
||||
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_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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue