diff --git a/src/doomstat.h b/src/doomstat.h index 65548a8f..0915e138 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -412,6 +412,7 @@ extern INT32 boostealtime; extern INT32 mushroomtime; extern INT32 itemtime; extern INT32 comebacktime; +extern INT32 bumptime; extern UINT8 introtoplay; extern UINT8 creditscutscene; diff --git a/src/f_finale.c b/src/f_finale.c index 82ef23f6..83699768 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -254,7 +254,7 @@ const char *introtext[NUMINTROSCENES]; static tic_t introscenetime[NUMINTROSCENES] = { - 8*TICRATE, // KART KR(eW + 4*TICRATE, // KART KR(eW }; // custom intros diff --git a/src/f_wipe.c b/src/f_wipe.c index e45f2e85..981c10a5 100644 --- a/src/f_wipe.c +++ b/src/f_wipe.c @@ -53,8 +53,8 @@ UINT8 wipedefs[NUMWIPEDEFS] = { 99, // wipe_credits_toblack 0, // wipe_evaluation_toblack 0, // wipe_gameend_toblack - 99, // wipe_intro_toblack (hardcoded) - 99, // wipe_cutscene_toblack (hardcoded) + UINT8_MAX, // wipe_intro_toblack (hardcoded) + UINT8_MAX, // wipe_cutscene_toblack (hardcoded) 0, // wipe_specinter_toblack 0, // wipe_multinter_toblack diff --git a/src/g_game.c b/src/g_game.c index 32fb55b3..8d16ba0e 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -210,6 +210,7 @@ INT32 boostealtime = TICRATE/2; INT32 mushroomtime = TICRATE + (TICRATE/3); INT32 itemtime = 8*TICRATE; INT32 comebacktime = 10*TICRATE; +INT32 bumptime = 6; INT32 gameovertics = 15*TICRATE; diff --git a/src/info.c b/src/info.c index ec5097a6..ee8853ef 100644 --- a/src/info.c +++ b/src/info.c @@ -13264,13 +13264,13 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 8*FRACUNIT, // radius - 16*FRACUNIT, // height + 16*FRACUNIT, // radius + 32*FRACUNIT, // height 0, // display offset 4, // mass 0, // damage sfx_rocks1, // activesound - MF_PAIN|MF_BOUNCE, // flags + MF_BOUNCE, // flags S_NULL // raisestate }, diff --git a/src/k_kart.c b/src/k_kart.c index f12bb6b5..7bd27ae9 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1147,6 +1147,17 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce) || (mobj2->player && mobj2->player->playerstate != PST_LIVE)) return; + // Don't bump if you've recently bumped + if ((mobj1->player && mobj1->player->kartstuff[k_justbumped]) + || (mobj2->player && mobj1->player->kartstuff[k_justbumped])) + { + if (mobj1->player) + mobj1->player->kartstuff[k_justbumped] = bumptime; + if (mobj2->player) + mobj2->player->kartstuff[k_justbumped] = bumptime; + return; + } + if (cv_collidesounds.value == 1) { S_StartSound(mobj1, cv_collidesoundnum.value); @@ -1214,16 +1225,19 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce) // 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 + // Also set justbumped here if (mobj1->player) { mobj1->player->rmomx = mobj1->momx - mobj1->player->cmomx; mobj1->player->rmomy = mobj1->momy - mobj1->player->cmomy; + mobj1->player->kartstuff[k_justbumped] = bumptime; } if (mobj2->player) { mobj2->player->rmomx = mobj2->momx - mobj2->player->cmomx; mobj2->player->rmomy = mobj2->momy - mobj2->player->cmomy; + mobj2->player->kartstuff[k_justbumped] = bumptime; } } @@ -1924,7 +1938,8 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju if (source->player->kartstuff[k_balloon] <= 0) { source->player->kartstuff[k_comebackpoints] += 2; - CONS_Printf(M_GetText("%s bombed %s!\n"), player_names[source->player-players], player_names[player-players]); + if (netgame) + CONS_Printf(M_GetText("%s bombed %s!\n"), player_names[source->player-players], player_names[player-players]); if (source->player->kartstuff[k_comebackpoints] >= 3) K_StealBalloon(source->player, player, true); } @@ -1993,10 +2008,13 @@ void K_StealBalloon(player_t *player, player_t *victim, boolean force) return; } - if (player->kartstuff[k_balloon] <= 0) - CONS_Printf(M_GetText("%s is back in the game!\n"), player_names[player-players]); - else - CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[player-players], player_names[victim-players]); + if (netgame) + { + if (player->kartstuff[k_balloon] <= 0) + CONS_Printf(M_GetText("%s is back in the game!\n"), player_names[player-players]); + else + CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[player-players], player_names[victim-players]); + } newballoon = player->kartstuff[k_balloon]; if (newballoon <= 1) @@ -3710,10 +3728,14 @@ void K_CheckBalloons(void) UINT8 numingame = 0; INT8 winnernum = -1; +#if 0 + return; // set to 1 to test comeback mechanics while alone +#endif + if (!multiplayer) return; - if (gametype == GT_RACE) + if (gametype != GT_MATCH) return; if (gameaction == ga_completed) @@ -4812,20 +4834,15 @@ static void K_drawKartBalloonsOrKarma(void) if (stplyr->kartstuff[k_balloon] <= 0) { V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_karmasticker, colormap); - V_DrawKartString(LAPS_X+57, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/3", stplyr->kartstuff[k_comebackpoints])); + V_DrawKartString(LAPS_X+59, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/3", stplyr->kartstuff[k_comebackpoints])); } else { - if (stplyr->kartstuff[k_balloon] > 9 || cv_kartballoons.value > 9) - { + if (stplyr->kartstuff[k_balloon] > 9 && cv_kartballoons.value > 9) V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_balloonstickerwide, colormap); - V_DrawKartString(LAPS_X+45, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/%2d", stplyr->kartstuff[k_balloon], cv_kartballoons.value)); - } else - { V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_balloonsticker, colormap); - V_DrawKartString(LAPS_X+45, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/%d", stplyr->kartstuff[k_balloon], cv_kartballoons.value)); - } + V_DrawKartString(LAPS_X+47, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/%d", stplyr->kartstuff[k_balloon], cv_kartballoons.value)); } } } @@ -5064,8 +5081,6 @@ static void K_drawBattleFullscreen(void) if (splitscreen) { - scale /= 2; - if ((splitscreen == 1 && stplyr == &players[secondarydisplayplayer]) || (splitscreen > 1 && (stplyr == &players[thirddisplayplayer] || stplyr == &players[fourthdisplayplayer]))) y = 232-(stplyr->kartstuff[k_cardanimation]/2); @@ -5074,6 +5089,8 @@ static void K_drawBattleFullscreen(void) if (splitscreen > 1) { + scale /= 2; + if (stplyr == &players[secondarydisplayplayer] || stplyr == &players[fourthdisplayplayer]) x = 3*BASEVIDWIDTH/4; else @@ -5307,10 +5324,6 @@ void K_drawKartHUD(void) // Draw the timestamp K_drawKartTimestamp(); - // Draw the speedometer - // TODO: Make a better speedometer. - K_drawKartSpeedometer(); - if (!modeattacking) { // The little triple-item icons at the bottom @@ -5324,6 +5337,13 @@ void K_drawKartHUD(void) // Draw the lap counter K_drawKartLaps(); + if (!splitscreen) + { + // Draw the speedometer + // TODO: Make a better speedometer. + K_drawKartSpeedometer(); + } + if (!modeattacking) { // Draw the numerical position diff --git a/src/p_inter.c b/src/p_inter.c index 58c6c437..fb036b99 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -438,7 +438,9 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) special->tracer->player->kartstuff[k_comebackmode] = 0; special->tracer->player->kartstuff[k_comebackpoints]++; - CONS_Printf(M_GetText("%s gave an item to %s.\n"), player_names[special->tracer->player-players], player_names[player-players]); + + if (netgame) + CONS_Printf(M_GetText("%s gave an item to %s.\n"), player_names[special->tracer->player-players], player_names[player-players]); if (special->tracer->player->kartstuff[k_comebackpoints] >= 3) K_StealBalloon(special->tracer->player, player, true); diff --git a/src/p_map.c b/src/p_map.c index 0e9a6e02..2d503a4f 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1204,7 +1204,6 @@ static boolean PIT_CheckThing(mobj_t *thing) return true; } - if (thing->type == MT_POKEY) { // see if it went over / under @@ -1226,6 +1225,16 @@ static boolean PIT_CheckThing(mobj_t *thing) //} + if (thing->type == MT_FALLINGROCK || tmthing->type == MT_FALLINGROCK) + { + // see if it went over / under + if (tmthing->z > thing->z + thing->height) + return true; // overhead + if (tmthing->z + tmthing->height < thing->z) + return true; // underneath + K_KartBouncing(thing, tmthing, false); + } + if ((thing->type == MT_SPRINGSHELL || thing->type == MT_YELLOWSHELL) && thing->health > 0 && (tmthing->player || (tmthing->flags & MF_PUSHABLE)) && tmthing->health > 0) { @@ -1703,8 +1712,6 @@ static boolean PIT_CheckThing(mobj_t *thing) } } - thing->player->kartstuff[k_justbumped] = 6; - tmthing->player->kartstuff[k_justbumped] = 6; return true; } // Are you touching the side of the object you're interacting with? diff --git a/src/p_mobj.c b/src/p_mobj.c index 477cd0af..f85027cd 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8671,6 +8671,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) { case MT_PLAYER: case MT_BIGMACE: case MT_SMALLMACE: + case MT_FALLINGROCK: //case MT_RANDOMITEM: case MT_BANANAITEM: case MT_BANANASHIELD: case MT_TRIPLEBANANASHIELD1: case MT_TRIPLEBANANASHIELD2: case MT_TRIPLEBANANASHIELD3: