Make ringpower stuff more modular

This will be super helpful to prevent duped code when I start on visuals
This commit is contained in:
NepDisk 2026-04-12 12:20:08 -04:00
parent 284a86c7b9
commit e49684044f
2 changed files with 32 additions and 6 deletions

View file

@ -9064,11 +9064,9 @@ static void K_UpdatePlayerWaypoints(player_t *const player)
player->pflags &= ~PF_TRUSTWAYPOINTS; // clear special exception
}
INT32 K_GetKartRingPower(const player_t *player, boolean boosted)
INT32 K_GetKartBaseRingPower(const player_t *player, boolean boosted)
{
fixed_t ringPower = ((9 - player->kartspeed) + (9 - player->kartweight)) * (FRACUNIT/2);
UINT16 finalPower = 0;
UINT8 ringcap = 18 - ((9 - player->kartspeed) + (9 - player->kartweight))/2;
if (boosted == true)
{
@ -9081,15 +9079,40 @@ INT32 K_GetKartRingPower(const player_t *player, boolean boosted)
ringPower += 1;
}
finalPower = max(ringPower / FRACUNIT, 1);
ringPower = max(ringPower / FRACUNIT, 1);
// the base is 4 tics
finalPower += 3;
ringPower += 3;
return ringPower;
}
UINT8 K_GetKartRingCap(const player_t *player)
{
return 18 - ((9 - player->kartspeed) + (9 - player->kartweight))/2;
}
boolean K_IsPlayerRingBurnt(const player_t *player, UINT16 ringpower)
{
UINT8 ringcap = K_GetKartRingCap(player);
if (player->ringtime >= ringpower*ringcap)
{
return true;
}
return false;
}
INT32 K_GetKartRingPower(const player_t *player, boolean boosted)
{
UINT16 finalPower = K_GetKartBaseRingPower(player, boosted);
UINT8 ringcap = K_GetKartRingCap(player);
// If you use alot of rings at a time, you start gaining less ring timer...
fixed_t burnStart = finalPower*ringcap;
fixed_t burnEnd = finalPower*(ringcap+(ringcap/2));
if (player->ringtime >= burnStart)
if (K_IsPlayerRingBurnt(player, finalPower))
{
if (P_IsLocalPlayer(player) && player->ringtime == burnStart)
{

View file

@ -304,6 +304,9 @@ void K_RemoveBubbleHealth(player_t *player, INT16 sub);
boolean K_CheckBubbleChip(const mobj_t *mobj);
void K_RepairOrbitChain(mobj_t *orbit);
void K_CalculateBananaSlope(mobj_t *mobj, fixed_t x, fixed_t y, fixed_t z, fixed_t radius, fixed_t height, boolean flip, boolean player);
INT32 K_GetKartBaseRingPower(const player_t *player, boolean boosted);
UINT8 K_GetKartRingCap(const player_t *player);
boolean K_IsPlayerRingBurnt(const player_t *player, UINT16 ringpower);
INT32 K_GetKartRingPower(const player_t *player, boolean boosted);
size_t K_NextRespawnWaypointIndex(waypoint_t *waypoint);
boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y);