From 10818f254b6abdbc72d759ad68cfae55eb071a0f Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Sun, 5 Nov 2017 16:46:26 +0000 Subject: [PATCH 1/2] Minimum bounce speed --- src/k_kart.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index f73d68686..80aa32d45 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1070,6 +1070,17 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce) momdifx = mobj1->momx - mobj2->momx; momdify = mobj1->momy - mobj2->momy; + + // if the speed difference is less than this let's assume they're going proportionately faster from each other + if (P_AproxDistance(momdifx, momdify) < 25*FRACUNIT/2) + { + fixed_t momdiflength = P_AproxDistance(momdifx, momdify); + fixed_t normalisedx = FixedDiv(momdifx, momdiflength); + fixed_t normalisedy = FixedDiv(momdify, momdiflength); + momdifx = FixedMul(25*FRACUNIT/2, normalisedx); + momdify = FixedMul(25*FRACUNIT/2, normalisedy); + } + distx = mobj1->x - mobj2->x; disty = mobj1->y - mobj2->y; dot = FixedMul(momdifx, distx) + FixedMul(momdify, disty); From 351670513da2b8a862511de96e7357fb06290e1c Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Sun, 5 Nov 2017 17:15:19 +0000 Subject: [PATCH 2/2] Give explosion particle mobjs the target of who spawned it (bomb thrower, blue lightning user) So that explosion particles can trigger voice lines (and not crash) and add points for players in battle Also don't play voice lines when you hit yourself --- src/k_kart.c | 6 ++++-- src/k_kart.h | 2 +- src/p_enemy.c | 2 +- src/p_inter.c | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 80aa32d45..3754f7c79 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1613,7 +1613,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source) || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootaketimer] > 0) return; - if (source && source->player && !source->player->kartstuff[k_sounds]) + if (source && source != player->mo && source->player && !source->player->kartstuff[k_sounds]) { S_StartSound(source, sfx_hitem); source->player->kartstuff[k_sounds] = 50; @@ -1715,7 +1715,8 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju return; } -void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit) +// source is the mobj that originally threw the bomb that exploded etc. +void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source) { mobj_t *mobj; mobj_t *ghost = NULL; @@ -1795,6 +1796,7 @@ void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 mobj->flags |= MF_NOCLIPTHING; mobj->flags &= ~MF_SPECIAL; + P_SetTarget(&mobj->target, source); } } diff --git a/src/k_kart.h b/src/k_kart.h index 3437f53fd..e39a4662c 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -21,7 +21,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd); void K_SpinPlayer(player_t *player, mobj_t *source); void K_SquishPlayer(player_t *player, mobj_t *source); void K_ExplodePlayer(player_t *player, mobj_t *source); -void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit); +void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source); void K_SpawnDriftTrail(player_t *player); void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost); INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue); diff --git a/src/p_enemy.c b/src/p_enemy.c index 6ab7d79b3..8acea233c 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8253,7 +8253,7 @@ void A_BobombExplode(mobj_t *actor) type = (mobjtype_t)locvar1; for (d = 0; d < 16; d++) - K_SpawnKartExplosion(actor->x, actor->y, actor->z, actor->info->painchance + 32*FRACUNIT, 32, type, d*(ANGLE_45/4), false, false); // 32 <-> 64 + K_SpawnKartExplosion(actor->x, actor->y, actor->z, actor->info->painchance + 32*FRACUNIT, 32, type, d*(ANGLE_45/4), false, false, actor->target); // 32 <-> 64 P_SpawnMobj(actor->x, actor->y, actor->z, MT_BOMBEXPLOSIONSOUND); diff --git a/src/p_inter.c b/src/p_inter.c index bcf7a8ef0..ccdb36a11 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3092,7 +3092,8 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da { // Just need to do this now! Being thrown upwards is done by the explosion. P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUELIGHTNING); - P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUEEXPLOSION); + mobj_t *blueexplode = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUEEXPLOSION); + P_SetTarget(&blueexplode->target, source); return true; } else if (damage == 65 && player->kartstuff[k_position] > 1)