diff --git a/src/g_game.c b/src/g_game.c index e4fd7d209..2d927d158 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -261,7 +261,7 @@ INT32 stealtime = TICRATE/2; INT32 sneakertime = TICRATE + (TICRATE/3); INT32 itemtime = 8*TICRATE; INT32 bubbletime = TICRATE/2; -INT32 comebacktime = 10*TICRATE; +INT32 comebacktime = 3*TICRATE; INT32 bumptime = 6; INT32 greasetics = 3*TICRATE; INT32 wipeoutslowtime = 20; diff --git a/src/k_battle.c b/src/k_battle.c index c4902fb05..4b8bf219a 100644 --- a/src/k_battle.c +++ b/src/k_battle.c @@ -469,16 +469,15 @@ void K_RunPaperItemSpawners(void) firstUnspawnedEmerald ); } - else if (P_RandomChance(FRACUNIT/3)) + else { drop = K_SpawnSphereBox( spotList[r]->x, spotList[r]->y, spotList[r]->z + (128 * mapobjectscale * flip), FixedAngle(P_RandomRange(0, 359) * FRACUNIT), flip, 10 ); - } - else - { + K_FlipFromObject(drop, spotList[r]); + drop = K_CreatePaperItem( spotList[r]->x, spotList[r]->y, spotList[r]->z + (128 * mapobjectscale * flip), FixedAngle(P_RandomRange(0, 359) * FRACUNIT), flip, diff --git a/src/k_kart.c b/src/k_kart.c index 53426531a..bd6924e12 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1721,6 +1721,7 @@ static void K_UpdateDraft(player_t *player) { fixed_t topspd = K_GetKartSpeed(player, false); fixed_t draftdistance; + fixed_t minDist; UINT8 leniency; UINT8 i; @@ -1740,6 +1741,13 @@ static void K_UpdateDraft(player_t *player) draftdistance = FixedMul(draftdistance, K_GetKartGameSpeedScalar(gamespeed)); } + minDist = 640 * player->mo->scale; + if (gametype == GT_BATTLE) + { + // TODO: gametyperules + minDist /= 4; + } + // On the contrary, the leniency period biases toward high weight. // (See also: the leniency variable in K_SpawnDraftDust) leniency = (3*TICRATE)/4 + ((player->kartweight-1) * (TICRATE/4)); @@ -1798,7 +1806,7 @@ static void K_UpdateDraft(player_t *player) #ifndef EASYDRAFTTEST // TOO close to draft. - if (dist < FixedMul(RING_DIST>>1, player->mo->scale)) + if (dist < minDist) continue; // Not close enough to draft. @@ -2866,6 +2874,13 @@ static void K_GetKartBoostPower(player_t *player) { // 30% - 44%, each point of speed adds 1.75% fixed_t draftspeed = ((3*FRACUNIT)/10) + ((player->kartspeed-1) * ((7*FRACUNIT)/400)); + + if (gametype == GT_BATTLE) + { + // TODO: gametyperules + draftspeed *= 2; + } + speedboost += FixedMul(draftspeed, player->draftpower); // (Drafting suffers no boost stack penalty.) numboosts++; } @@ -2962,11 +2977,18 @@ UINT16 K_GetKartFlashing(player_t *player) { UINT16 tics = flashingtics; - if (!player) + if (gametype == GT_BATTLE) + { + // TODO: gametyperules + return 1; + } + + if (player == NULL) + { return tics; + } tics += (tics/8) * (player->kartspeed); - return tics; } @@ -3459,13 +3481,14 @@ void K_HandleBumperChanges(player_t *player, UINT8 prevBumpers) karmahitbox->destscale = player->mo->destscale; P_SetScale(karmahitbox, player->mo->scale); + player->karmadelay = comebacktime; + if (netgame) { CONS_Printf(M_GetText("%s lost all of their bumpers!\n"), player_names[player-players]); } } - player->karmadelay = comebacktime; K_CalculateBattleWanted(); K_CheckBumpers(); } diff --git a/src/k_terrain.c b/src/k_terrain.c index f0a5347ea..44b8b3163 100644 --- a/src/k_terrain.c +++ b/src/k_terrain.c @@ -312,16 +312,13 @@ terrain_t *K_GetTerrainForTextureNum(INT32 textureNum) --------------------------------------------------*/ terrain_t *K_GetTerrainForFlatNum(INT32 flatID) { - levelflat_t *levelFlat = NULL; - if (flatID < 0 || flatID >= (signed)numlevelflats) { // Clearly invalid floor... return NULL; } - levelFlat = &levelflats[flatID]; - return K_GetTerrainForTextureName(levelFlat->name); + return levelflats[flatID].terrain; } /*-------------------------------------------------- diff --git a/src/p_setup.c b/src/p_setup.c index bf64566b7..853fdd30c 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -661,6 +661,9 @@ flatfound: levelflat->u.flat.baselumpnum = LUMPERROR; } + levelflat->terrain = + K_GetTerrainForTextureName(levelflat->name); + CONS_Debug(DBG_SETUP, "flat #%03d: %s\n", atoi(sizeu1(numlevelflats)), levelflat->name); return ( numlevelflats++ ); @@ -4225,7 +4228,9 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) return true; // If so... - G_PreLevelTitleCard(); + // but not if joining because the fade may time us out + if (!fromnetsave) + G_PreLevelTitleCard(); return true; } diff --git a/src/p_setup.h b/src/p_setup.h index 0a7587ec0..dfa79da14 100644 --- a/src/p_setup.h +++ b/src/p_setup.h @@ -17,6 +17,7 @@ #include "doomdata.h" #include "doomstat.h" #include "r_defs.h" +#include "k_terrain.h" // map md5, sent to players via PT_SERVERINFO extern unsigned char mapmd5[16]; @@ -71,6 +72,8 @@ typedef struct UINT16 width, height; + terrain_t *terrain; + // for flat animation INT32 animseq; // start pos. in the anim sequence INT32 numpics; diff --git a/src/p_user.c b/src/p_user.c index a5b07fbc6..f96eb80ee 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4553,7 +4553,7 @@ void P_PlayerThink(player_t *player) || (player->pflags & PF_NOCONTEST) // NO CONTEST explosion || ((gametyperules & GTR_BUMPERS) && player->bumpers <= 0 && player->karmadelay))) { - if (player->flashing > 0 && player->flashing < K_GetKartFlashing(player) + if (player->flashing > 1 && player->flashing < K_GetKartFlashing(player) && (leveltime & 1)) player->mo->renderflags |= RF_DONTDRAW; else diff --git a/src/v_video.c b/src/v_video.c index abaee0886..147e3892f 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -45,7 +45,7 @@ UINT8 *screens[5]; // screens[3] = fade screen start // screens[4] = fade screen end, postimage tempoarary buffer -consvar_t cv_ticrate = CVAR_INIT ("showfps", "No", 0, CV_YesNo, NULL); +consvar_t cv_ticrate = CVAR_INIT ("showfps", "No", CV_SAVE, CV_YesNo, NULL); static void CV_palette_OnChange(void);