diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 120ffc55..0b885ab3 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -4855,9 +4855,13 @@ static void Command_RestartAudio_f(void) I_SetSfxVolume(cv_soundvolume.value); I_SetDigMusicVolume(cv_digmusicvolume.value); //I_SetMIDIMusicVolume(cv_midimusicvolume.value); + + S_StartSound(NULL, sfx_strpst); + if (Playing()) // Gotta make sure the player is in a level P_RestoreMusic(&players[consoleplayer]); - + else + S_ChangeMusicInternal("titles", looptitle); } /** Quits a game and returns to the title screen. diff --git a/src/g_game.c b/src/g_game.c index b1889566..7cf679af 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1838,6 +1838,9 @@ boolean G_Responder(event_t *ev) if (players[displayplayer].exiting) continue; + if (players[displayplayer].pflags & PF_TIMEOVER) + continue; + // I don't know if we want this actually, but I'll humor the suggestion anyway if (G_BattleGametype()) { @@ -2354,6 +2357,7 @@ void G_PlayerReborn(INT32 player) INT32 itemamount; INT32 itemroulette; INT32 roulettetype; + INT32 growshrinktimer; INT32 bumper; INT32 comebackpoints; INT32 wanted; @@ -2366,7 +2370,7 @@ void G_PlayerReborn(INT32 player) exiting = players[player].exiting; jointime = players[player].jointime; spectator = players[player].spectator; - pflags = (players[player].pflags & (PF_TIMEOVER|PF_FLIPCAM|PF_TAGIT|PF_TAGGED|PF_ANALOGMODE)); + pflags = (players[player].pflags & (PF_TIMEOVER|PF_FLIPCAM|PF_TAGIT|PF_TAGGED|PF_ANALOGMODE|PF_WANTSTOJOIN)); // As long as we're not in multiplayer, carry over cheatcodes from map to map if (!(netgame || multiplayer)) @@ -2417,6 +2421,7 @@ void G_PlayerReborn(INT32 player) roulettetype = 0; itemtype = 0; itemamount = 0; + growshrinktimer = 0; bumper = (G_BattleGametype() ? cv_kartbumpers.value : 0); comebackpoints = 0; wanted = 0; @@ -2440,6 +2445,9 @@ void G_PlayerReborn(INT32 player) itemamount = players[player].kartstuff[k_itemamount]; } + // Keep Shrink status, remove Grow status + growshrinktimer = min(players[player].kartstuff[k_growshrinktimer], 0); + bumper = players[player].kartstuff[k_bumper]; comebackpoints = players[player].kartstuff[k_comebackpoints]; wanted = players[player].kartstuff[k_wanted]; @@ -2504,6 +2512,7 @@ void G_PlayerReborn(INT32 player) p->kartstuff[k_roulettetype] = roulettetype; p->kartstuff[k_itemtype] = itemtype; p->kartstuff[k_itemamount] = itemamount; + p->kartstuff[k_growshrinktimer] = growshrinktimer; p->kartstuff[k_bumper] = bumper; p->kartstuff[k_comebackpoints] = comebackpoints; p->kartstuff[k_comebacktimer] = comebacktime; diff --git a/src/k_kart.c b/src/k_kart.c index 45b5b0ef..5f0f785b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1050,7 +1050,6 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid) mobj_t *fx; fixed_t momdifx, momdify; fixed_t distx, disty; - //fixed_t nobumpx = 0, nobumpy = 0; fixed_t dot, p; fixed_t mass1, mass2; @@ -1099,20 +1098,28 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid) momdify = FixedMul((25*mapheaderinfo[gamemap-1]->mobj_scale), normalisedy); } - /*if (mass1 == 0 && mass2 > 0) - { - nobumpx = mobj2->momx; - nobumpy = mobj2->momy; - } - else if (mass2 == 0 && mass1 > 0) - { - nobumpx = mobj1->momx; - nobumpy = mobj1->momy; - }*/ - + // Adds the OTHER player's momentum, so that it reduces the chance of you being "inside" the other object distx = (mobj1->x + mobj2->momx) - (mobj2->x + mobj1->momx); disty = (mobj1->y + mobj2->momy) - (mobj2->y + mobj1->momy); + { // Don't allow dist to get WAY too low, that it pushes you stupidly huge amounts, or backwards... + fixed_t dist = P_AproxDistance(distx, disty); + fixed_t nx = FixedDiv(distx, dist); + fixed_t ny = FixedDiv(disty, dist); + + if (P_AproxDistance(distx, disty) < (3*mobj1->radius)/4) + { + distx = FixedMul((3*mobj1->radius)/4, nx); + disty = FixedMul((3*mobj1->radius)/4, ny); + } + + if (P_AproxDistance(distx, disty) < (3*mobj2->radius)/4) + { + distx = FixedMul((3*mobj2->radius)/4, nx); + disty = FixedMul((3*mobj2->radius)/4, ny); + } + } + if (distx == 0 && disty == 0) { // if there's no distance between the 2, they're directly on top of each other, don't run this diff --git a/src/m_menu.c b/src/m_menu.c index 8db7b067..6e42504b 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -314,7 +314,7 @@ menu_t OP_SoundOptionsDef; static void M_ToggleSFX(INT32 choice); static void M_ToggleDigital(INT32 choice); //static void M_ToggleMIDI(INT32 choice); -static void M_RestartAudio(void); +//static void M_RestartAudio(void); //Misc menu_t /*OP_DataOptionsDef,*/ OP_ScreenshotOptionsDef, OP_EraseDataDef; @@ -1315,7 +1315,7 @@ static menuitem_t OP_SoundOptionsMenu[] = { {IT_KEYHANDLER|IT_STRING, NULL, "SFX", M_ToggleSFX, 10}, {IT_STRING|IT_CVAR|IT_CV_SLIDER, - NULL, "SFX Volume", &cv_soundvolume, 18}, + NULL, "SFX Volume", &cv_soundvolume, 18}, {IT_KEYHANDLER|IT_STRING, NULL, "Music", M_ToggleDigital, 30}, {IT_STRING|IT_CVAR|IT_CV_SLIDER, @@ -1330,16 +1330,16 @@ static menuitem_t OP_SoundOptionsMenu[] = NULL, "CD Volume", &cd_volume, 40}, #endif*/ - {IT_STRING|IT_CALL, NULL, "Restart Audio System", M_RestartAudio, 50}, + //{IT_STRING|IT_CALL, NULL, "Restart Audio System", M_RestartAudio, 50}, - {IT_STRING|IT_CVAR, NULL, "Reverse L/R Channels", &stereoreverse, 65}, - {IT_STRING|IT_CVAR, NULL, "Surround Sound", &surround, 75}, + {IT_STRING|IT_CVAR, NULL, "Reverse L/R Channels", &stereoreverse, 50}, + {IT_STRING|IT_CVAR, NULL, "Surround Sound", &surround, 60}, - {IT_STRING|IT_CVAR, NULL, "Chat sounds", &cv_chatnotifications, 90}, - {IT_STRING|IT_CVAR, NULL, "Character voices", &cv_kartvoices, 100}, - {IT_STRING|IT_CVAR, NULL, "Powerup Warning", &cv_kartinvinsfx, 110}, + {IT_STRING|IT_CVAR, NULL, "Chat sounds", &cv_chatnotifications, 75}, + {IT_STRING|IT_CVAR, NULL, "Character voices", &cv_kartvoices, 85}, + {IT_STRING|IT_CVAR, NULL, "Powerup Warning", &cv_kartinvinsfx, 95}, - {IT_KEYHANDLER|IT_STRING, NULL, "Sound Test", M_HandleSoundTest, 125}, + {IT_KEYHANDLER|IT_STRING, NULL, "Sound Test", M_HandleSoundTest, 110}, }; /*static menuitem_t OP_DataOptionsMenu[] = @@ -9042,25 +9042,10 @@ static void M_ToggleDigital(INT32 choice) } }*/ -static void M_RestartAudio(void) +/*static void M_RestartAudio(void) { - S_StopMusic(); - I_ShutdownMusic(); - I_ShutdownSound(); - I_StartupSound(); - I_InitMusic(); - - I_SetSfxVolume(cv_soundvolume.value); - I_SetDigMusicVolume(cv_digmusicvolume.value); - //I_SetMIDIMusicVolume(cv_midimusicvolume.value); - - S_StartSound(NULL, sfx_strpst); - - if (Playing()) // Gotta make sure the player is in a level - P_RestoreMusic(&players[consoleplayer]); - else - S_ChangeMusicInternal("titles", looptitle); -} + COM_ImmedExecute("restartaudio"); +}*/ // =============== // VIDEO MODE MENU diff --git a/src/p_map.c b/src/p_map.c index 6371c9ed..3bc9521e 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1077,7 +1077,8 @@ static boolean PIT_CheckThing(mobj_t *thing) //} - if (thing->type == MT_FALLINGROCK || tmthing->type == MT_FALLINGROCK) + if ((thing->type == MT_FALLINGROCK && (tmthing->player || tmthing->type == MT_FALLINGROCK)) + || (tmthing->type == MT_FALLINGROCK && (thing->player || thing->type == MT_FALLINGROCK))) { // see if it went over / under if (tmthing->z > thing->z + thing->height) diff --git a/src/p_user.c b/src/p_user.c index 3a65935e..e5893754 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -8166,10 +8166,13 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall fixed_t x, y, z, dist, height, viewpointx, viewpointy, camspeed, camdist, camheight, pviewheight; fixed_t pan, xpan, ypan; INT32 camrotate; - boolean camstill, cameranoclip, lookback; + boolean camstill, lookback; mobj_t *mo; - subsector_t *newsubsec; fixed_t f1, f2; +#ifndef NOCLIPCAM + boolean cameranoclip; + subsector_t *newsubsec; +#endif // We probably shouldn't move the camera if there is no player or player mobj somehow if (!player || !player->mo) @@ -8177,9 +8180,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall mo = player->mo; -#ifdef NOCLIPCAM - cameranoclip = true; // We like camera noclip! -#else +#ifndef NOCLIPCAM cameranoclip = ((player->pflags & (PF_NOCLIP|PF_NIGHTSMODE)) || (mo->flags & (MF_NOCLIP|MF_NOCLIPHEIGHT)) // Noclipping player camera noclips too!! || (leveltime < introtime)); // Kart intro cam @@ -8415,6 +8416,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall else z = mo->z + pviewheight + camheight; +#ifndef NOCLIPCAM // Disable all z-clipping for noclip cam // move camera down to move under lower ceilings newsubsec = R_IsPointInSubsector(((mo->x>>FRACBITS) + (thiscam->x>>FRACBITS))<<(FRACBITS-1), ((mo->y>>FRACBITS) + (thiscam->y>>FRACBITS))<<(FRACBITS-1)); @@ -8612,6 +8614,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (thiscam->z < thiscam->floorz && !cameranoclip) thiscam->z = thiscam->floorz; +#endif // NOCLIPCAM // point viewed by the camera // this point is just 64 unit forward the player @@ -8638,7 +8641,10 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall { thiscam->momx = x - thiscam->x; thiscam->momy = y - thiscam->y; - thiscam->momz = FixedMul(z - thiscam->z, camspeed/2); + if (splitscreen == 1) // Wide-screen needs to follow faster, due to a smaller vertical:horizontal ratio of screen space + thiscam->momz = FixedMul(z - thiscam->z, (3*camspeed)/4); + else + thiscam->momz = FixedMul(z - thiscam->z, camspeed/2); } thiscam->pan = pan;