diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 55920f755..4ee6e65c0 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -5739,12 +5739,21 @@ static void K_drawDistributionDebugger(void) // V_DrawString((x >> FRACBITS) + 20, 50, V_SNAPTOTOP, va("secondDist = %u", rouletteData.secondDist)); // V_DrawString((x >> FRACBITS) + 20, 58, V_SNAPTOTOP, va("secondToFirst = %u", rouletteData.secondToFirst)); + if (rouletteData.preexpuseOdds > rouletteData.useOdds) + { + V_DrawString((x >> FRACBITS) + 20, 10, V_SNAPTOTOP, va("items NERFED %u -> %u", rouletteData.preexpuseOdds, rouletteData.useOdds)); + } + else if (rouletteData.preexpuseOdds < rouletteData.useOdds) + { + V_DrawString((x >> FRACBITS) + 20, 10, V_SNAPTOTOP, va("items BOOSTED %u -> %u", rouletteData.preexpuseOdds, rouletteData.useOdds)); + } + + /* V_DrawString((x >> FRACBITS) + 20, 10, V_SNAPTOTOP, va("pre-exp dist %u", rouletteData.preexpdist)); V_DrawString((x >> FRACBITS) + 20, 18, V_SNAPTOTOP, va("pre-exp useOdds %u", rouletteData.preexpuseOdds)); V_DrawString((x >> FRACBITS) + 20, 26, V_SNAPTOTOP, va(" dist %u", rouletteData.dist)); V_DrawString((x >> FRACBITS) + 20, 34, V_SNAPTOTOP, va(" useOdds %u", rouletteData.useOdds)); - - + */ #ifndef ITEM_LIST_SIZE Z_Free(rouletteData.itemList); diff --git a/src/k_kart.c b/src/k_kart.c index a35682bdd..b9e7b0179 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4091,7 +4091,7 @@ boolean K_Overdrive(player_t *player) S_StartSound(player->mo, sfx_cdfm35); S_StartSound(player->mo, sfx_cdfm13); - player->overdrive += (player->amps)*3; + player->overdrive += (player->amps)*5; player->overshield += (player->amps)*2; player->overdrivepower = FRACUNIT; @@ -4112,7 +4112,7 @@ boolean K_DefensiveOverdrive(player_t *player) S_StartSound(player->mo, sfx_cdfm35); S_StartSound(player->mo, sfx_cdfm13); - player->overdrive += (player->amps)*2; + player->overdrive += (player->amps)*3; player->overshield += (player->amps)*2 + TICRATE*2; player->overdrivepower = FRACUNIT; @@ -14771,21 +14771,29 @@ boolean K_PlayerCanUseItem(player_t *player) fixed_t K_GetExpAdjustment(player_t *player) { - fixed_t exp_power = 1*FRACUNIT/100; // adjust to change overall xp volatility - fixed_t exp_drainrate = 995*FRACUNIT/1000; // adjust to change overall item chaos + fixed_t exp_power = 3*FRACUNIT/100; // adjust to change overall xp volatility + fixed_t exp_stablerate = 3*FRACUNIT/10; // how low is your placement before losing XP? 4*FRACUNIT/10 = top 40% of race will gain fixed_t result = 0; + INT32 live_players = 0; + + // Increase XP for each player you're beating... for (INT32 i = 0; i < MAXPLAYERS; i++) { - if (!playeringame[i] || player->spectator) + if (!playeringame[i] || players[i].spectator || player == players+i) continue; - - result -= exp_power; + + live_players++; + if (player->position < players[i].position) - { - result += FixedMul(exp_power, exp_drainrate); - } + result += exp_power; } + + // ...then take all of the XP you could possibly have earned, + // and lose it proportional to the stable rate. If you're below + // the stable threshold, this results in you losing XP. + result -= exp_power * FixedInt(FixedMul(live_players*FRACUNIT, FRACUNIT - exp_stablerate)); + return result; } diff --git a/src/k_roulette.c b/src/k_roulette.c index 20ea24e64..84ec445d4 100644 --- a/src/k_roulette.c +++ b/src/k_roulette.c @@ -1490,7 +1490,7 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet roulette->preexpdist = K_GetItemRouletteDistance(player, roulette->playing); roulette->dist = roulette->preexpdist; roulette->preexpuseOdds = K_FindUseodds(player, roulette); - roulette->dist = FixedMul(roulette->preexpdist, player->exp); + roulette->dist = FixedMul(roulette->preexpdist, max(player->exp, FRACUNIT/2)); roulette->useOdds = K_FindUseodds(player, roulette); for (i = 1; i < NUMKARTRESULTS; i++) diff --git a/src/p_inter.c b/src/p_inter.c index 5a95788d5..2032c7930 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3565,4 +3565,6 @@ void P_PlayerRingBurst(player_t *player, INT32 num_rings) { P_FlingBurst(player, fa, MT_DEBTSPIKE, 0, 3 * FRACUNIT / 2, i++); } + + K_DefensiveOverdrive(player); }