From e1f1201871181c16d362746ce8c88ae18f7d891c Mon Sep 17 00:00:00 2001 From: andrewsumner Date: Wed, 17 Dec 2008 22:46:05 +0000 Subject: [PATCH] usr_36GP - minor tweaks re skill feature git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@509 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 31fe7a65a996d87355ee83266f3082b7cf36707f Former-commit-id: fd152ea8912877e01e7e5387fea7c1a46665483e --- src/drivers/usr_GP3601/5/skill.xml | 2 +- .../usr_GP3601/cars/36GP-alfa12c/default.xml | 4 +-- .../usr_GP3601/cars/36GP-alfa12c/wheel-2.xml | 33 +++++++++++-------- .../usr_GP3601/cars/36GP-alfatipo/default.xml | 2 +- .../cars/36GP-autounion/default.xml | 4 +-- .../cars/36GP-autounion/wheel-2.xml | 8 +++-- .../usr_GP3601/cars/36GP-bugatti/default.xml | 2 +- .../usr_GP3601/cars/36GP-maserati/default.xml | 2 +- .../cars/36GP-maserati6C34/default.xml | 2 +- .../usr_GP3601/cars/36GP-mercedes/default.xml | 4 +-- src/drivers/usr_GP3601/driver.cpp | 27 +++++++++------ src/drivers/usr_GP3601/raceline.cpp | 14 +++++--- src/drivers/usr_GP3601/raceline.h | 1 + src/drivers/usr_GP3601/usr_GP3601.vcproj | 4 +-- 14 files changed, 66 insertions(+), 43 deletions(-) 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 @@ />