mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-26 20:11:47 +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 useOdds;
|
||||||
UINT8 playing, exiting;
|
UINT8 playing, exiting;
|
||||||
UINT32 dist, baseDist;
|
UINT32 preexpdist, preexpuseOdds, dist, baseDist;
|
||||||
UINT32 firstDist, secondDist;
|
UINT32 firstDist, secondDist;
|
||||||
UINT32 secondToFirst;
|
UINT32 secondToFirst;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5698,46 +5698,53 @@ static void K_drawDistributionDebugger(void)
|
||||||
|
|
||||||
K_FillItemRouletteData(stplyr, &rouletteData, false);
|
K_FillItemRouletteData(stplyr, &rouletteData, false);
|
||||||
|
|
||||||
for (i = 0; i < rouletteData.itemListLen; i++)
|
// for (i = 0; i < rouletteData.itemListLen; i++)
|
||||||
{
|
// {
|
||||||
const kartitems_t item = static_cast<kartitems_t>(rouletteData.itemList[i]);
|
// const kartitems_t item = static_cast<kartitems_t>(rouletteData.itemList[i]);
|
||||||
UINT8 amount = 1;
|
// UINT8 amount = 1;
|
||||||
|
|
||||||
if (y > (BASEVIDHEIGHT << FRACBITS) - space - pad)
|
// if (y > (BASEVIDHEIGHT << FRACBITS) - space - pad)
|
||||||
{
|
// {
|
||||||
x += space;
|
// x += space;
|
||||||
y = -pad;
|
// y = -pad;
|
||||||
}
|
// }
|
||||||
|
|
||||||
V_DrawFixedPatch(x, y, scale, V_SNAPTOTOP,
|
// V_DrawFixedPatch(x, y, scale, V_SNAPTOTOP,
|
||||||
K_GetSmallStaticCachedItemPatch(item), NULL);
|
// K_GetSmallStaticCachedItemPatch(item), NULL);
|
||||||
|
|
||||||
// Display amount for multi-items
|
// // Display amount for multi-items
|
||||||
amount = K_ItemResultToAmount(item);
|
// amount = K_ItemResultToAmount(item);
|
||||||
if (amount > 1)
|
// if (amount > 1)
|
||||||
{
|
// {
|
||||||
V_DrawStringScaled(
|
// V_DrawStringScaled(
|
||||||
x + (18 * scale),
|
// x + (18 * scale),
|
||||||
y + (23 * scale),
|
// y + (23 * scale),
|
||||||
scale, FRACUNIT, FRACUNIT,
|
// scale, FRACUNIT, FRACUNIT,
|
||||||
V_SNAPTOTOP,
|
// V_SNAPTOTOP,
|
||||||
NULL, HU_FONT,
|
// NULL, HU_FONT,
|
||||||
va("x%d", amount)
|
// 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, 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, 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
|
#ifndef ITEM_LIST_SIZE
|
||||||
Z_Free(rouletteData.itemList);
|
Z_Free(rouletteData.itemList);
|
||||||
|
|
@ -6509,11 +6516,12 @@ void K_drawKartHUD(void)
|
||||||
K_drawInput();
|
K_drawInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cv_kartdebugdistribution.value)
|
// if (cv_kartdebugdistribution.value)
|
||||||
K_drawDistributionDebugger();
|
K_drawDistributionDebugger();
|
||||||
|
|
||||||
// temp debug
|
// 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)
|
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
|
else
|
||||||
{
|
{
|
||||||
UINT32 behind = K_GetItemRouletteDistance(player, player->itemRoulette.playing);
|
UINT32 behind = K_GetItemRouletteDistance(player, player->itemRoulette.playing);
|
||||||
|
behind = FixedMul(behind, K_GetExpAdjustment(player));
|
||||||
UINT32 behindMulti = behind / 500;
|
UINT32 behindMulti = behind / 500;
|
||||||
behindMulti = min(behindMulti, 60);
|
behindMulti = min(behindMulti, 60);
|
||||||
award = award * (behindMulti + 10) / 10;
|
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);
|
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);
|
boolean K_PlayerCanUseItem(player_t *player);
|
||||||
|
|
||||||
|
fixed_t K_GetExpAdjustment(player_t *player);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
#endif
|
#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 is reduced based on the player's exp
|
||||||
distance = FixedMul(distance, min(FRACUNIT, player->exp));
|
// distance = FixedMul(distance, player->exp);
|
||||||
|
|
||||||
return distance;
|
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
|
// Special cases are all handled, we can now
|
||||||
// actually calculate actual item reels.
|
// 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);
|
roulette->useOdds = K_FindUseodds(player, roulette);
|
||||||
|
|
||||||
for (i = 1; i < NUMKARTRESULTS; i++)
|
for (i = 1; i < NUMKARTRESULTS; i++)
|
||||||
|
|
|
||||||
|
|
@ -669,18 +669,14 @@ void __attribute__((optimize("O0"))) Obj_CrossCheckpoints(player_t* player, fixe
|
||||||
if (player->position == 1)
|
if (player->position == 1)
|
||||||
{
|
{
|
||||||
player->lapPoints += 2;
|
player->lapPoints += 2;
|
||||||
player->exp += FRACUNIT/10;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player->lapPoints += 1;
|
player->lapPoints += 1;
|
||||||
player->exp += FRACUNIT/20;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (K_IsPlayerLosing(player))
|
|
||||||
{
|
player->exp += K_GetExpAdjustment(player);
|
||||||
player->exp -= FRACUNIT/20;
|
|
||||||
}
|
|
||||||
|
|
||||||
K_UpdatePowerLevels(player, player->laps, false);
|
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
|
if (inDuel == false && player->position == 1) // 1st place in 1v1 uses thumbs up
|
||||||
{
|
{
|
||||||
player->lapPoints += 2;
|
player->lapPoints += 2;
|
||||||
player->exp += FRACUNIT/10;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player->lapPoints++;
|
player->lapPoints++;
|
||||||
player->exp += FRACUNIT/20;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (K_IsPlayerLosing(player))
|
|
||||||
{
|
player->exp += K_GetExpAdjustment(player);
|
||||||
player->exp -= FRACUNIT/20;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player->position == 1 && !(gametyperules & GTR_CHECKPOINTS))
|
if (player->position == 1 && !(gametyperules & GTR_CHECKPOINTS))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue