Add const, move driftskill to botdata

No more messing with respawn waypoints in K_BotTicker
This commit is contained in:
GenericHeroGuy 2025-08-31 21:00:22 +02:00
parent bc4408b203
commit c9802c36c8
6 changed files with 32 additions and 73 deletions

View file

@ -439,9 +439,6 @@ struct botvars_t
fixed_t rubberband; // Bot rubberband value
UINT16 controller; // Special bot controller linedef ID
fixed_t driftskill; // The bot's "skill" at drifts.
// Determines how soon a bot starts to drift.
};
struct sonicloopcamvars_t

View file

@ -2664,10 +2664,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
p->botvars.rubberband = FRACUNIT;
p->botvars.controller = UINT16_MAX;
p->botvars.driftskill =
FixedMul(MAXDRIFTSKILL, K_BotDetermineDriftSkill(p));
K_BotRespawn(p);
K_BotReborn(p);
if (follower)
P_RemoveMobj(follower);

View file

@ -1067,18 +1067,8 @@ static void K_DrawPredictionDebug(botdata_t *bd, const player_t *player)
}
}
/*--------------------------------------------------
fixed_t K_BotDetermineDriftSkill(player_t *player)
Calculates drift skill for a player based on stats.
Input Arguments:-
player - Player to get drift skill for.
Return:-
Calculated drift skill.
--------------------------------------------------*/
fixed_t K_BotDetermineDriftSkill(player_t *player)
// Calculates drift skill for a player based on stats.
fixed_t K_BotDetermineDriftSkill(const player_t *player)
{
return ((FRACUNIT * (player->kartspeed + player->kartweight)) / 18);
}
@ -1099,12 +1089,10 @@ static void K_WaypointGetDirectionVector(waypoint_t *wp1, waypoint_t *wp2, vecto
FV3_Normalize(a_o);
}
/*--------------------------------------------------
void K_BotSetDriftState(player_t *player, botdrift_t newstate, tic_t lockout)
See header file for description.
--------------------------------------------------*/
void K_BotSetDriftState(player_t *player, botdrift_e newstate, tic_t lockout)
// Changes a bot's drift state.
// Resets the drift timer if the old and new state are different.
// If lockout is non-zero, apply drift lockout for this many tics.
void K_BotSetDriftState(const player_t *player, botdrift_e newstate, tic_t lockout)
{
botdata_t *bd = &botdata[player - players];
@ -1121,7 +1109,7 @@ void K_BotSetDriftState(player_t *player, botdrift_e newstate, tic_t lockout)
#define MINBOTDRIFT (KART_FULLTURN * 2) / 3 // 0.66
// Begins and ends "forced" drifts on a per-waypoint basis.
static void K_BotStartDrift(botdata_t *bd, player_t* player)
static void K_BotStartDrift(botdata_t *bd, const player_t* player)
{
// Handle DRIFTING towards waypoints!
boolean shouldDrift;
@ -1192,7 +1180,7 @@ static void K_BotStartDrift(botdata_t *bd, player_t* player)
// and how fast we're moving.
fixed_t driftpotential = M_RandomKey(MAXDRIFTSKILL);
if ((driftpotential <= player->botvars.driftskill) &&
if ((driftpotential <= bd->driftskill) &&
(botDriftSpeed <= player->speed))
{
shouldDrift = true;
@ -1360,7 +1348,7 @@ static INT32 K_HandleBotTrack(botdata_t *bd, const player_t *player, angle_t des
#undef MINBOTDRIFT
static void K_IncrementBotRespawn(player_t *player, UINT8 *respawn, const UINT8 respawnmax)
static void K_IncrementBotRespawn(const player_t *player, UINT8 *respawn, const UINT8 respawnmax)
{
const fixed_t requireDist = (12*player->mo->scale) / FRACUNIT;
INT32 progress = player->distancetofinishprev - player->distancetofinish;
@ -1538,7 +1526,7 @@ static void K_IncrementBotRespawn(player_t *player, UINT8 *respawn, const UINT8
}*/
// updates server-sided bot logic
void K_BotTicker(player_t *player)
void K_BotTicker(const player_t *player)
{
angle_t destangle = 0;
INT32 turnamt = 0;
@ -1600,7 +1588,7 @@ void K_BotTicker(player_t *player)
if (bd->respawnconfirm >= BOTRESPAWNCONFIRM || player->speed < 10*FRACUNIT)
{
// Now a clean function! Neat, eh?
K_SetRespawnAtNextWaypoint(player);
//K_SetRespawnAtNextWaypoint(player);
// WHAT ARE YOU DOING??? RACE ALREADY!
P_DamageMobj(player->mo, NULL, NULL, 1, DMG_INSTAKILL);
@ -1834,11 +1822,13 @@ void K_UpdateBotGameplayVars(player_t *player)
}
// resets some botdata stuff after respawning
void K_BotRespawn(player_t *player)
void K_BotReborn(const player_t *player)
{
botdata_t *bd = &botdata[player - players];
memset(bd, 0, sizeof(*bd));
bd->driftstate = DRIFTSTATE_AUTO;
bd->driftskill = FixedMul(MAXDRIFTSKILL, K_BotDetermineDriftSkill(player));
// drift parameters, just fixed values for now
bd->driftmaxdist = 200 + gamespeed*50;
@ -1846,7 +1836,7 @@ void K_BotRespawn(player_t *player)
bd->driftstatedelay = TICRATE/2 - gamespeed*5;
}
void K_BotResetItemConfirm(player_t *player, boolean setdelay)
void K_BotResetItemConfirm(const player_t *player, boolean setdelay)
{
botdata_t *bd = &botdata[player - players];
bd->itemconfirm = 0;

View file

@ -90,6 +90,9 @@ struct botdata_t
UINT16 driftpowerdiv; // arbitrary divider on drift turning
UINT16 driftstatedelay; // max time to wait between drift state changes
fixed_t driftskill; // The bot's "skill" at drifts.
// Determines how soon a bot starts to drift.
boolean acceldown, brakedown, driftdown, itemdown; // buttons
boolean dolookback; // look out behind you
boolean itemwasdown; // last tic's item button
@ -99,7 +102,7 @@ struct botdata_t
// AVAILABLE FOR LUA
void K_BotTicker(player_t *player);
void K_BotTicker(const player_t *player);
void K_DrawBotDebugger(const player_t *player);
@ -398,40 +401,13 @@ void K_UpdateBotGameplayVars(player_t *player);
// Item usage part of ticcmd generation.
void K_BotItemUsage(botdata_t *bd, const player_t *player);
void K_BotRespawn(player_t *player);
void K_BotReborn(const player_t *player);
void K_BotResetItemConfirm(player_t *player, boolean setdelay);
void K_BotResetItemConfirm(const player_t *player, boolean setdelay);
/*--------------------------------------------------
fixed_t K_BotDetermineDriftSkill(player_t *player)
fixed_t K_BotDetermineDriftSkill(const player_t *player);
Calculates drift skill for a player based on stats.
Input Arguments:-
player - Player to get drift skill for.
Return:-
Calculated drift skill.
--------------------------------------------------*/
fixed_t K_BotDetermineDriftSkill(player_t *player);
/*--------------------------------------------------
void K_BotSetDriftState(player_t *player, botdrift_t newstate, tic_t lockout)
Changes a bot's drift state.
Resets the drift timer if the old and new state are different.
Input Arguments:-
player - Player to set drift state for.
newstate - The new drift state.
lockout - If non-zero, apply drift lockout for this many tics.
Return:-
None
--------------------------------------------------*/
void K_BotSetDriftState(player_t *player, botdrift_e newstate, tic_t lockout);
void K_BotSetDriftState(const player_t *player, botdrift_e newstate, tic_t lockout);
botdata_t *K_GetBotData(UINT8 num);

View file

@ -25,7 +25,6 @@ enum botvars {
botvars_diffincrease,
botvars_rival,
botvars_rubberband,
botvars_driftskill,
};
static const char *const botvars_opt[] = {
@ -35,7 +34,6 @@ static const char *const botvars_opt[] = {
"diffincrease",
"rival",
"rubberband",
"driftskill",
NULL
};
@ -69,9 +67,6 @@ static int botvars_get(lua_State *L)
case botvars_rubberband:
lua_pushfixed(L, botvars->rubberband);
break;
case botvars_driftskill:
lua_pushfixed(L, botvars->driftskill);
break;
}
return 1;
}
@ -107,9 +102,6 @@ static int botvars_set(lua_State *L)
case botvars_rubberband:
botvars->rubberband = luaL_checkfixed(L, 3);
break;
case botvars_driftskill:
botvars->driftskill = luaL_checkfixed(L, 3);
break;
}
return 0;
}
@ -129,6 +121,7 @@ enum botdata {
botdata_driftmaxdist,
botdata_driftpowerdiv,
botdata_driftstatedelay,
botdata_driftskill,
botdata_acceldown,
botdata_brakedown,
botdata_driftdown,
@ -152,6 +145,7 @@ static const char *const botdata_opt[] = {
"driftmaxdist",
"driftpowerdiv",
"driftstatedelay",
"driftskill",
"acceldown",
"brakedown",
"driftdown",
@ -209,6 +203,9 @@ static int botdata_get(lua_State *L)
case botdata_driftstatedelay:
lua_pushinteger(L, botdata->driftstatedelay);
return 1;
case botdata_driftskill:
lua_pushfixed(L, botdata->driftskill);
return 1;
case botdata_acceldown:
lua_pushboolean(L, botdata->acceldown);
return 1;
@ -282,6 +279,9 @@ static int botdata_set(lua_State *L)
case botdata_driftstatedelay:
botdata->driftstatedelay = luaL_checkinteger(L, 3);
return 0;
case botdata_driftskill:
botdata->driftskill = luaL_checkfixed(L, 3);
return 0;
case botdata_acceldown:
botdata->acceldown = luaL_checkboolean(L, 3);
return 0;

View file

@ -402,7 +402,6 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEUINT8(save->p, players[i].botvars.rival);
WRITEFIXED(save->p, players[i].botvars.rubberband);
WRITEUINT16(save->p, players[i].botvars.controller);
WRITEFIXED(save->p, players[i].botvars.driftskill);
WRITEFIXED(save->p, players[i].outrun);
WRITEUINT8(save->p, players[i].outruntime);
@ -750,7 +749,6 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].botvars.rival = (boolean)READUINT8(save->p);
players[i].botvars.rubberband = READFIXED(save->p);
players[i].botvars.controller = READUINT16(save->p);
players[i].botvars.driftskill = READFIXED(save->p);
players[i].outrun = READFIXED(save->p);
players[i].outruntime = READUINT8(save->p);