WIP: more EXP math

This commit is contained in:
Antonio Martinez 2024-08-18 22:19:46 -07:00
parent 9cfa67dae6
commit a8211b980f
4 changed files with 32 additions and 13 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -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++)

View file

@ -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);
}