diff --git a/src/drivers/usr_GP3601/5/skill.xml b/src/drivers/usr_GP3601/5/skill.xml
index 4bf58167..8314c254 100644
--- a/src/drivers/usr_GP3601/5/skill.xml
+++ b/src/drivers/usr_GP3601/5/skill.xml
@@ -19,7 +19,7 @@
-
+
diff --git a/src/drivers/usr_GP3601/cars/36GP-alfa12c/default.xml b/src/drivers/usr_GP3601/cars/36GP-alfa12c/default.xml
index 89004441..dcb6593c 100644
--- a/src/drivers/usr_GP3601/cars/36GP-alfa12c/default.xml
+++ b/src/drivers/usr_GP3601/cars/36GP-alfa12c/default.xml
@@ -32,8 +32,8 @@
-
-
+
+
diff --git a/src/drivers/usr_GP3601/cars/36GP-alfa12c/wheel-2.xml b/src/drivers/usr_GP3601/cars/36GP-alfa12c/wheel-2.xml
index 19c4e207..5540995f 100644
--- a/src/drivers/usr_GP3601/cars/36GP-alfa12c/wheel-2.xml
+++ b/src/drivers/usr_GP3601/cars/36GP-alfa12c/wheel-2.xml
@@ -17,7 +17,7 @@
-
+
@@ -28,15 +28,16 @@
-
+
+
-
+
-
+
@@ -46,22 +47,22 @@
-
+
-
-
+
+
-
+
-
+
@@ -82,16 +83,16 @@
-
+
-
-
-
+
+
+
@@ -99,6 +100,9 @@
+
+
+
@@ -114,6 +118,9 @@
+
+
+
diff --git a/src/drivers/usr_GP3601/cars/36GP-alfatipo/default.xml b/src/drivers/usr_GP3601/cars/36GP-alfatipo/default.xml
index 4008f6d2..c855af7f 100644
--- a/src/drivers/usr_GP3601/cars/36GP-alfatipo/default.xml
+++ b/src/drivers/usr_GP3601/cars/36GP-alfatipo/default.xml
@@ -30,7 +30,7 @@
-
+
diff --git a/src/drivers/usr_GP3601/cars/36GP-autounion/default.xml b/src/drivers/usr_GP3601/cars/36GP-autounion/default.xml
index d36a9a00..8190c1cd 100644
--- a/src/drivers/usr_GP3601/cars/36GP-autounion/default.xml
+++ b/src/drivers/usr_GP3601/cars/36GP-autounion/default.xml
@@ -32,8 +32,8 @@
-
-
+
+
diff --git a/src/drivers/usr_GP3601/cars/36GP-autounion/wheel-2.xml b/src/drivers/usr_GP3601/cars/36GP-autounion/wheel-2.xml
index 5dbcd408..013478da 100644
--- a/src/drivers/usr_GP3601/cars/36GP-autounion/wheel-2.xml
+++ b/src/drivers/usr_GP3601/cars/36GP-autounion/wheel-2.xml
@@ -17,7 +17,7 @@
-
+
@@ -31,8 +31,12 @@
+
+
+
+
@@ -46,7 +50,7 @@
-
+
diff --git a/src/drivers/usr_GP3601/cars/36GP-bugatti/default.xml b/src/drivers/usr_GP3601/cars/36GP-bugatti/default.xml
index 1dc4e6f7..ef97c4f3 100644
--- a/src/drivers/usr_GP3601/cars/36GP-bugatti/default.xml
+++ b/src/drivers/usr_GP3601/cars/36GP-bugatti/default.xml
@@ -30,7 +30,7 @@
-
+
diff --git a/src/drivers/usr_GP3601/cars/36GP-maserati/default.xml b/src/drivers/usr_GP3601/cars/36GP-maserati/default.xml
index 646545bd..ef4bdfef 100644
--- a/src/drivers/usr_GP3601/cars/36GP-maserati/default.xml
+++ b/src/drivers/usr_GP3601/cars/36GP-maserati/default.xml
@@ -30,7 +30,7 @@
-
+
diff --git a/src/drivers/usr_GP3601/cars/36GP-maserati6C34/default.xml b/src/drivers/usr_GP3601/cars/36GP-maserati6C34/default.xml
index 4d72e8c6..8764375e 100644
--- a/src/drivers/usr_GP3601/cars/36GP-maserati6C34/default.xml
+++ b/src/drivers/usr_GP3601/cars/36GP-maserati6C34/default.xml
@@ -31,7 +31,7 @@
-
+
diff --git a/src/drivers/usr_GP3601/cars/36GP-mercedes/default.xml b/src/drivers/usr_GP3601/cars/36GP-mercedes/default.xml
index 321010dc..ba615176 100644
--- a/src/drivers/usr_GP3601/cars/36GP-mercedes/default.xml
+++ b/src/drivers/usr_GP3601/cars/36GP-mercedes/default.xml
@@ -32,9 +32,9 @@
-
+
-
+
diff --git a/src/drivers/usr_GP3601/driver.cpp b/src/drivers/usr_GP3601/driver.cpp
index 2083e4bf..f971d604 100644
--- a/src/drivers/usr_GP3601/driver.cpp
+++ b/src/drivers/usr_GP3601/driver.cpp
@@ -932,10 +932,10 @@ void Driver::calcSkill()
double rand3 = (double) getRandom() / 65536.0; // whether change is positive or negative
// acceleration to use in current time limit
- decel_adjust_targ = (skill/6 * rand1);
+ decel_adjust_targ = (skill/4 * rand1);
// brake to use - usually 1.0, sometimes less (more rarely on higher skill)
- brake_adjust_targ = MAX(0.7, 1.0 - (skill/20 * rand2));
+ brake_adjust_targ = MAX(0.7, 1.0 - MAX(0.0, skill/10 * (rand2-0.7)));
// how long this skill mode to last for
skill_adjust_limit = 5.0 + rand3 * 50.0;
@@ -1057,6 +1057,7 @@ float Driver::getSteer(tSituation *s)
{
if (lastmode == mode_normal ||
(angle_ok &&
+ (simtime > 15.0 || car->_speed_x > 20) &&
yr_ok &&
skid < 0.1 &&
steer_ok &&
@@ -1317,6 +1318,9 @@ int Driver::checkFlying()
float Driver::correctSteering( float avoidsteer, float racesteer )
{
+ if (simtime < 15.0 && car->_speed_x < 20.0)
+ return avoidsteer;
+
float steer = avoidsteer;
float accel = MIN(0.0f, car->_accel_x);
double speed = 50.0; //MAX(50.0, getSpeed());
@@ -1696,19 +1700,22 @@ bool Driver::canOvertake( Opponent *o, double *mincatchdist, bool outside, bool
tCarElt *ocar = o->getCarPtr();
int osegid = ocar->_trkPos.seg->id;
double otry_factor = (lenient ? (0.2 + (1.0 - ((simtime-frontavoidtime)/7.0)) * 0.8) : 1.0);
- double overtakecaution = (rldata->overtakecaution + (outside ? MIN(0.0, car->_accel_x/8) : 0.0)) - driver_aggression;
- double distance = o->getDistance() * otry_factor * (1.0 + overtakecaution) - (ocar->_pos > car->_pos ? MIN(o->getDistance()/2, 3.0) : 0.0);
+ double overtakecaution = MAX(0.0, rldata->overtakecaution + (outside ? MIN(0.0, car->_accel_x/8) : 0.0)) - driver_aggression;
+ double distance = o->getDistance() * otry_factor * MAX(0.5, 1.0 + overtakecaution) - (ocar->_pos > car->_pos ? MIN(o->getDistance()/2, 3.0) : 0.0);
double speed = MIN(rldata->avspeed, getSpeed() + MAX(0.0, (10.0 - distance)/3));
double ospeed = o->getSpeed();
- double speeddiff = MAX((15.0-fabs(rldata->rInverse)*1000) - distance, fabs(speed - ospeed) * (8 - MIN(5.5, fabs(rldata->rInverse)*300)));
+ double orInv = fabs(raceline->getRInverse(o->getDistance()));
+ double rInv = MAX(fabs(rldata->rInverse), orInv);
+
+ double speeddiff = MAX((15.0-rInv*1000) - distance, fabs(speed - ospeed) * (8 - MIN(5.5, rInv*300)));
if (outside)
- ospeed *= 1.0 + fabs(rldata->rInverse)*3;
- double catchdist = (double) MIN(speed*distance/(speed-ospeed), distance*CATCH_FACTOR) * otry_factor;
+ ospeed *= 1.0 + rInv*3;
+ double catchdist = (double) MIN((speed*distance)/(speed-ospeed), distance*CATCH_FACTOR) * otry_factor;
if (catchdist < *mincatchdist+0.1 && distance < MIN(speeddiff, catchdist/2 + 5.0))
{
if (DebugMsg & debug_overtake)
- fprintf(stderr,"%.1f %s: OVERTAKE! (cd %.1f<%.1f) (dist %.1f < (%.1f-%.1f)*X = %.1f caut=%.1f\n",otry_factor,ocar->_name,catchdist,*mincatchdist,distance,speed,ospeed,speeddiff,overtakecaution);
+ fprintf(stderr,"%.1f %s: OVERTAKE! (cd %.1f<%.1f) (dist %.1f (%.1f) < (%.1f-%.1f)*X = %.1f caut=%.1f\n",otry_factor,ocar->_name,catchdist,*mincatchdist,distance,o->getDistance(),speed,ospeed,speeddiff,overtakecaution);
*mincatchdist = catchdist;
return true;
}
@@ -2044,7 +2051,7 @@ fprintf(stderr,"%s SIDE %s, NO MOVE AT ALL! %.1f\n",car->_name,ocar->_name,myoff
maxoffset = rldata->offset + rldata->rgtmargin;
#endif
- //if (fabs(angle) + car->_accel_x/100 < 0.5)
+ if (car->_speed_x > 20.0 || simtime > 10.0)
{
double caution = rldata->overtakecaution;
@@ -2497,7 +2504,7 @@ fprintf(stderr,"%s BEHIND %s (%d %d %d %d)\n",car->_name,ocar->_name,((o->getSta
#if 1
// no-one to avoid, work back towards raceline
- if (mode == mode_correcting)
+ if (mode == mode_correcting && (simtime > 15.0 || car->_speed_x > 20))
{
double factor = (fabs(car->_trkPos.toMiddle) < car->_trkPos.seg->width/2 + 2.0 ? 0.25 : 1.0);
if (fabs(myoffset) > fabs(rldata->offset))
diff --git a/src/drivers/usr_GP3601/raceline.cpp b/src/drivers/usr_GP3601/raceline.cpp
index 366d54d4..7859d5cb 100644
--- a/src/drivers/usr_GP3601/raceline.cpp
+++ b/src/drivers/usr_GP3601/raceline.cpp
@@ -79,6 +79,7 @@ LRaceLine::LRaceLine() :
IntMargin(1.5),
ExtMargin(2.0),
AvoidSpeedAdjust(0.0),
+ AvoidSpeedAdjustX(1.0),
AvoidBrakeAdjust(0.0),
CurveFactor(0.14),
SecurityZ(0.0),
@@ -340,13 +341,14 @@ void LRaceLine::AllocTrack( tTrack *ptrack )
MinCornerInverse = GfParmGetNum( carhandle, "private", "MinCornerInverse", (char *)NULL, 0.002f );
CornerSpeed = GfParmGetNum( carhandle, "private", "CornerSpeed", (char *)NULL, 15.0f );
CornerSpeedX = GfParmGetNum( carhandle, "private", "CornerSpeedX", (char *)NULL, 0.0f );
- BaseCornerSpeed = GfParmGetNum( carhandle, "private", "BaseCornerSpeed", (char *)NULL, 0.0f ) - skill/5;
- BaseCornerSpeedX = GfParmGetNum( carhandle, "private", "BaseCornerSpeedX", (char *)NULL, 1.0f );
+ BaseCornerSpeed = GfParmGetNum( carhandle, "private", "BaseCornerSpeed", (char *)NULL, 0.0f );
+ BaseCornerSpeedX = GfParmGetNum( carhandle, "private", "BaseCornerSpeedX", (char *)NULL, 1.0f ) * (0.8 + MIN(0.2, ((12.0-skill)/12) / 5));
AvoidSpeedAdjust = GfParmGetNum( carhandle, "private", "AvoidSpeedAdjust", (char *)NULL, 0.0f );
+ AvoidSpeedAdjustX = GfParmGetNum( carhandle, "private", "AvoidSpeedAdjustX", (char *)NULL, 1.0f );
AvoidBrakeAdjust = GfParmGetNum( carhandle, "private", "AvoidBrakeAdjust", (char *)NULL, 0.0f );
CornerAccel = GfParmGetNum( carhandle, "private", "CornerAccel", (char *)NULL, 0.0f );
- IntMargin = GfParmGetNum( carhandle, "private", "IntMargin", (char *)NULL, 1.1f ) + skill/20;
- ExtMargin = GfParmGetNum( carhandle, "private", "ExtMargin", (char *)NULL, 1.7f ) + skill/10;
+ IntMargin = GfParmGetNum( carhandle, "private", "IntMargin", (char *)NULL, 1.1f ) + skill/12;
+ ExtMargin = GfParmGetNum( carhandle, "private", "ExtMargin", (char *)NULL, 1.7f ) + skill/5;
TimeFactor = GfParmGetNum( carhandle, "private", "TimeFactor", (char *)NULL, 0.0f );
BrakeDelay = GfParmGetNum( carhandle, "private", "BrakeDelay", (char *)NULL, 35.0f );
@@ -1231,7 +1233,7 @@ void LRaceLine::TrackInit(tSituation *p)
double avspeed = GetModD( tAvoidSpeed, i );
double cornerspeed = ((trlspeed ? trlspeed : CornerSpeed) + BaseCornerSpeed) * BaseCornerSpeedX;
if (rl == LINE_MID)
- cornerspeed += (avspeed != 0.0 ? avspeed : AvoidSpeedAdjust) * BaseCornerSpeedX;
+ cornerspeed += (avspeed != 0.0 ? avspeed : AvoidSpeedAdjust) * BaseCornerSpeedX * AvoidSpeedAdjustX;
double TireAccel = cornerspeed * tFriction[i];
int nnext = (i + 5) % Divs;
int next = (i + 1) % Divs;
@@ -1686,6 +1688,8 @@ void LRaceLine::GetRaceLineData(tSituation *s, LRaceLineData *pdata)
data->rgtmargin = GetModD( tRLMarginRgt, Index );
data->lftmargin = GetModD( tRLMarginLft, Index );
data->overtakecaution = MAX(OvertakeCaution, GetModD( tOTCaution, Index ));
+ if (data->overtakecaution < 0.0)
+ data->overtakecaution = MAX(-0.5, data->overtakecaution/3);
data->braking = tSpeed[LINE_RL][Index] - tSpeed[LINE_RL][Next];
data->rlangle = getRLAngle();
diff --git a/src/drivers/usr_GP3601/raceline.h b/src/drivers/usr_GP3601/raceline.h
index 3f71a58b..aca79d10 100644
--- a/src/drivers/usr_GP3601/raceline.h
+++ b/src/drivers/usr_GP3601/raceline.h
@@ -124,6 +124,7 @@ class LRaceLine {
double IntMargin;
double ExtMargin;
double AvoidSpeedAdjust;
+ double AvoidSpeedAdjustX;
double AvoidBrakeAdjust;
double CurveFactor;
double SecurityZ;
diff --git a/src/drivers/usr_GP3601/usr_GP3601.vcproj b/src/drivers/usr_GP3601/usr_GP3601.vcproj
index e115cb11..e4055f60 100644
--- a/src/drivers/usr_GP3601/usr_GP3601.vcproj
+++ b/src/drivers/usr_GP3601/usr_GP3601.vcproj
@@ -108,7 +108,7 @@
/>