Merge branch 'whip-thief-pt1' into 'master'

Whip thief Pt 1

See merge request kart-krew-dev/ring-racers-internal!2597
This commit is contained in:
Oni VelocitOni 2025-05-30 01:08:32 +00:00
commit 565733224f
5 changed files with 24 additions and 12 deletions

View file

@ -75,7 +75,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
if (t1->type == MT_BALLHOGBOOM && t2->type == MT_BALLHOGBOOM)
return true; // Ballhogs don't collide with eachother
if (K_TryPickMeUp(t1, t2))
if (K_TryPickMeUp(t1, t2, false))
return true;
if (t2->player)
@ -178,7 +178,7 @@ boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2)
if (t1->health <= 0 || t2->health <= 0)
return true;
if (K_TryPickMeUp(t1, t2))
if (K_TryPickMeUp(t1, t2, false))
return true;
if (!P_CanPickupItem(t2->player, PICKUP_EGGBOX))
@ -434,7 +434,7 @@ boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2)
if (t1->health <= 0 || t2->health <= 0)
return true;
if (K_TryPickMeUp(t1, t2))
if (K_TryPickMeUp(t1, t2, false))
return true;
if (t2->player)
@ -544,7 +544,7 @@ boolean K_DropTargetCollide(mobj_t *t1, mobj_t *t2)
if (t2->player && (t2->player->hyudorotimer || t2->player->justbumped))
return true;
if (K_TryPickMeUp(t1, t2))
if (K_TryPickMeUp(t1, t2, false))
return true;
if (draggeddroptarget && P_MobjWasRemoved(draggeddroptarget))
@ -1042,7 +1042,14 @@ boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim)
}
else if (victim->type == MT_DROPTARGET || victim->type == MT_DROPTARGET_SHIELD)
{
K_DropTargetCollide(victim, shield);
if (K_TryPickMeUp(attacker, victim, true))
{
shield->hitlag = attacker->hitlag; // players hitlag is handled in K_TryPickMeUp, and we need to set for the shield too
}
else
{
K_DropTargetCollide(victim, shield);
}
return true;
}
else
@ -1059,8 +1066,13 @@ boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim)
shield->extravalue1 = 1;
}
if (P_DamageMobj(victim, shield, attacker, 1, DMG_NORMAL))
if (K_TryPickMeUp(attacker, victim, true))
{
shield->hitlag = attacker->hitlag; // players hitlag is handled in K_TryPickMeUp, and we need to set for the shield too
}
else
{
P_DamageMobj(victim, shield, attacker, 1, DMG_NORMAL);
K_AddHitLag(attacker, attackerHitlag, false);
shield->hitlag = attacker->hitlag;
}
@ -1074,7 +1086,7 @@ boolean K_KitchenSinkCollide(mobj_t *t1, mobj_t *t2)
if (((t1->target == t2) || (!(t2->flags & (MF_ENEMY|MF_BOSS)) && (t1->target == t2->target))) && (t1->threshold > 0 || (t2->type != MT_PLAYER && t2->threshold > 0)))
return true;
if (K_TryPickMeUp(t1, t2))
if (K_TryPickMeUp(t1, t2, false))
return true;
if (t2->player)

View file

@ -15908,7 +15908,7 @@ static boolean K_PickUp(player_t *player, mobj_t *picked)
}
// ACHTUNG this destroys items when returning true, make sure to bail out
boolean K_TryPickMeUp(mobj_t *m1, mobj_t *m2)
boolean K_TryPickMeUp(mobj_t *m1, mobj_t *m2, boolean allowHostile)
{
if (!m1 || P_MobjWasRemoved(m1))
return false;
@ -15943,7 +15943,7 @@ boolean K_TryPickMeUp(mobj_t *m1, mobj_t *m2)
if (inflictor->target->player && G_SameTeam(inflictor->target->player, victim->player))
allied = true;
if (!allied)
if (!allied && !allowHostile)
return false;
// CONS_Printf("target check passed\n");

View file

@ -327,7 +327,7 @@ void K_BotHitPenalty(player_t *player);
boolean K_IsPickMeUpItem(mobjtype_t type);
boolean K_TryPickMeUp(mobj_t *m1, mobj_t *m2);
boolean K_TryPickMeUp(mobj_t *m1, mobj_t *m2, boolean allowHostile);
fixed_t K_TeamComebackMultiplier(player_t *player);

View file

@ -190,7 +190,7 @@ boolean Obj_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
return true;
}
if (K_TryPickMeUp(t1, t2))
if (K_TryPickMeUp(t1, t2, false))
return true;
if (t1->type == MT_GARDENTOP)

View file

@ -667,7 +667,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
if (!player->mo || player->spectator)
return;
if (K_TryPickMeUp(special, toucher))
if (K_TryPickMeUp(special, toucher, false))
return;
// attach to player!