diff --git a/src/d_player.h b/src/d_player.h index 9e59b341..6687e76c 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -275,6 +275,7 @@ typedef enum k_startimer, // Invincibility timer k_spinouttimer, // Wipe-out from a banana peel or oil slick (was "pw_bananacam") k_laserwisptimer, // The duration and relative angle of the laser + k_justbumped, // Prevent players from endlessly bumping into each other k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Star, Megashroom) // Each item needs its own power slot, for the HUD and held use diff --git a/src/k_kart.c b/src/k_kart.c index 2de5fe15..466d7483 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1128,8 +1128,6 @@ void K_KartBilliards(mobj_t *mobj1, mobj_t *mobj2, boolean bounce) mobj2->momz = newz; } -void K_KartBouncer(void) -{ // Because this is done during collision now, rmomx and rmomy need to be recalculated // so that friction doesn't immediately decide to stop the player if they're at a standstill if (mobj1->player) @@ -1360,6 +1358,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_sounds]) player->kartstuff[k_sounds]--; + if (player->kartstuff[k_justbumped]) + player->kartstuff[k_justbumped]--; + // ??? /* if (player->kartstuff[k_jmp] > 1 && onground) @@ -2020,13 +2021,13 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map switch (K_GetKartCC()) { case 50: - PROJSPEED = 85*FRACUNIT; // Avg Speed is 34 + PROJSPEED = 68*FRACUNIT; // Avg Speed is 34 break; case 150: - PROJSPEED = 120*FRACUNIT; // Avg Speed is 48 + PROJSPEED = 96*FRACUNIT; // Avg Speed is 48 break; default: - PROJSPEED = 102*FRACUNIT+FRACUNIT/2; // Avg Speed is 41 + PROJSPEED = 82*FRACUNIT; // Avg Speed is 41 break; } @@ -2129,7 +2130,7 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map if (dir == 1 || dir == 2) { // Shoot forward - mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + 80*FRACUNIT, mapthing); + mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, mapthing); mo->threshold = 10; @@ -2143,22 +2144,19 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map INT32 HEIGHT; if (dir == 2) - HEIGHT = 16*FRACUNIT + player->mo->momz; + HEIGHT = 40*FRACUNIT + player->mo->momz; else - HEIGHT = 8*FRACUNIT + player->mo->momz; + HEIGHT = 30*FRACUNIT + player->mo->momz; - if (HEIGHT > 64*FRACUNIT) - HEIGHT = 64*FRACUNIT; - - mo->momx = FixedMul(FINECOSINE(fa), PROJSPEED); - mo->momy = FixedMul(FINESINE(fa), PROJSPEED); + mo->momx = player->mo->momx + FixedMul(FINECOSINE(fa), PROJSPEED); + mo->momy = player->mo->momy + FixedMul(FINESINE(fa), PROJSPEED); mo->momz = HEIGHT; if (player->mo->eflags & MFE_VERTICALFLIP) mo->eflags |= MFE_VERTICALFLIP; } - mobj_t *throwmo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + 80*FRACUNIT, MT_FIREDITEM); + mobj_t *throwmo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, MT_FIREDITEM); P_SetTarget(&throwmo->target, player->mo); throwmo->movecount = 0; // above player } diff --git a/src/k_kart.h b/src/k_kart.h index b0ce5b7b..8e5a9186 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -15,6 +15,7 @@ UINT8 K_GetKartColorByName(const char *name); void K_RegisterKartStuff(void); +UINT8 K_GetKartCC(void); void K_KartBilliards(mobj_t *mobj1, mobj_t *mobj2, boolean bounce); void K_KartPlayerThink(player_t *player, ticcmd_t *cmd); void K_SpinPlayer(player_t *player, mobj_t *source); diff --git a/src/p_map.c b/src/p_map.c index af5cc924..389a1cbc 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1617,9 +1617,9 @@ static boolean PIT_CheckThing(mobj_t *thing) if (gametype != GT_RACE) { if (thing->player->kartstuff[k_mushroomtimer] && !(tmthing->player->kartstuff[k_mushroomtimer])) - K_StealBalloon(&thing->player, &tmthing->player); + K_StealBalloon(thing->player, tmthing->player); else if (tmthing->player->kartstuff[k_mushroomtimer] && !(thing->player->kartstuff[k_mushroomtimer])) - K_StealBalloon(&tmthing->player, &thing->player); + K_StealBalloon(tmthing->player, thing->player); } thing->player->kartstuff[k_justbumped] = 6; diff --git a/src/p_mobj.c b/src/p_mobj.c index 5950df38..7ad58e00 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1378,6 +1378,10 @@ fixed_t P_GetMobjGravity(mobj_t *mo) break; case MT_WATERDROP: gravityadd >>= 1; + case MT_BANANAITEM: + case MT_FAKEITEM: + case MT_BOMBITEM: + gravityadd = FixedMul(gravityadd, 5*FRACUNIT/2); default: break; } @@ -7686,11 +7690,11 @@ void P_MobjThinker(mobj_t *mobj) P_SpawnGhostMobj(mobj); - if (cv_kartcc.value == 50) + if (K_GetKartCC() == 50) { finalspeed = FixedMul(finalspeed, FRACUNIT-FRACUNIT/4); } - else if (cv_kartcc.value == 150) + else if (K_GetKartCC() == 150) { finalspeed = FixedMul(finalspeed, FRACUNIT+FRACUNIT/4); } @@ -7728,18 +7732,18 @@ void P_MobjThinker(mobj_t *mobj) if (leveltime % 7 == 0) S_StartSound(mobj, mobj->info->activesound); - if (cv_kartcc.value == 50) + if (K_GetKartCC() == 50) { topspeed = FixedMul(topspeed, FRACUNIT-FRACUNIT/4); distbarrier = FixedMul(distbarrier, FRACUNIT-FRACUNIT/4); } - else if (cv_kartcc.value == 150) + else if (K_GetKartCC() == 150) { topspeed = FixedMul(topspeed, FRACUNIT+FRACUNIT/4); distbarrier = FixedMul(distbarrier, FRACUNIT+FRACUNIT/4); } - if (mobj->tracer) + if (gametype == GT_RACE && mobj->tracer) { distaway = P_AproxDistance(mobj->tracer->x - mobj->x, mobj->tracer->y - mobj->y); if (distaway < distbarrier)