diff --git a/src/doomstat.h b/src/doomstat.h index b3f64723..cf87ad97 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -445,7 +445,7 @@ extern boolean franticitems; extern boolean mirrormode; extern boolean comeback; -extern tic_t instaitemcooldown; +extern tic_t indirectitemcooldown; extern tic_t spbincoming; extern UINT8 spbplayer; diff --git a/src/g_game.c b/src/g_game.c index 4f824e2c..de47d643 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -253,9 +253,9 @@ SINT8 votes[MAXPLAYERS]; // Each player's vote SINT8 pickedvote; // What vote the host rolls // Server-sided variables -tic_t instaitemcooldown; // Cooldown before any more lightning/blue shell is awarded -tic_t spbincoming; // Timer before blue shell hits, can switch targets at this point -UINT8 spbplayer; // Player num that used the last blue shell +tic_t indirectitemcooldown; // Cooldown before any more Shrink, SPB, or any other item that works indirectly is awarded +tic_t spbincoming; // Timer before SPB hits, can switch targets at this point +UINT8 spbplayer; // Player num that used the last SPB // Client-sided variables (NEVER use in anything that needs to be synced with other players) boolean legitimateexit; // Did this client actually finish the match? diff --git a/src/k_kart.c b/src/k_kart.c index 89792566..c70d117b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -25,9 +25,9 @@ // franticitems is Frantic Mode items, bool // mirrormode is Mirror Mode (duh), bool // comeback is Battle Mode's karma comeback, also bool -// instaitemcooldown is timer before anyone's allowed another lightning/blue shell +// indirectitemcooldown is timer before anyone's allowed another Shrink/SPB // spbincoming is the timer before k_deathsentence is cast on the player in 1st -// spbplayer is the last player who fired one +// spbplayer is the last player who fired a SPB //{ SRB2kart Color Code @@ -464,6 +464,7 @@ static void K_KartGetItemResult(player_t *player, SINT8 getitem) static INT32 K_KartGetItemOdds(UINT8 pos, SINT8 item, player_t *player, boolean mashed) { + const INT32 distvar = (64*14); INT32 newodds; INT32 i; UINT8 pingame = 0, pexiting = 0; @@ -507,7 +508,7 @@ static INT32 K_KartGetItemOdds(UINT8 pos, SINT8 item, player_t *player, boolean switch (item) { case KITEM_SNEAKER: - if (!cv_sneaker.value && !modeattacking) newodds = 0; + if ((!cv_sneaker.value) && (!modeattacking)) newodds = 0; break; case KITEM_ROCKETSNEAKER: if (franticitems) newodds *= 2; @@ -517,7 +518,8 @@ static INT32 K_KartGetItemOdds(UINT8 pos, SINT8 item, player_t *player, boolean case KITEM_INVINCIBILITY: if (franticitems) newodds *= 2; if (mashed) newodds /= 2; - if (!cv_invincibility.value || player->kartstuff[k_poweritemtimer]) newodds = 0; + if ((!cv_invincibility.value) + || (player->kartstuff[k_poweritemtimer])) newodds = 0; break; case KITEM_BANANA: if (!cv_banana.value) newodds = 0; @@ -546,18 +548,23 @@ static INT32 K_KartGetItemOdds(UINT8 pos, SINT8 item, player_t *player, boolean case KITEM_SPB: if (franticitems) newodds *= 2; if (mashed) newodds /= 2; - if (!cv_selfpropelledbomb.value || pexiting <= 0 - || (secondist <= (64*14)*4) || instaitemcooldown) newodds = 0; + if ((!cv_selfpropelledbomb.value) + || (indirectitemcooldown > 0) + || (pexiting > 0) + || (secondist <= distvar*4)) newodds = 0; break; case KITEM_GROW: if (franticitems) newodds *= 2; if (mashed) newodds /= 2; - if (!cv_grow.value || player->kartstuff[k_poweritemtimer]) newodds = 0; + if ((!cv_grow.value) + || (player->kartstuff[k_poweritemtimer])) newodds = 0; break; case KITEM_SHRINK: if (franticitems) newodds *= 2; if (mashed) newodds /= 2; - if (!cv_shrink.value || pingame-1 <= pexiting || instaitemcooldown) newodds = 0; + if ((!cv_shrink.value) + || (indirectitemcooldown > 0) + || (pingame-1 <= pexiting)) newodds = 0; break; case KITEM_LIGHTNINGSHIELD: if (franticitems) newodds *= 2; @@ -2213,31 +2220,19 @@ void K_DoSneaker(player_t *player, boolean doPFlag) static void K_DoShrink(player_t *player) { - mobj_t *mo; - thinker_t *think; - //INT32 i; + INT32 i; //S_StartSound(player->mo, sfx_bkpoof); // Sound the BANG! player->pflags |= PF_ATTACKDOWN; - /*for (i = 0; i < MAXPLAYERS; i++) + for (i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i]) - P_FlashPal(&players[i], PAL_NUKE, 10); - }*/ + /*if (playeringame[i]) + P_FlashPal(&players[i], PAL_NUKE, 10);*/ - for (think = thinkercap.next; think != &thinkercap; think = think->next) - { - if (think->function.acp1 != (actionf_p1)P_MobjThinker) - continue; // not a mobj thinker - - mo = (mobj_t *)think; - - if (mo->player && !mo->player->spectator - && mo->player->kartstuff[k_position] < player->kartstuff[k_position]) - P_DamageMobj(mo, player->mo, player->mo, 64); - else - continue; + if (playeringame[i] && players[i].mo && !player->spectator + && players[i].kartstuff[k_position] < player->kartstuff[k_position]) + P_DamageMobj(players[i].mo, player->mo, player->mo, 64); } K_PlayTauntSound(player->mo); @@ -3257,6 +3252,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) if (!cv_kartstarsfx.value && !P_IsLocalPlayer(player)) S_StartSound(player->mo, sfx_kgrow); K_PlayTauntSound(player->mo); + player->mo->scalespeed = FRACUNIT/TICRATE; player->mo->destscale = 3*(mapheaderinfo[gamemap-1]->mobj_scale)/2; player->kartstuff[k_growshrinktimer] = itemtime; S_StartSound(player->mo, sfx_kc5a); diff --git a/src/p_inter.c b/src/p_inter.c index 9b2cf4c8..37920f2e 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3117,6 +3117,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da K_SpinPlayer(player, source); // Start shrinking! + player->mo->scalespeed = FRACUNIT/TICRATE; player->mo->destscale = 6*(mapheaderinfo[gamemap-1]->mobj_scale)/8; player->kartstuff[k_growshrinktimer] -= (100+20*(16-(player->kartstuff[k_position]))); } @@ -3127,6 +3128,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da } // Invincible or not, we still need this. //P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_LIGHTNING); + S_StartSound(player->mo, sfx_kc59); return true; } @@ -3136,7 +3138,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da if (player == source->player) return false; // Just need to do this now! Being thrown upwards is done by the explosion. - P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUELIGHTNING); + //P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUELIGHTNING); blueexplode = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUEEXPLOSION); P_SetTarget(&blueexplode->target, source); return true; diff --git a/src/p_saveg.c b/src/p_saveg.c index d375f693..763f24e2 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -3255,7 +3255,7 @@ static void P_NetArchiveMisc(void) WRITEUINT8(save_p, franticitems); WRITEUINT8(save_p, comeback); - WRITEUINT32(save_p, instaitemcooldown); + WRITEUINT32(save_p, indirectitemcooldown); WRITEUINT32(save_p, spbincoming); WRITEUINT8(save_p, spbplayer); @@ -3352,7 +3352,7 @@ static inline boolean P_NetUnArchiveMisc(void) franticitems = (boolean)READUINT8(save_p); comeback = (boolean)READUINT8(save_p); - instaitemcooldown = READUINT32(save_p); + indirectitemcooldown = READUINT32(save_p); spbincoming = READUINT32(save_p); spbplayer = READUINT8(save_p); diff --git a/src/p_setup.c b/src/p_setup.c index 5cd82a70..575452e9 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -3003,7 +3003,7 @@ boolean P_SetupLevel(boolean skipprecip) comeback = cv_kartcomeback.value; } - instaitemcooldown = 0; + indirectitemcooldown = 0; spbincoming = 0; spbplayer = 0; diff --git a/src/p_tick.c b/src/p_tick.c index bcedf1f6..57574d6f 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -706,8 +706,8 @@ void P_Ticker(boolean run) players[hurtthisguy].kartstuff[k_deathsentence] = TICRATE+1; } - if (instaitemcooldown) - instaitemcooldown--; + if (indirectitemcooldown) + indirectitemcooldown--; if (quake.time) {