mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
WIP Exp math
temp changes to distribution debugger
This commit is contained in:
parent
57fb5b758c
commit
9cfa67dae6
7 changed files with 76 additions and 50 deletions
|
|
@ -497,7 +497,7 @@ struct itemroulette_t
|
|||
|
||||
UINT8 useOdds;
|
||||
UINT8 playing, exiting;
|
||||
UINT32 dist, baseDist;
|
||||
UINT32 preexpdist, preexpuseOdds, dist, baseDist;
|
||||
UINT32 firstDist, secondDist;
|
||||
UINT32 secondToFirst;
|
||||
|
||||
|
|
|
|||
|
|
@ -5698,46 +5698,53 @@ static void K_drawDistributionDebugger(void)
|
|||
|
||||
K_FillItemRouletteData(stplyr, &rouletteData, false);
|
||||
|
||||
for (i = 0; i < rouletteData.itemListLen; i++)
|
||||
{
|
||||
const kartitems_t item = static_cast<kartitems_t>(rouletteData.itemList[i]);
|
||||
UINT8 amount = 1;
|
||||
// for (i = 0; i < rouletteData.itemListLen; i++)
|
||||
// {
|
||||
// const kartitems_t item = static_cast<kartitems_t>(rouletteData.itemList[i]);
|
||||
// UINT8 amount = 1;
|
||||
|
||||
if (y > (BASEVIDHEIGHT << FRACBITS) - space - pad)
|
||||
{
|
||||
x += space;
|
||||
y = -pad;
|
||||
}
|
||||
// if (y > (BASEVIDHEIGHT << FRACBITS) - space - pad)
|
||||
// {
|
||||
// x += space;
|
||||
// y = -pad;
|
||||
// }
|
||||
|
||||
V_DrawFixedPatch(x, y, scale, V_SNAPTOTOP,
|
||||
K_GetSmallStaticCachedItemPatch(item), NULL);
|
||||
// V_DrawFixedPatch(x, y, scale, V_SNAPTOTOP,
|
||||
// K_GetSmallStaticCachedItemPatch(item), NULL);
|
||||
|
||||
// Display amount for multi-items
|
||||
amount = K_ItemResultToAmount(item);
|
||||
if (amount > 1)
|
||||
{
|
||||
V_DrawStringScaled(
|
||||
x + (18 * scale),
|
||||
y + (23 * scale),
|
||||
scale, FRACUNIT, FRACUNIT,
|
||||
V_SNAPTOTOP,
|
||||
NULL, HU_FONT,
|
||||
va("x%d", amount)
|
||||
);
|
||||
}
|
||||
// // Display amount for multi-items
|
||||
// amount = K_ItemResultToAmount(item);
|
||||
// if (amount > 1)
|
||||
// {
|
||||
// V_DrawStringScaled(
|
||||
// x + (18 * scale),
|
||||
// y + (23 * scale),
|
||||
// scale, FRACUNIT, FRACUNIT,
|
||||
// V_SNAPTOTOP,
|
||||
// NULL, HU_FONT,
|
||||
// va("x%d", amount)
|
||||
// );
|
||||
// }
|
||||
|
||||
y += space;
|
||||
}
|
||||
// y += space;
|
||||
// }
|
||||
|
||||
V_DrawString((x >> FRACBITS) + 20, 2, V_SNAPTOTOP, va("useOdds[%u]", rouletteData.useOdds));
|
||||
V_DrawString((x >> FRACBITS) + 20, 10, V_SNAPTOTOP, va("speed = %u", rouletteData.speed));
|
||||
// V_DrawString((x >> FRACBITS) + 20, 2, V_SNAPTOTOP, va("useOdds[%u]", rouletteData.useOdds));
|
||||
// V_DrawString((x >> FRACBITS) + 20, 10, V_SNAPTOTOP, va("speed = %u", rouletteData.speed));
|
||||
|
||||
// V_DrawString((x >> FRACBITS) + 20, 22, V_SNAPTOTOP, va("baseDist = %u", rouletteData.baseDist));
|
||||
// V_DrawString((x >> FRACBITS) + 20, 30, V_SNAPTOTOP, va("dist = %u", rouletteData.dist));
|
||||
|
||||
// V_DrawString((x >> FRACBITS) + 20, 42, V_SNAPTOTOP, va("firstDist = %u", rouletteData.firstDist));
|
||||
// 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));
|
||||
|
||||
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));
|
||||
|
||||
V_DrawString((x >> FRACBITS) + 20, 22, V_SNAPTOTOP, va("baseDist = %u", rouletteData.baseDist));
|
||||
V_DrawString((x >> FRACBITS) + 20, 30, V_SNAPTOTOP, va("dist = %u", rouletteData.dist));
|
||||
|
||||
V_DrawString((x >> FRACBITS) + 20, 42, V_SNAPTOTOP, va("firstDist = %u", rouletteData.firstDist));
|
||||
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));
|
||||
|
||||
#ifndef ITEM_LIST_SIZE
|
||||
Z_Free(rouletteData.itemList);
|
||||
|
|
@ -6509,11 +6516,12 @@ void K_drawKartHUD(void)
|
|||
K_drawInput();
|
||||
}
|
||||
|
||||
if (cv_kartdebugdistribution.value)
|
||||
// if (cv_kartdebugdistribution.value)
|
||||
K_drawDistributionDebugger();
|
||||
|
||||
// temp debug
|
||||
V_DrawSmallString(8, 2, V_SNAPTOTOP, va("Exp/Dist mult: %.2f", FixedToFloat(stplyr->exp)));
|
||||
V_DrawString(8, 2, V_SNAPTOTOP, va("Exp/Dist mult: %.2f", FixedToFloat(stplyr->exp)));
|
||||
// V_DrawSmallString(8, 4, V_SNAPTOTOP, va("Exp/Dist mult: %.2f", FixedToFloat(stplyr->exp)));
|
||||
|
||||
if (cv_kartdebugnodes.value)
|
||||
{
|
||||
|
|
|
|||
21
src/k_kart.c
21
src/k_kart.c
|
|
@ -12703,6 +12703,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
else
|
||||
{
|
||||
UINT32 behind = K_GetItemRouletteDistance(player, player->itemRoulette.playing);
|
||||
behind = FixedMul(behind, K_GetExpAdjustment(player));
|
||||
UINT32 behindMulti = behind / 500;
|
||||
behindMulti = min(behindMulti, 60);
|
||||
award = award * (behindMulti + 10) / 10;
|
||||
|
|
@ -14768,4 +14769,24 @@ boolean K_PlayerCanUseItem(player_t *player)
|
|||
return (player->mo->health > 0 && !player->spectator && !P_PlayerInPain(player) && !mapreset && leveltime > introtime);
|
||||
}
|
||||
|
||||
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 result = 0;
|
||||
|
||||
for (INT32 i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (!playeringame[i] || player->spectator)
|
||||
continue;
|
||||
|
||||
result -= exp_power;
|
||||
if (player->position < players[i].position)
|
||||
{
|
||||
result += FixedMul(exp_power, exp_drainrate);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//}
|
||||
|
|
|
|||
|
|
@ -288,6 +288,8 @@ boolean K_ThunderDome(void);
|
|||
|
||||
boolean K_PlayerCanUseItem(player_t *player);
|
||||
|
||||
fixed_t K_GetExpAdjustment(player_t *player);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -445,7 +445,7 @@ static UINT32 K_ScaleItemDistance(const player_t* player, UINT32 distance, UINT8
|
|||
);
|
||||
|
||||
// Distance is reduced based on the player's exp
|
||||
distance = FixedMul(distance, min(FRACUNIT, player->exp));
|
||||
// distance = FixedMul(distance, player->exp);
|
||||
|
||||
return distance;
|
||||
}
|
||||
|
|
@ -1487,7 +1487,10 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet
|
|||
|
||||
// Special cases are all handled, we can now
|
||||
// actually calculate actual item reels.
|
||||
roulette->dist = K_GetItemRouletteDistance(player, roulette->playing);
|
||||
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->useOdds = K_FindUseodds(player, roulette);
|
||||
|
||||
for (i = 1; i < NUMKARTRESULTS; i++)
|
||||
|
|
|
|||
|
|
@ -669,18 +669,14 @@ void __attribute__((optimize("O0"))) Obj_CrossCheckpoints(player_t* player, fixe
|
|||
if (player->position == 1)
|
||||
{
|
||||
player->lapPoints += 2;
|
||||
player->exp += FRACUNIT/10;
|
||||
}
|
||||
else
|
||||
{
|
||||
player->lapPoints += 1;
|
||||
player->exp += FRACUNIT/20;
|
||||
}
|
||||
}
|
||||
else if (K_IsPlayerLosing(player))
|
||||
{
|
||||
player->exp -= FRACUNIT/20;
|
||||
}
|
||||
|
||||
player->exp += K_GetExpAdjustment(player);
|
||||
|
||||
K_UpdatePowerLevels(player, player->laps, false);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2111,18 +2111,14 @@ static void K_HandleLapIncrement(player_t *player)
|
|||
if (inDuel == false && player->position == 1) // 1st place in 1v1 uses thumbs up
|
||||
{
|
||||
player->lapPoints += 2;
|
||||
player->exp += FRACUNIT/10;
|
||||
}
|
||||
else
|
||||
{
|
||||
player->lapPoints++;
|
||||
player->exp += FRACUNIT/20;
|
||||
}
|
||||
}
|
||||
else if (K_IsPlayerLosing(player))
|
||||
{
|
||||
player->exp -= FRACUNIT/20;
|
||||
}
|
||||
|
||||
player->exp += K_GetExpAdjustment(player);
|
||||
|
||||
if (player->position == 1 && !(gametyperules & GTR_CHECKPOINTS))
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue