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 f73d6868..80aa32d4 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 80aa32d4..3754f7c7 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 3437f53f..e39a4662 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 6ab7d79b..8acea233 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 bcf7a8ef..ccdb36a1 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)