From 147f4520eca6c4143287abba2c5ccb588b0a4467 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 4 Sep 2018 19:58:20 -0400 Subject: [PATCH] Addressed some of Chrome's thoughts - Don't drag - Shield isn't visible to anyone but yourself - Projectile is twice as heavy --- src/k_kart.c | 76 +++++++++++++++++++++++++++++++--------------------- src/p_mobj.c | 5 +++- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 8d5bb02ea..930223b36 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2402,7 +2402,7 @@ static mobj_t *K_FindLastTrailMobj(player_t *player) return trail; } -static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, boolean minethrow) +static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, INT32 altthrow) { mobj_t *mo; INT32 dir, PROJSPEED; @@ -2427,14 +2427,26 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map break; } - if (minethrow) + if (altthrow) { - if (player->kartstuff[k_throwdir] == 1) - dir = 2; - else if (player->kartstuff[k_throwdir] == -1 && mapthing != MT_SINK) - dir = -1; + if (altthrow == 2) // Kitchen sink throwing + { + if (player->kartstuff[k_throwdir] == 1) + dir = 3; + else if (player->kartstuff[k_throwdir] == -1) + dir = 1; + else + dir = 2; + } else - dir = 1; + { + if (player->kartstuff[k_throwdir] == 1) + dir = 2; + else if (player->kartstuff[k_throwdir] == -1) + dir = -1; + else + dir = 1; + } } else { @@ -2485,7 +2497,7 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map { player->kartstuff[k_bananadrag] = 0; // RESET timer, for multiple bananas - if (dir == 1 || dir == 2) + if (dir > 0) { // Shoot forward mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, mapthing); @@ -2498,15 +2510,10 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map if (mo) { angle_t fa = player->mo->angle>>ANGLETOFINESHIFT; - INT32 HEIGHT; + INT32 HEIGHT = (20 + (dir*10))*(mapheaderinfo[gamemap-1]->mobj_scale) + player->mo->momz; - if (dir == 2) - HEIGHT = 40*(mapheaderinfo[gamemap-1]->mobj_scale) + player->mo->momz; - else - HEIGHT = 30*(mapheaderinfo[gamemap-1]->mobj_scale) + player->mo->momz; - - mo->momx = player->mo->momx + FixedMul(FINECOSINE(fa), PROJSPEED); - mo->momy = player->mo->momy + FixedMul(FINESINE(fa), PROJSPEED); + mo->momx = player->mo->momx + FixedMul(FINECOSINE(fa), (altthrow == 2 ? 2*PROJSPEED/3 : PROJSPEED)); + mo->momy = player->mo->momy + FixedMul(FINESINE(fa), (altthrow == 2 ? 2*PROJSPEED/3 : PROJSPEED)); mo->momz = P_MobjFlip(player->mo) * HEIGHT; if (player->mo->eflags & MFE_VERTICALFLIP) @@ -2991,7 +2998,8 @@ static void K_MoveHeldObjects(player_t *player) mobj_t *cur = player->mo->hnext; mobj_t *targ = player->mo; - if (P_IsObjectOnGround(player->mo) && player->speed > 0) + if (P_IsObjectOnGround(player->mo) && player->speed > 0 + && player->mo->hnext->type != MT_SINK_SHIELD) // Sink ignores debuff, and is only visible to the owner. More of a HUD indicator than an actual shield. { player->kartstuff[k_bananadrag]++; if (player->kartstuff[k_bananadrag] > TICRATE) @@ -3006,14 +3014,19 @@ static void K_MoveHeldObjects(player_t *player) { const fixed_t radius = FixedHypot(targ->radius, targ->radius) + FixedHypot(cur->radius, cur->radius); angle_t ang; - fixed_t targx; - fixed_t targy; - fixed_t targz; - fixed_t speed; - fixed_t dist; + fixed_t targx, targy, targz; + fixed_t speed, dist; cur->flags &= ~MF_NOCLIPTHING; + if (cur->type == MT_SINK_SHIELD) + { + if (P_IsLocalPlayer(player)) + cur->flags2 &= ~MF2_DONTDRAW; + else + cur->flags2 |= MF2_DONTDRAW; + } + if (!cur->health) { cur = cur->hnext; @@ -3915,7 +3928,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) // Eggman Monitor throwing else if (ATTACK_IS_DOWN && player->kartstuff[k_eggmanheld]) { - K_ThrowKartItem(player, false, MT_FAKEITEM, -1, false); + K_ThrowKartItem(player, false, MT_FAKEITEM, -1, 0); K_PlayTauntSound(player->mo); player->kartstuff[k_eggmanheld] = 0; K_CleanHnextList(player->mo); @@ -4002,7 +4015,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld]) // Banana x3 thrown { - K_ThrowKartItem(player, false, MT_BANANA, -1, false); + K_ThrowKartItem(player, false, MT_BANANA, -1, 0); K_PlayTauntSound(player->mo); player->kartstuff[k_itemamount]--; K_UpdateHnextList(player); @@ -4062,7 +4075,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld]) // Orbinaut x3 thrown { - K_ThrowKartItem(player, true, MT_ORBINAUT, 1, false); + K_ThrowKartItem(player, true, MT_ORBINAUT, 1, 0); K_PlayTauntSound(player->mo); player->kartstuff[k_itemamount]--; K_UpdateHnextList(player); @@ -4103,9 +4116,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else if (ATTACK_IS_DOWN && HOLDING_ITEM && player->kartstuff[k_itemheld]) // Jawz thrown { if (player->kartstuff[k_throwdir] == 1 || player->kartstuff[k_throwdir] == 0) - K_ThrowKartItem(player, true, MT_JAWZ, 1, false); + K_ThrowKartItem(player, true, MT_JAWZ, 1, 0); else if (player->kartstuff[k_throwdir] == -1) // Throwing backward gives you a dud that doesn't home in - K_ThrowKartItem(player, true, MT_JAWZ_DUD, -1, false); + K_ThrowKartItem(player, true, MT_JAWZ_DUD, -1, 0); K_PlayTauntSound(player->mo); player->kartstuff[k_itemamount]--; K_UpdateHnextList(player); @@ -4130,7 +4143,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld]) { - K_ThrowKartItem(player, false, MT_SSMINE, 1, true); + K_ThrowKartItem(player, false, MT_SSMINE, 1, 1); K_PlayTauntSound(player->mo); player->kartstuff[k_itemamount]--; player->kartstuff[k_itemheld] = 0; @@ -4141,7 +4154,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) { player->kartstuff[k_itemamount]--; - K_ThrowKartItem(player, true, MT_BALLHOG, 1, false); + K_ThrowKartItem(player, true, MT_BALLHOG, 1, 0); S_StartSound(player->mo, sfx_mario7); K_PlayTauntSound(player->mo); } @@ -4243,7 +4256,8 @@ void K_MoveKartPlayer(player_t *player, boolean onground) { mobj_t *mo; player->kartstuff[k_itemheld] = 1; - S_StartSound(player->mo, sfx_s254); + if (P_IsLocalPlayer(player)) + S_StartSound(player->mo, sfx_s254); mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_SINK_SHIELD); if (mo) { @@ -4257,7 +4271,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } else if (ATTACK_IS_DOWN && HOLDING_ITEM && player->kartstuff[k_itemheld]) // Sink thrown { - K_ThrowKartItem(player, false, MT_SINK, 1, true); + K_ThrowKartItem(player, false, MT_SINK, 1, 2); K_PlayTauntSound(player->mo); player->kartstuff[k_itemamount]--; player->kartstuff[k_itemheld] = 0; diff --git a/src/p_mobj.c b/src/p_mobj.c index d22ce3e7c..fb6eed541 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1404,8 +1404,11 @@ fixed_t P_GetMobjGravity(mobj_t *mo) case MT_BANANA: case MT_FAKEITEM: case MT_SSMINE: - case MT_SINK: gravityadd = FixedMul(gravityadd, 5*FRACUNIT/2); + break; + case MT_SINK: + gravityadd = FixedMul(gravityadd, 5*FRACUNIT); // Double gravity + break; default: break; }