fix: travel time wasn't correctly calculated for survivalist and background speed bonuses

enhancement: new calculations for travel speed bonuses of survivalist and backgrounds

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8794 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
silversurfer
2020-04-27 20:34:51 +00:00
parent 22cb49668f
commit 0e9e13e838
7 changed files with 37 additions and 31 deletions
+2 -2
View File
@@ -55,8 +55,8 @@
#endif #endif
CHAR8 czVersionNumber[16] = { "Build 19.08.24" }; //YY.MM.DD CHAR8 czVersionNumber[16] = { "Build 20.04.27" }; //YY.MM.DD
CHAR16 zTrackingNumber[16] = { L"Z" }; CHAR16 zTrackingNumber[16] = { L"Z" };
CHAR16 zRevisionNumber[16] = { L"Revision 8692" }; CHAR16 zRevisionNumber[16] = { L"Revision 8794" };
// SAVE_GAME_VERSION is defined in header, change it there // SAVE_GAME_VERSION is defined in header, change it there
+25 -19
View File
@@ -3549,57 +3549,63 @@ INT32 GetSectorMvtTimeForGroup( UINT8 ubSector, UINT8 ubDirection, GROUP *pGroup
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// SANDRO - STOMP traits - ranger reduces time needed for travelling around // SANDRO - STOMP traits - ranger reduces time needed for travelling around
if ( pGroup->usGroupTeam == OUR_TEAM && !fAir && gGameOptions.fNewTraitSystem ) if ( pGroup->usGroupTeam == OUR_TEAM && gGameOptions.fNewTraitSystem )
{ {
// see if we have any ranger here // see if we have any survivalist here
UINT8 ubSurvivalistHere = 0; float fSurvivalistHere = 0;
UINT8 ustravelbackground_foot = 0; // background bonuses
UINT8 ustravelbackground_car = 0; INT8 stravelbackground_foot = 20;
UINT8 ustravelbackground_air = 0; INT8 stravelbackground_car = -20;
INT8 stravelbackground_air = -20;
curr = pGroup->pPlayerList; curr = pGroup->pPlayerList;
while( curr ) while( curr )
{ {
pSoldier = curr->pSoldier; pSoldier = curr->pSoldier;
ubSurvivalistHere += NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ); fSurvivalistHere += NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT );
// Flugente: backgrounds // Flugente: backgrounds
ustravelbackground_foot = max(ustravelbackground_foot, pSoldier->GetBackgroundValue(BG_TRAVEL_FOOT)); // silversurfer: Why the different calculations and defaults?
ustravelbackground_car = max(ustravelbackground_car, pSoldier->GetBackgroundValue(BG_TRAVEL_CAR)); // Well, a slow soldier on foot can slow the whole team down, but one fast soldier won't make the whole team quicker. He is no survivalist after all.
ustravelbackground_air = max(ustravelbackground_air, pSoldier->GetBackgroundValue(BG_TRAVEL_AIR)); // A good driver on the other hand will drive faster and since the team is on the same vehicle, they all will be faster.
// A merc with flight experience can pose as co-pilot and provide some assistance to the pilot, so again the whole team profits.
stravelbackground_foot = min(stravelbackground_foot, pSoldier->GetBackgroundValue(BG_TRAVEL_FOOT));
stravelbackground_car = max(stravelbackground_car, pSoldier->GetBackgroundValue(BG_TRAVEL_CAR));
stravelbackground_air = max(stravelbackground_air, pSoldier->GetBackgroundValue(BG_TRAVEL_AIR));
curr = curr->next; curr = curr->next;
} }
// yes, we have... // yes, we have...
if ( ubSurvivalistHere || ustravelbackground_foot || ustravelbackground_car || ustravelbackground_air ) if ( (fSurvivalistHere && !fAir) || (stravelbackground_foot && fFoot) || (stravelbackground_car && (fCar || fTruck || fTracked)) || (stravelbackground_air && fAir) )
{ {
// no more than certain number of simultaneous bonuses // no more than certain number of simultaneous bonuses with diminishing returns
ubSurvivalistHere = min( gSkillTraitValues.ubSVMaxBonusesToTravelSpeed, ubSurvivalistHere ); fSurvivalistHere = (min(gSkillTraitValues.ubSVMaxBonusesToTravelSpeed, fSurvivalistHere) * 2.5) / (1.0 + min(gSkillTraitValues.ubSVMaxBonusesToTravelSpeed, fSurvivalistHere) * 1.5);
// on foot, the bonus should be higher // on foot, the bonus should be higher
if( fFoot ) if( fFoot )
{ {
// however, we cannot be quicker than the helicopter // however, we cannot be quicker than the helicopter
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (ubSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingFoot)) / 100) ); iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (fSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingFoot)) / 100) );
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - ustravelbackground_foot) / 100)); iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - stravelbackground_foot) / 100));
} }
// all other types (except air) // all other types (except air)
else if ( fAir ) else if ( fAir )
{ {
// however, we cannot be quicker than the helicopter // however, we cannot be quicker than the helicopter
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (ubSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingVehicle)) / 100) ); // silversurfer: removed because survivalist has nothing to do with flying
// iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (fSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingVehicle)) / 100) );
// yes, this background allows us to fly faster :-) // yes, this background allows us to fly faster :-)
iBestTraverseTime = max( 9, (iBestTraverseTime * (100 - ustravelbackground_air) / 100)); iBestTraverseTime = max( 9, (iBestTraverseTime * (100 - stravelbackground_air) / 100));
} }
else else
{ {
// however, we cannot be quicker than the helicopter // however, we cannot be quicker than the helicopter
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (ubSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingVehicle)) / 100) ); iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (fSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingVehicle)) / 100) );
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - ustravelbackground_car) / 100)); iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - stravelbackground_car) / 100));
} }
} }
} }
+2 -2
View File
@@ -392,8 +392,8 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
STR16 gzIMPMajorTraitsHelpTextsSurvival[] = // TODO.Translate STR16 gzIMPMajorTraitsHelpTextsSurvival[] = // TODO.Translate
{ {
L"+%d%s group traveling speed between sectors if traveling by foot\n", L"-%d%s travel time needed between sectors if traveling by foot\n",
L"+%d%s group traveling speed between sectors if traveling in vehicle (except helicopter)\n", L"-%d%s travel time needed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n", L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n", L"-%d%s weather penalties\n",
L"-%d%s worn out speed of camouflage by water or time\n", L"-%d%s worn out speed of camouflage by water or time\n",
+2 -2
View File
@@ -392,8 +392,8 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
STR16 gzIMPMajorTraitsHelpTextsSurvival[] = STR16 gzIMPMajorTraitsHelpTextsSurvival[] =
{ {
L"+%d%s group traveling speed between sectors if traveling by foot\n", L"-%d%s travel time needed between sectors if traveling by foot\n",
L"+%d%s group traveling speed between sectors if traveling in vehicle (except helicopter)\n", L"-%d%s travel time needed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n", L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n", L"-%d%s weather penalties\n",
//L"+%d%s camouflage effectiveness\n", //L"+%d%s camouflage effectiveness\n",
+2 -2
View File
@@ -393,8 +393,8 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
STR16 gzIMPMajorTraitsHelpTextsSurvival[] = STR16 gzIMPMajorTraitsHelpTextsSurvival[] =
{ {
L"+%d%s Marschgeschwindigkeit der Gruppe zwischen Sektoren zu Fuß\n", L"-%d%s Reisezeit der Gruppe zwischen Sektoren zu Fuß\n",
L"+%d%s Marschgeschwindigkeit der Gruppe zwischen Sektoren bei Benutzung von Fahrzeugen (außer dem Helikopter)\n", L"-%d%s Reisezeit der Gruppe zwischen Sektoren bei Benutzung von Fahrzeugen (außer dem Helikopter)\n",
L"-%d%s weniger Energieverlust beim Reisen zwischen Sektoren\n", L"-%d%s weniger Energieverlust beim Reisen zwischen Sektoren\n",
L"-%d%s Einfluss durch schlechtes Wetter\n", L"-%d%s Einfluss durch schlechtes Wetter\n",
//L"+%d%s Tarnungs-Effektivität\n", //L"+%d%s Tarnungs-Effektivität\n",
+2 -2
View File
@@ -390,8 +390,8 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
STR16 gzIMPMajorTraitsHelpTextsSurvival[] = // TODO.Translate STR16 gzIMPMajorTraitsHelpTextsSurvival[] = // TODO.Translate
{ {
L"+%d%s group traveling speed between sectors if traveling by foot\n", L"-%d%s travel time needed between sectors if traveling by foot\n",
L"+%d%s group traveling speed between sectors if traveling in vehicle (except helicopter)\n", L"-%d%s travel time needed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n", L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n", L"-%d%s weather penalties\n",
L"-%d%s worn out speed of camouflage by water or time\n", L"-%d%s worn out speed of camouflage by water or time\n",
+2 -2
View File
@@ -392,8 +392,8 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
STR16 gzIMPMajorTraitsHelpTextsSurvival[] = // TODO.Translate STR16 gzIMPMajorTraitsHelpTextsSurvival[] = // TODO.Translate
{ {
L"+%d%s group traveling speed between sectors if traveling by foot\n", L"-%d%s travel time needed between sectors if traveling by foot\n",
L"+%d%s group traveling speed between sectors if traveling in vehicle (except helicopter)\n", L"-%d%s travel time needed between sectors if traveling in vehicle (except helicopter)\n",
L"-%d%s less energy spent for travelling between sectors\n", L"-%d%s less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n", L"-%d%s weather penalties\n",
L"-%d%s worn out speed of camouflage by water or time\n", L"-%d%s worn out speed of camouflage by water or time\n",