diff --git a/src/d_player.h b/src/d_player.h index 8f4478ae7..45e97f00a 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -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 diff --git a/src/g_game.c b/src/g_game.c index f0b166710..2f0d72dad 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -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); diff --git a/src/k_bot.cpp b/src/k_bot.cpp index 85d792985..52292ac4f 100644 --- a/src/k_bot.cpp +++ b/src/k_bot.cpp @@ -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; diff --git a/src/k_bot.h b/src/k_bot.h index 3cc977052..294403b01 100644 --- a/src/k_bot.h +++ b/src/k_bot.h @@ -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); diff --git a/src/lua_botvarslib.c b/src/lua_botvarslib.c index 57606111b..cca32b86b 100644 --- a/src/lua_botvarslib.c +++ b/src/lua_botvarslib.c @@ -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; diff --git a/src/p_saveg.c b/src/p_saveg.c index 3121d26d0..d5089dc23 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -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);