Trying to handle various different speeds...
This commit is contained in:
parent
553ce473b1
commit
7fbf5830a7
5 changed files with 24 additions and 39 deletions
|
|
@ -627,9 +627,9 @@ consvar_t cv_schedule = CVAR_INIT ("schedule", "On", CV_NETVAR|CV_CALL, CV_OnOff
|
|||
|
||||
consvar_t cv_automate = CVAR_INIT ("automate", "On", CV_NETVAR, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_test1 = CVAR_INIT ("test1", "400", CV_NETVAR|CV_FLOAT, CV_Signed, NULL);
|
||||
consvar_t cv_test2 = CVAR_INIT ("test2", "0.1", CV_NETVAR|CV_FLOAT, CV_Signed, NULL);
|
||||
consvar_t cv_test3 = CVAR_INIT ("test3", "10", CV_NETVAR|CV_FLOAT, CV_Signed, NULL);
|
||||
consvar_t cv_test1 = CVAR_INIT ("test1", "200", CV_NETVAR|CV_FLOAT, CV_Signed, NULL);
|
||||
consvar_t cv_test2 = CVAR_INIT ("test2", "40", CV_NETVAR|CV_FLOAT, CV_Signed, NULL);
|
||||
consvar_t cv_test3 = CVAR_INIT ("test3", "18", CV_NETVAR|CV_FLOAT, CV_Signed, NULL);
|
||||
|
||||
char timedemo_name[256];
|
||||
boolean timedemo_csv;
|
||||
|
|
|
|||
|
|
@ -472,7 +472,6 @@ struct botvars_t
|
|||
SINT8 driftturn; // Drifting turn direction
|
||||
tic_t drifttime; // Time spent drifting
|
||||
tic_t driftlockout; // do not allow drifting for this many tics
|
||||
tic_t driftending; // number of tics to force turning towards waypoint
|
||||
};
|
||||
|
||||
struct sonicloopcamvars_t
|
||||
|
|
|
|||
|
|
@ -1108,22 +1108,29 @@ static void K_BotStartDrift(player_t* player)
|
|||
|
||||
if (speedfactor < FRACUNIT/2)
|
||||
{
|
||||
// don't bother if we can't even drift
|
||||
// don't bother if we're going too slow
|
||||
K_BotSetDriftState(player, DRIFTSTATE_AUTO, BOTDRIFTLOCKOUT);
|
||||
return;
|
||||
}
|
||||
|
||||
if (speedfactor > 4*FRACUNIT/3)
|
||||
if (speedfactor > (6-gamespeed)*FRACUNIT/3)
|
||||
{
|
||||
// likewise, don't bother if we're going too fast
|
||||
K_BotSetDriftState(player, DRIFTSTATE_AUTO, BOTDRIFTLOCKOUT/2);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player->botvars.driftlockout)
|
||||
{
|
||||
// things are not working out in our favor
|
||||
player->botvars.driftlockout--;
|
||||
return;
|
||||
}
|
||||
|
||||
// check for waypoints ahead of us with drift settings, based on our current speed
|
||||
path_t path = {0};
|
||||
INT32 maxdist = FixedInt(cv_test1.value);
|
||||
maxdist = FixedMul(maxdist, speedfactor + cv_test2.value);
|
||||
INT32 maxdist = FixedInt(cv_test1.value) + gamespeed*50;
|
||||
maxdist = FixedMul(maxdist, speedfactor * (player->botvars.driftstate == DRIFTSTATE_ACTIVE ? 1 : 2));
|
||||
|
||||
if (maxdist >= 0 && K_PathfindThruCircuit(player->currentwaypoint, maxdist, &path, false, false))
|
||||
{
|
||||
|
|
@ -1144,16 +1151,6 @@ static void K_BotStartDrift(player_t* player)
|
|||
if (driftsetting == DRIFT_NONE)
|
||||
{
|
||||
// No waypoints, nothing we can do here.
|
||||
// ...except decrement driftlockout!
|
||||
// do this here to prevent chaining drifts after messing up
|
||||
if (player->botvars.driftlockout)
|
||||
player->botvars.driftlockout--;
|
||||
return;
|
||||
}
|
||||
|
||||
if (player->botvars.driftlockout)
|
||||
{
|
||||
// things are not working out in our favor
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1307,8 +1304,7 @@ static INT32 K_HandleBotTrack(player_t *player, ticcmd_t *cmd, botprediction_t *
|
|||
cmd->forwardmove = MAXPLMOVE;
|
||||
|
||||
if (dirdist <= rad
|
||||
&& player->botvars.driftstate != DRIFTSTATE_STARTING // steer towards waypoints when starting drift
|
||||
&& player->botvars.driftending == 0) // ...and after releasing a drift
|
||||
&& player->botvars.driftstate != DRIFTSTATE_STARTING) // steer towards waypoints when starting drift
|
||||
{
|
||||
// Going the right way, don't turn at all.
|
||||
turnamt = 0;
|
||||
|
|
@ -1322,19 +1318,15 @@ static INT32 K_HandleBotTrack(player_t *player, ticcmd_t *cmd, botprediction_t *
|
|||
{
|
||||
cmd->buttons |= BT_DRIFT;
|
||||
|
||||
fixed_t angofs = -45*FRACUNIT;
|
||||
fixed_t angofs = K_GetKartSpeedFromStat(5 - (player->kartspeed - 5), false) * -player->botvars.driftturn;
|
||||
|
||||
// steer a bit harder when starting a drift
|
||||
angofs -= std::max<int>(0, TICRATE/4 - player->botvars.drifttime)*2;
|
||||
// adjust for speed
|
||||
angofs = FixedMul(angofs, speedfactor - (2-gamespeed)*FRACUNIT/4);
|
||||
|
||||
// steer harder when above 75% speed
|
||||
//if (speedfactor > 3*FRACUNIT/4)
|
||||
//angofs = FixedMul(angofs, FRACUNIT/4 + 3*speedfactor/4);
|
||||
|
||||
fixed_t driftpower = angofs*player->botvars.driftturn - FixedDiv(anglediff2, ANG1);
|
||||
fixed_t driftpower = angofs - FixedDiv(anglediff2, ANG1);
|
||||
|
||||
// arbitrary divider on the final driftpower
|
||||
driftpower /= 55;
|
||||
driftpower /= FixedInt(cv_test2.value);
|
||||
|
||||
// brakedrift if we're steering too hard
|
||||
if (abs(driftpower) >= FRACUNIT)
|
||||
|
|
@ -1784,9 +1776,6 @@ void K_UpdateBotGameplayVars(player_t *player)
|
|||
|
||||
player->botvars.turnconfirm += player->cmd.bot.turnconfirm;
|
||||
|
||||
if (player->botvars.driftending)
|
||||
player->botvars.driftending--;
|
||||
|
||||
// Is a bot not making any progress? Kill it and respawn at next waypoint.
|
||||
K_IncrementBotRespawn(player, &player->botvars.respawnconfirm, BOTRESPAWNCONFIRM);
|
||||
|
||||
|
|
@ -1812,7 +1801,8 @@ void K_UpdateBotGameplayVars(player_t *player)
|
|||
// so no need to worry about doing that ourselves.
|
||||
K_BotStartDrift(player);
|
||||
|
||||
tic_t limit, dtime = ++player->botvars.drifttime;
|
||||
INT32 limit = FixedInt(cv_test3.value) - gamespeed*5;
|
||||
INT32 dtime = ++player->botvars.drifttime;
|
||||
|
||||
// the faster we are going, the sooner we need to drift
|
||||
fixed_t speedfactor = FixedDiv(player->speed, K_GetKartSpeed(player, false, false));
|
||||
|
|
@ -1820,7 +1810,7 @@ void K_UpdateBotGameplayVars(player_t *player)
|
|||
switch (player->botvars.driftstate)
|
||||
{
|
||||
case DRIFTSTATE_STARTING:
|
||||
limit = std::max(0, FixedInt(cv_test3.value) - FixedMul(TICRATE/5, speedfactor));
|
||||
limit = std::max(0, limit - FixedMul(TICRATE/5, speedfactor));
|
||||
if (dtime > limit)
|
||||
{
|
||||
K_BotSetDriftState(player, DRIFTSTATE_ACTIVE, 0);
|
||||
|
|
@ -1828,11 +1818,10 @@ void K_UpdateBotGameplayVars(player_t *player)
|
|||
break;
|
||||
|
||||
case DRIFTSTATE_ENDING:
|
||||
limit = std::max(0, FixedInt(cv_test3.value) - FixedMul(TICRATE/5, speedfactor));
|
||||
limit = std::max(0, limit - FixedMul(TICRATE/5, speedfactor));
|
||||
if (dtime > limit)
|
||||
{
|
||||
K_BotSetDriftState(player, DRIFTSTATE_AUTO, 0);
|
||||
player->botvars.driftending = TICRATE/2;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -4834,7 +4834,6 @@ static void K_DrawBotDebugger(void)
|
|||
V_DrawThinString(24, 108, vflags|(stplyr->botvars.driftlockout ? V_ORANGEMAP : 0), va("Drift lockout: %d", stplyr->botvars.driftlockout));
|
||||
V_DrawThinString(24, 116, vflags, va("Drift turn: %d", stplyr->botvars.driftturn));
|
||||
V_DrawThinString(24, 124, vflags, va("Drift timer: %d", stplyr->botvars.drifttime));
|
||||
V_DrawThinString(24, 132, vflags, va("Drift end time: %d", stplyr->botvars.driftending));
|
||||
}
|
||||
|
||||
void K_drawKartHUD(void)
|
||||
|
|
|
|||
|
|
@ -387,7 +387,6 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
WRITESINT8(save->p, players[i].botvars.driftturn);
|
||||
WRITEUINT32(save->p, players[i].botvars.drifttime);
|
||||
WRITEUINT32(save->p, players[i].botvars.driftlockout);
|
||||
WRITEUINT32(save->p, players[i].botvars.driftending);
|
||||
|
||||
WRITEFIXED(save->p, players[i].outrun);
|
||||
WRITEUINT8(save->p, players[i].outruntime);
|
||||
|
|
@ -720,7 +719,6 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
players[i].botvars.driftturn = READSINT8(save->p);
|
||||
players[i].botvars.drifttime = READUINT32(save->p);
|
||||
players[i].botvars.driftlockout = READUINT32(save->p);
|
||||
players[i].botvars.driftending = READUINT32(save->p);
|
||||
|
||||
players[i].outrun = READFIXED(save->p);
|
||||
players[i].outruntime = READUINT8(save->p);
|
||||
|
|
|
|||
Loading…
Reference in a new issue