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
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 zRevisionNumber[16] = { L"Revision 8692" };
CHAR16 zRevisionNumber[16] = { L"Revision 8794" };
// 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
if ( pGroup->usGroupTeam == OUR_TEAM && !fAir && gGameOptions.fNewTraitSystem )
if ( pGroup->usGroupTeam == OUR_TEAM && gGameOptions.fNewTraitSystem )
{
// see if we have any ranger here
UINT8 ubSurvivalistHere = 0;
UINT8 ustravelbackground_foot = 0;
UINT8 ustravelbackground_car = 0;
UINT8 ustravelbackground_air = 0;
// see if we have any survivalist here
float fSurvivalistHere = 0;
// background bonuses
INT8 stravelbackground_foot = 20;
INT8 stravelbackground_car = -20;
INT8 stravelbackground_air = -20;
curr = pGroup->pPlayerList;
while( curr )
{
pSoldier = curr->pSoldier;
ubSurvivalistHere += NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT );
fSurvivalistHere += NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT );
// Flugente: backgrounds
ustravelbackground_foot = max(ustravelbackground_foot, pSoldier->GetBackgroundValue(BG_TRAVEL_FOOT));
ustravelbackground_car = max(ustravelbackground_car, pSoldier->GetBackgroundValue(BG_TRAVEL_CAR));
ustravelbackground_air = max(ustravelbackground_air, pSoldier->GetBackgroundValue(BG_TRAVEL_AIR));
// silversurfer: Why the different calculations and defaults?
// 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.
// 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;
}
// 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
ubSurvivalistHere = min( gSkillTraitValues.ubSVMaxBonusesToTravelSpeed, ubSurvivalistHere );
// no more than certain number of simultaneous bonuses with diminishing returns
fSurvivalistHere = (min(gSkillTraitValues.ubSVMaxBonusesToTravelSpeed, fSurvivalistHere) * 2.5) / (1.0 + min(gSkillTraitValues.ubSVMaxBonusesToTravelSpeed, fSurvivalistHere) * 1.5);
// on foot, the bonus should be higher
if( fFoot )
{
// 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)
else if ( fAir )
{
// 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 :-)
iBestTraverseTime = max( 9, (iBestTraverseTime * (100 - ustravelbackground_air) / 100));
iBestTraverseTime = max( 9, (iBestTraverseTime * (100 - stravelbackground_air) / 100));
}
else
{
// 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
{
L"+%d%s group traveling speed 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 by foot\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 weather penalties\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[] =
{
L"+%d%s group traveling speed 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 by foot\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 weather penalties\n",
//L"+%d%s camouflage effectiveness\n",
+2 -2
View File
@@ -393,8 +393,8 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
STR16 gzIMPMajorTraitsHelpTextsSurvival[] =
{
L"+%d%s Marschgeschwindigkeit 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 zu Fuß\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 Einfluss durch schlechtes Wetter\n",
//L"+%d%s Tarnungs-Effektivität\n",
+2 -2
View File
@@ -390,8 +390,8 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
STR16 gzIMPMajorTraitsHelpTextsSurvival[] = // TODO.Translate
{
L"+%d%s group traveling speed 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 by foot\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 weather penalties\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
{
L"+%d%s group traveling speed 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 by foot\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 weather penalties\n",
L"-%d%s worn out speed of camouflage by water or time\n",