New Trait: SURVIVAL (new minor trait) gets the non-weapon parts of the ranger trait.

Requires GameDir >= r2213.

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7756 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2015-02-27 23:23:03 +00:00
parent 3f615cc68b
commit 8bfb14e90a
48 changed files with 700 additions and 768 deletions
+11 -10
View File
@@ -2320,16 +2320,7 @@ void LoadSkillTraitsExternalSettings()
gSkillTraitValues.ubRAPumpShotgunsAPsReduction = iniReader.ReadInteger("Ranger","PUMP_SHOTGUNS_APS_REDUCTION", 25, 0, 45);
gSkillTraitValues.ubRAFiringSpeedBonusShotguns = iniReader.ReadInteger("Ranger","FIRING_SPEED_BONUS_SHOTGUNS", 10, 0, 45);
gSkillTraitValues.ubRAAimClicksAdded = iniReader.ReadInteger("Ranger","POSSIBLE_AIM_CLICK_ADDED_SHOTGUNS", 1, 0, 3);
gSkillTraitValues.ubRAGroupTimeSpentForTravellingFoot = iniReader.ReadInteger("Ranger","GROUP_TIME_SPENT_FOR_TRAVELLING_BY_FOOT_REDUCTION", 20, 0, 100);
gSkillTraitValues.ubRAGroupTimeSpentForTravellingVehicle = iniReader.ReadInteger("Ranger","GROUP_TIME_SPENT_FOR_TRAVELLING_IN_VEHICLE_REDUCTION", 10, 0, 100);
gSkillTraitValues.ubRAMaxBonusesToTravelSpeed = iniReader.ReadInteger("Ranger","MAX_STACKABLE_LESS_TRAVEL_TIME_BONUSES", 2, 0, 20);
gSkillTraitValues.ubRABreathForTravellingReduction = iniReader.ReadInteger("Ranger","ENERGY_SPENT_TRAVEL_REDUCTION", 30, 0, 100);
gSkillTraitValues.ubRAWeatherPenaltiesReduction = iniReader.ReadInteger("Ranger","WEATHER_PENALTIES_REDUCTION", 50, 0, 100);
//gSkillTraitValues.ubRACamoEffectivenessBonus = iniReader.ReadInteger("Ranger","CAMO_EFFECTIVENESS_BONUS_PERCENT", 10, 0, 100);
gSkillTraitValues.ubRACamoWornountSpeedReduction = iniReader.ReadInteger("Ranger","CAMO_WORNOUT_SPEED_REDUCTION", 50, 0, 100);
gSkillTraitValues.usTrackerMaxRange = iniReader.ReadInteger( "Ranger", "TRACKER_MAX_RANGE", 30, 0, 50 );
gSkillTraitValues.usTrackerAbility = iniReader.ReadInteger( "Ranger", "TRACKER_ABILITY", 30, 0, 50 );
// GUNSLINGER
gSkillTraitValues.ubGSFiringSpeedBonusPistols = iniReader.ReadInteger("Gunslinger","FIRING_SPEED_BONUS_PISTOLS", 15, 0, 45);
gSkillTraitValues.ubGSEffectiveRangeBonusPistols = iniReader.ReadInteger("Gunslinger","FEFFECTIVE_RANGE_BONUS_PISTOLS", 10, 0, 100);
@@ -2531,6 +2522,16 @@ void LoadSkillTraitsExternalSettings()
gSkillTraitValues.fSNTPrisonSnitchInterrogationMultiplier = iniReader.ReadFloat("Snitch","PRISON_SNITCH_INTERROGATION_MULTIPLIER", 3.0, 0.0, 10.0);
gSkillTraitValues.fSNTPrisonSnitchGuardStrengthMultiplier = iniReader.ReadFloat("Snitch","PRISON_SNITCH_GUARD_STRENGTH_MULTIPLIER", 3.0, 0.0, 10.0);
// Flugente: SURVIVAL
gSkillTraitValues.ubSVGroupTimeSpentForTravellingFoot = iniReader.ReadInteger( "Survival", "GROUP_TIME_SPENT_FOR_TRAVELLING_BY_FOOT_REDUCTION", 20, 0, 100 );
gSkillTraitValues.ubSVGroupTimeSpentForTravellingVehicle = iniReader.ReadInteger( "Survival", "GROUP_TIME_SPENT_FOR_TRAVELLING_IN_VEHICLE_REDUCTION", 10, 0, 100 );
gSkillTraitValues.ubSVMaxBonusesToTravelSpeed = iniReader.ReadInteger( "Survival", "MAX_STACKABLE_LESS_TRAVEL_TIME_BONUSES", 2, 0, 20 );
gSkillTraitValues.ubSVBreathForTravellingReduction = iniReader.ReadInteger( "Survival", "ENERGY_SPENT_TRAVEL_REDUCTION", 30, 0, 100 );
gSkillTraitValues.ubSVWeatherPenaltiesReduction = iniReader.ReadInteger( "Survival", "WEATHER_PENALTIES_REDUCTION", 50, 0, 100 );
gSkillTraitValues.ubSVCamoWornountSpeedReduction = iniReader.ReadInteger( "Survival", "CAMO_WORNOUT_SPEED_REDUCTION", 50, 0, 100 );
gSkillTraitValues.usSVTrackerMaxRange = iniReader.ReadInteger( "Survival", "TRACKER_MAX_RANGE", 30, 0, 50 );
gSkillTraitValues.usSVTrackerAbility = iniReader.ReadInteger( "Survival", "TRACKER_ABILITY", 30, 0, 50 );
}
//DBrot: Grids
void LoadModSettings(){
+11 -11
View File
@@ -1614,17 +1614,8 @@ typedef struct
UINT8 ubRABonusCtHRifles;
UINT8 ubRABonusCtHShotguns;
UINT8 ubRAPumpShotgunsAPsReduction;
UINT8 ubRAGroupTimeSpentForTravellingFoot;
UINT8 ubRAGroupTimeSpentForTravellingVehicle;
UINT8 ubRAMaxBonusesToTravelSpeed;
UINT8 ubRABreathForTravellingReduction;
UINT8 ubRAWeatherPenaltiesReduction;
//UINT8 ubRACamoEffectivenessBonus;
UINT8 ubRACamoWornountSpeedReduction;
UINT8 ubRAFiringSpeedBonusShotguns;
UINT8 ubRAAimClicksAdded;
UINT16 usTrackerMaxRange;
UINT8 usTrackerAbility;
// GUNSLINGER
UINT8 ubGSFiringSpeedBonusPistols;
@@ -1809,8 +1800,7 @@ typedef struct
INT8 sVOListeningHearingBonus;
BOOLEAN fVOJammingBlocksRemoteBombs;
BOOLEAN fVOEnemyVOSetsOffRemoteBombs;
// SNITCH
UINT8 ubSNTBaseChance; // Base chance that snitch will inform about certain event (in percents)
FLOAT fSNTMercOpinionAboutSnitchBonusModifier; // How much chance is influenced by relation between snitch and target
@@ -1824,6 +1814,16 @@ typedef struct
UINT8 ubSNTHearingRangeBonus; // Hearing range bonus
FLOAT fSNTPrisonSnitchInterrogationMultiplier; // Undercover snitch interrogation effectivness multiplier (compared to normal interrogation)
FLOAT fSNTPrisonSnitchGuardStrengthMultiplier; // Undercover snitch guarding effectivness multiplier (compared to normal guards)
// SURVIVAL
UINT8 ubSVGroupTimeSpentForTravellingFoot;
UINT8 ubSVGroupTimeSpentForTravellingVehicle;
UINT8 ubSVMaxBonusesToTravelSpeed;
UINT8 ubSVBreathForTravellingReduction;
UINT8 ubSVWeatherPenaltiesReduction;
UINT8 ubSVCamoWornountSpeedReduction;
UINT16 usSVTrackerMaxRange;
UINT8 usSVTrackerAbility;
} SKILL_TRAIT_VALUES;
// HEADROCK HAM 4: Constants used as coefficients by the various parts of the new CTH system.
+2 -2
View File
@@ -501,7 +501,7 @@ void AssignBackgroundHelpText( UINT16 ubNumber, MOUSE_REGION* pMouseregion )
}
else if ( BG_TRACKER_ABILITY == i && zBackground[ubNumber].value[i] )
{
swprintf( atStr, szBackgroundText_Value[i], (UINT16)((gSkillTraitValues.usTrackerMaxRange * zBackground[ubNumber].value[i]) / 100) );
swprintf( atStr, szBackgroundText_Value[i], (UINT16)((gSkillTraitValues.usSVTrackerMaxRange * zBackground[ubNumber].value[i]) / 100) );
wcscat( apStr, atStr );
}
else if ( zBackground[ ubNumber ].value[i] )
@@ -611,7 +611,7 @@ BOOLEAN IsBackGroundAllowed( UINT16 ubNumber )
return FALSE;
}
if ( SkillsList[0] == RANGER_NT || SkillsList[1] == RANGER_NT || SkillsList[2] == RANGER_NT )
if ( SkillsList[0] == SURVIVAL_NT || SkillsList[1] == SURVIVAL_NT || SkillsList[2] == SURVIVAL_NT )
{
if ( zBackground[ ubNumber ].value[BG_PERC_CAMO] < 0 )
return FALSE;
+3 -7
View File
@@ -301,24 +301,20 @@ void AddSkillToSkillList( INT8 bSkill )
SkillsList[ iLastElementInSkillsList ] = ( INT32 )bSkill;
// increment attitude list counter
iLastElementInSkillsList++;
++iLastElementInSkillsList;
}
return;
}
// Kaiden : Added to clear the list when first visiting the IMP homepage,
// Or for each visit there after.
void ClearAllSkillsList( void )
{
INT32 iLoop;
for ( iLoop = 0; iLoop < ATTITUDE_LIST_SIZE; iLoop++ ) // SANDRO - better clear everything to be sure
for ( INT32 iLoop = 0; iLoop < ATTITUDE_LIST_SIZE; ++iLoop ) // SANDRO - better clear everything to be sure
{
SkillsList[ iLoop ] = 0;
}
iLastElementInSkillsList = 0;
return;
}
+4
View File
@@ -799,6 +799,10 @@ void GiveItemsToPC( UINT8 ubProfileId )
{
GiveIMPRandomItems(pProfile,IMP_RADIO_OPERATOR);
}
if ( PROFILE_HAS_SKILL_TRAIT( ubProfileId, SURVIVAL_NT ) )
{
GiveIMPRandomItems( pProfile, IMP_SURVIVAL );
}
}
else
{
+1
View File
@@ -718,6 +718,7 @@ void CalculatePossibleItems()
case IMP_SKILL_TRAITS_NEW_TEACHING: AddItemCategoryToPossibleGear( IMP_TEACHING ); break;
case IMP_SKILL_TRAITS_NEW_SCOUTING: AddItemCategoryToPossibleGear( IMP_SCOUTING ); break;
case IMP_SKILL_TRAITS_NEW_RADIO_OPERATOR: AddItemCategoryToPossibleGear( IMP_RADIO_OPERATOR ); break;
case IMP_SKILL_TRAITS_NEW_SURVIVAL: AddItemCategoryToPossibleGear( IMP_SURVIVAL ); break;
default:
break;
+6 -1
View File
@@ -74,6 +74,7 @@ UINT8 gusNewMinorTraitRemap[IMP_SKILL_TRAITS_NEW_NUMBER_MINOR_SKILLS] =
TEACHING_NT, // IMP_SKILL_TRAITS_NEW_TEACHING
SCOUTING_NT, // IMP_SKILL_TRAITS_NEW_SCOUTING
RADIO_OPERATOR_NT, // IMP_SKILL_TRAITS_NEW_RADIO_OPERATOR
SURVIVAL_NT, // IMP_SKILL_TRAITS_NEW_SURVIVAL
NO_SKILLTRAIT_NT, // IMP_SKILL_TRAITS_NEW_MINOR_NONE
};
@@ -462,7 +463,7 @@ void IMPMinorTraitDisplaySkills()
usPosX = IMP_MINOR_TRAIT__LEFT_COLUMN_START_X + IMP_MINOR_TRAIT__TEXT_OFFSET_X;
usPosY = IMP_MINOR_TRAIT__LEFT_COLUMN_START_Y + IMP_MINOR_TRAIT__TEXT_OFFSET_Y;
for( uiCnt=0; uiCnt<IMP_SKILL_TRAITS_NEW_NUMBER_MINOR_SKILLS; uiCnt++ )
for( uiCnt=0; uiCnt<IMP_SKILL_TRAITS_NEW_NUMBER_MINOR_SKILLS; ++uiCnt )
{
usBoxPosX = usPosX - IMP_MINOR_TRAIT__GREY_BOX_OFFSET_X;
usBoxPosY = usPosY - IMP_MINOR_TRAIT__GREY_BOX_OFFSET_Y;
@@ -674,6 +675,10 @@ void AddSelectedMinorTraitsToSkillsList()
case IMP_SKILL_TRAITS_NEW_RADIO_OPERATOR:
AddSkillToSkillList( RADIO_OPERATOR_NT );
break;
case IMP_SKILL_TRAITS_NEW_SURVIVAL:
AddSkillToSkillList( SURVIVAL_NT );
break;
default:
break;
+1
View File
@@ -22,6 +22,7 @@ enum
IMP_SKILL_TRAITS_NEW_TEACHING,
IMP_SKILL_TRAITS_NEW_SCOUTING,
IMP_SKILL_TRAITS_NEW_RADIO_OPERATOR, // added by Flugente
IMP_SKILL_TRAITS_NEW_SURVIVAL, // added by Flugente
//////
IMP_SKILL_TRAITS_NEW_MINOR_NONE,
IMP_SKILL_TRAITS_NEW_NUMBER_MINOR_SKILLS,
+280 -403
View File
@@ -63,7 +63,7 @@
#define NEWTRAIT_EXPERT_OFFSET 12 // Flugente: offset between normal and expert trait strings
// Flugente: Due to the unfortunate nature of our enums, they do not match the trait numbers. We thus have to remap them when obtining their description
// Flugente: Due to the unfortunate nature of our enums, they do not match the trait numbers. We thus have to remap them when obtaining their description
UINT8 gusNewMajorTraitRemap[IMP_SKILL_TRAITS_NEW_NUMBER_MAJOR_SKILLS] =
{
AUTO_WEAPONS_NT, // IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS
@@ -121,13 +121,11 @@ void AddImpSkillTraitButtons();
void HandleSkillTraitButtonStates( );
void HandleIMPSkillTraitAnswers( UINT32 uiSkillPressed, BOOLEAN fSecondTrait );
void IMPSkillTraitDisplaySkills();
BOOLEAN ShouldTraitBeSkipped( UINT32 uiTrait );
BOOLEAN ShouldTraitBeSkipped( UINT32 uiTrait );
//void AddSelectedSkillsToSkillsList(); // SANDRO - second declaration not needed
void HandleLastSelectedTraits( INT8 bNewTrait );
INT8 GetLastSelectedSkill( void );
BOOLEAN CameBackToSpecialtiesPageButNotFinished();
BOOLEAN DoesSkillHaveExpertLevel( UINT32 uiSkillTrait );
INT8 GetLastSelectedSkill( void );
BOOLEAN CameBackToSpecialtiesPageButNotFinished();
MOUSE_REGION gMR_SkillTraitHelpTextRegions[IMP_SKILL_TRAITS_NEW_NUMBER_MAJOR_SKILLS];
//ppp
@@ -157,9 +155,7 @@ void EnterIMPSkillTrait( void )
Assert( 0 );
return;
}
giIMPSkillTraitFinsihButtonImage = LoadButtonImage( "LAPTOP\\button_5.sti" ,-1,0,-1,1,-1 );
giIMPSkillTraitFinsihButton = CreateIconAndTextButton( giIMPSkillTraitFinsihButtonImage, pImpButtonText[ 24 ], FONT12ARIAL,
FONT_WHITE, DEFAULT_SHADOW,
@@ -167,9 +163,7 @@ void EnterIMPSkillTrait( void )
TEXT_CJUSTIFIED,
LAPTOP_SCREEN_UL_X + ( 350 ), LAPTOP_SCREEN_WEB_UL_Y + ( 340 ), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnIMPSkillTraitFinishCallback );
SetButtonCursor( giIMPSkillTraitFinsihButton, CURSOR_WWW);
//if we are not DONE and are just reviewing
@@ -193,7 +187,7 @@ void EnterIMPSkillTrait( void )
// add regions for help texts
UINT16 usPosX = IMP_SKILL_TRAIT__LEFT_COLUMN_START_X + 62;
UINT16 usPosY = IMP_SKILL_TRAIT__LEFT_COLUMN_START_Y + 8;
for( UINT32 uiCnt=0; uiCnt < (UINT8)( gGameOptions.fNewTraitSystem ? IMP_SKILL_TRAITS_NEW_NUMBER_MAJOR_SKILLS : IMP_SKILL_TRAITS__NUMBER_SKILLS ); uiCnt++ )
for( UINT32 uiCnt=0; uiCnt < (UINT8)( gGameOptions.fNewTraitSystem ? IMP_SKILL_TRAITS_NEW_NUMBER_MAJOR_SKILLS : IMP_SKILL_TRAITS__NUMBER_SKILLS ); ++uiCnt )
{
if( ShouldTraitBeSkipped( uiCnt ) )
{
@@ -327,7 +321,7 @@ void AddImpSkillTraitButtons()
usPosX = IMP_SKILL_TRAIT__LEFT_COLUMN_START_X;
usPosY = IMP_SKILL_TRAIT__LEFT_COLUMN_START_Y;
for(iCnt = 0; iCnt < (iCntMax); iCnt++)
for(iCnt = 0; iCnt < iCntMax; ++iCnt)
{
//reset
giIMPSkillTraitAnswerButton[iCnt] = -1;
@@ -392,7 +386,7 @@ void AddImpSkillTraitButtons()
usPosX = IMP_SKILL_TRAIT__LEFT_COLUMN_START_X + 26;
usPosY = IMP_SKILL_TRAIT__LEFT_COLUMN_START_Y;
for(iCnt = 0; iCnt < (iCntMax); iCnt++)
for(iCnt = 0; iCnt < iCntMax; ++iCnt)
{
//reset
giIMPSkillTraitAnswerButton2[iCnt] = -1;
@@ -527,7 +521,7 @@ void HandleIMPSkillTraitAnswers( UINT32 uiSkillPressed, BOOLEAN fSecondTrait )
}
}
// if cannot have expert level of skill, don't continue
else if ( gfSkillTraitQuestions2[ uiSkillPressed ] && !DoesSkillHaveExpertLevel( uiSkillPressed ) )
else if ( gfSkillTraitQuestions2[uiSkillPressed] && !TwoStagedTrait( uiSkillPressed ) )
{
//dont need to do anything
return;
@@ -559,7 +553,7 @@ void HandleIMPSkillTraitAnswers( UINT32 uiSkillPressed, BOOLEAN fSecondTrait )
if ( gSkillTraitValues.ubNumberOfMajorTraitsAllowedForIMP == 2 )
{
//loop through all the skill and reset them
for( uiCnt=0; uiCnt<uiCntMax; uiCnt++ )
for( uiCnt=0; uiCnt<uiCntMax; ++uiCnt )
{
gfSkillTraitQuestions[ uiCnt ] = FALSE;
}
@@ -629,7 +623,7 @@ void HandleIMPSkillTraitAnswers( UINT32 uiSkillPressed, BOOLEAN fSecondTrait )
gfSkillTraitQuestions2[ uiSkillPressed ] = FALSE;
BOOLEAN fNoSkillSelected = TRUE;
for ( uiCnt=0; uiCnt<(uiCntMax-1); uiCnt++ )
for ( uiCnt=0; uiCnt<(uiCntMax-1); ++uiCnt )
{
if ( gfSkillTraitQuestions2[ uiCnt ] == TRUE )
fNoSkillSelected = FALSE;
@@ -641,7 +635,7 @@ void HandleIMPSkillTraitAnswers( UINT32 uiSkillPressed, BOOLEAN fSecondTrait )
}
}
// if cannot have expert level of skill, don't continue
else if ( gfSkillTraitQuestions[ uiSkillPressed ] && !DoesSkillHaveExpertLevel( uiSkillPressed ) )
else if ( gfSkillTraitQuestions[uiSkillPressed] && !TwoStagedTrait( uiSkillPressed ) )
{
//dont need to do anything
return;
@@ -753,7 +747,7 @@ INT8 CountNumSkillTraitsSelected( BOOLEAN fIncludeNoneSkill )
else
uiCntMax = IMP_SKILL_TRAITS__NUMBER_SKILLS;
for( uiCnt=0; uiCnt < uiCntMax; uiCnt++ )
for( uiCnt=0; uiCnt < uiCntMax; ++uiCnt )
{
if( !fIncludeNoneSkill && (uiCnt == (uiCntMax-1)) )
continue;
@@ -761,11 +755,11 @@ INT8 CountNumSkillTraitsSelected( BOOLEAN fIncludeNoneSkill )
//if the skill is selected ( ie depressed )
if( gfSkillTraitQuestions[ uiCnt ] )
{
iNumberSkills++;
++iNumberSkills;
}
if( gfSkillTraitQuestions2[ uiCnt ] )
{
iNumberSkills++;
++iNumberSkills;
}
}
@@ -775,9 +769,7 @@ INT8 CountNumSkillTraitsSelected( BOOLEAN fIncludeNoneSkill )
void HandleSkillTraitButtonStates( )
{
INT32 uiCnt;
for( uiCnt=0; uiCnt<(gGameOptions.fNewTraitSystem ? IMP_SKILL_TRAITS_NEW_NUMBER_MAJOR_SKILLS : IMP_SKILL_TRAITS__NUMBER_SKILLS); uiCnt++ )
for ( INT32 uiCnt = 0; uiCnt<(gGameOptions.fNewTraitSystem ? IMP_SKILL_TRAITS_NEW_NUMBER_MAJOR_SKILLS : IMP_SKILL_TRAITS__NUMBER_SKILLS); ++uiCnt )
{
//if the merc is a FEMALE, skip this skill cause there isnt any fenmal martial artists
if( ShouldTraitBeSkipped( uiCnt ) )
@@ -1016,34 +1008,6 @@ BOOLEAN ShouldTraitBeSkipped( UINT32 uiTrait )
}
}
BOOLEAN DoesSkillHaveExpertLevel( UINT32 uiSkillTrait )
{
if( gGameOptions.fNewTraitSystem )
{
// WANNE: Yes we have no animation, but the Trait bonus also works with the missing animations.
/*
// WANNE: No material arts allowed for big body types and females, because we don't have a material art animation on big body types!
if (uiSkillTrait == IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS && (!fCharacterIsMale || bBigBodySelected()))
return (FALSE);
*/
return( TRUE );
}
else
{
if (uiSkillTrait == IMP_SKILL_TRAITS__ELECTRONICS ||
uiSkillTrait == IMP_SKILL_TRAITS__AMBIDEXTROUS ||
uiSkillTrait == IMP_SKILL_TRAITS__CAMO )
{
return( FALSE );
}
return( TRUE );
}
return( TRUE );
}
void AddSelectedSkillsToSkillsList()
{
INT32 uiCnt;
@@ -1346,44 +1310,36 @@ INT32 StrengthRequiredDueToMajorSkills( void )
return 0;
}
INT32 minreq = 0;
// Check first skill trait (plus second for double trait)
if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] )
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
return (70);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] )
minreq = max( minreq, 70 );
else
return (55);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
return (60);
else
return (45);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
return (55);
else
return (40);
}
// Check the second skill trait
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
{
return (55);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
{
return (45);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
{
return (40);
minreq = max( minreq, 55 );
}
return(0);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] )
minreq = max( minreq, 60 );
else
minreq = max( minreq, 45 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] )
minreq = max( minreq, 55 );
else
minreq = max( minreq, 40 );
}
return minreq;
}
INT32 AgilityRequiredDueToMajorSkills( void )
{
// Only for new trait system
@@ -1392,44 +1348,36 @@ INT32 AgilityRequiredDueToMajorSkills( void )
return 0;
}
INT32 minreq = 0;
// Check first skill trait (plus second for double trait)
if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] )
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
return (70);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] )
minreq = max( minreq, 70 );
else
return (55);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_GUNSLINGER ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_GUNSLINGER ])
return (65);
else
return (50);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_RANGER ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_RANGER ])
return (60);
else
return (45);
}
// Check the second skill trait
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
{
return (55);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_GUNSLINGER ])
{
return (50);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_RANGER ])
{
return (45);
minreq = max( minreq, 55 );
}
return(0);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_GUNSLINGER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_GUNSLINGER] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_GUNSLINGER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_GUNSLINGER] )
minreq = max( minreq, 65 );
else
minreq = max( minreq, 50 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_RANGER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_RANGER] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_RANGER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_RANGER] )
minreq = max( minreq, 60 );
else
minreq = max( minreq, 45 );
}
return minreq;
}
INT32 DexterityRequiredDueToMajorSkills( void )
{
// Only for new trait system
@@ -1438,88 +1386,68 @@ INT32 DexterityRequiredDueToMajorSkills( void )
return 0;
}
INT32 minreq = 0;
// Check first skill trait (plus second for double trait)
if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] )
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
return (70);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] )
minreq = max( minreq, 70 );
else
return (55);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_PROF_SNIPER ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_PROF_SNIPER ])
return (70);
else
return (55);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
return (65);
else
return (50);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_GUNSLINGER ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_GUNSLINGER ])
return (65);
else
return (50);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
return (65);
else
return (50);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_DOCTOR ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_DOCTOR ])
return (65);
else
return (50);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
return (60);
else
return (45);
}
// Check the second skill trait
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
{
return (55);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_PROF_SNIPER ])
{
return (55);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
{
return (50);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_GUNSLINGER ])
{
return (50);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
{
return (50);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_DOCTOR ])
{
return (50);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
{
return (45);
minreq = max( minreq, 55 );
}
return(0);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] )
minreq = max( minreq, 70 );
else
minreq = max( minreq, 55 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] )
minreq = max( minreq, 65 );
else
minreq = max( minreq, 50 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_GUNSLINGER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_GUNSLINGER] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_GUNSLINGER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_GUNSLINGER] )
minreq = max( minreq, 65 );
else
minreq = max( minreq, 50 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_TECHNICIAN] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_TECHNICIAN] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_TECHNICIAN] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_TECHNICIAN] )
minreq = max( minreq, 65 );
else
minreq = max( minreq, 50 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_DOCTOR] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_DOCTOR] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_DOCTOR] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_DOCTOR] )
minreq = max( minreq, 65 );
else
minreq = max( minreq, 50 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] )
minreq = max( minreq, 60 );
else
minreq = max( minreq, 45 );
}
return minreq;
}
INT32 HealthRequiredDueToMajorSkills( void )
{
// Only for new trait system
@@ -1528,44 +1456,36 @@ INT32 HealthRequiredDueToMajorSkills( void )
return 0;
}
INT32 minreq = 0;
// Check first skill trait (plus second for double trait)
if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_RANGER ])
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_RANGER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_RANGER] )
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_RANGER ])
return (70);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_RANGER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_RANGER] )
minreq = max( minreq, 70 );
else
return (55);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
return (60);
else
return (45);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
return (60);
else
return (45);
}
// Check the second skill trait
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_RANGER ])
{
return (55);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
{
return (45);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS ])
{
return (45);
minreq = max( minreq, 55 );
}
return(0);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] )
minreq = max( minreq, 60 );
else
minreq = max( minreq, 45 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS] )
minreq = max( minreq, 60 );
else
minreq = max( minreq, 45 );
}
return minreq;
}
INT32 LeadershipRequiredDueToMajorSkills( void )
{
// Only for new trait system
@@ -1574,43 +1494,34 @@ INT32 LeadershipRequiredDueToMajorSkills( void )
return 0;
}
INT32 minreq = 0;
// Check first skill trait (plus second for double trait)
if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_SQUADLEADER ])
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_SQUADLEADER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_SQUADLEADER] )
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_SQUADLEADER ])
return (65);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_SQUADLEADER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_SQUADLEADER] )
minreq = max( minreq, 65 );
else
return (50);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_RANGER ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_RANGER ])
return (50);
else
return (35);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_COVERT ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_COVERT ])
return (45);
else
return (30);
}
// Check the second skill trait
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_SQUADLEADER ])
{
return (50);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_RANGER ])
{
return (35);
}
else if ( gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_COVERT] )
{
return (30);
minreq = max( minreq, 50 );
}
return(0);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_RANGER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_RANGER] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_RANGER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_RANGER] )
minreq = max( minreq, 50 );
else
minreq = max( minreq, 35 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_COVERT] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_COVERT] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_COVERT] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_COVERT] )
minreq = max( minreq, 45 );
else
minreq = max( minreq, 30 );
}
return minreq;
}
INT32 WisdomRequiredDueToMajorSkills( void )
@@ -1621,73 +1532,60 @@ INT32 WisdomRequiredDueToMajorSkills( void )
return 0;
}
INT32 minreq = 0;
// Check first skill trait (plus second for double trait)
if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_SQUADLEADER ])
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_SQUADLEADER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_SQUADLEADER] )
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_SQUADLEADER ])
return (75);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_SQUADLEADER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_SQUADLEADER] )
minreq = max( minreq, 75 );
else
return (60);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_COVERT ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_COVERT ])
return (75);
else
return (60);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
return (70);
else
return (55);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_DOCTOR ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_DOCTOR ])
return (70);
else
return (55);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_PROF_SNIPER ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_PROF_SNIPER ])
return (65);
else
return (50);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
return (60);
else
return (45);
}
// Check the second skill trait
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_SQUADLEADER ])
{
return (60);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
{
return (55);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_DOCTOR ])
{
return (55);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_PROF_SNIPER ])
{
return (50);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
{
return (45);
minreq = max( minreq, 60 );
}
return(0);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_COVERT] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_COVERT] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_COVERT] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_COVERT] )
minreq = max( minreq, 75 );
else
minreq = max( minreq, 60 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] )
minreq = max( minreq, 70 );
else
minreq = max( minreq, 55 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_DOCTOR] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_DOCTOR] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_DOCTOR] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_DOCTOR] )
minreq = max( minreq, 70 );
else
minreq = max( minreq, 55 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] )
minreq = max( minreq, 65 );
else
minreq = max( minreq, 50 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_TECHNICIAN] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_TECHNICIAN] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_TECHNICIAN] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_TECHNICIAN] )
minreq = max( minreq, 60 );
else
minreq = max( minreq, 45 );
}
return minreq;
}
INT32 MarksmanshipRequiredDueToMajorSkills( void )
{
// Only for new trait system
@@ -1696,55 +1594,44 @@ INT32 MarksmanshipRequiredDueToMajorSkills( void )
return 0;
}
INT32 minreq = 0;
// Check first skill trait (plus second for double trait)
if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_PROF_SNIPER ])
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] )
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_PROF_SNIPER ])
return (80);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_PROF_SNIPER] )
minreq = max( minreq, 80 );
else
return (65);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_RANGER ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_RANGER ])
return (70);
else
return (55);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_GUNSLINGER ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_GUNSLINGER ])
return (70);
else
return (55);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
return (60);
else
return (45);
}
// Check the second skill trait
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_PROF_SNIPER ])
{
return (65);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_RANGER ])
{
return (55);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_GUNSLINGER ])
{
return (55);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS ])
{
return (45);
minreq = max( minreq, 65 );
}
return(0);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_RANGER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_RANGER] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_RANGER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_RANGER] )
minreq = max( minreq, 70 );
else
minreq = max( minreq, 55 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_GUNSLINGER] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_GUNSLINGER] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_GUNSLINGER] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_GUNSLINGER] )
minreq = max( minreq, 70 );
else
minreq = max( minreq, 55 );
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS] )
minreq = max( minreq, 60 );
else
minreq = max( minreq, 45 );
}
return minreq;
}
INT32 MechanicalRequiredDueToMajorSkills( void )
{
// Only for new trait system
@@ -1753,22 +1640,20 @@ INT32 MechanicalRequiredDueToMajorSkills( void )
return 0;
}
INT32 minreq = 0;
// Check first skill trait (plus second for double trait)
if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_TECHNICIAN] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_TECHNICIAN] )
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
return (60);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_TECHNICIAN] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_TECHNICIAN] )
minreq = max( minreq, 60 );
else
return (45);
}
// Check the second skill trait
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
{
return (45);
minreq = max( minreq, 45 );
}
return(0);
return minreq;
}
INT32 MedicalRequiredDueToMajorSkills( void )
{
// Only for new trait system
@@ -1777,22 +1662,20 @@ INT32 MedicalRequiredDueToMajorSkills( void )
return 0;
}
INT32 minreq = 0;
// Check first skill trait (plus second for double trait)
if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_DOCTOR ])
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_DOCTOR] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_DOCTOR] )
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_DOCTOR ])
return (60);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_DOCTOR] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_DOCTOR] )
minreq = max( minreq, 60 );
else
return (45);
}
// Check the second skill trait
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_DOCTOR ])
{
return (45);
minreq = max( minreq, 45 );
}
return(0);
return minreq;
}
INT32 ExplosivesRequiredDueToMajorSkills( void )
{
// Only for new trait system
@@ -1801,30 +1684,24 @@ INT32 ExplosivesRequiredDueToMajorSkills( void )
return 0;
}
INT32 minreq = 0;
// Check first skill trait (plus second for double trait)
if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] )
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
return (60);
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS] )
minreq = max( minreq, 60 );
else
return (45);
}
else if (gfSkillTraitQuestions[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
{
if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
return (60);
else
return (45);
}
// Check the second skill trait
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS ])
{
return (45);
}
else if (gfSkillTraitQuestions2[ IMP_SKILL_TRAITS_NEW_TECHNICIAN ])
{
return (45);
minreq = max( minreq, 45 );
}
return(0);
}
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_TECHNICIAN] || gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_TECHNICIAN] )
{
if ( gfSkillTraitQuestions[IMP_SKILL_TRAITS_NEW_TECHNICIAN] && gfSkillTraitQuestions2[IMP_SKILL_TRAITS_NEW_TECHNICIAN] )
minreq = max( minreq, 60 );
else
minreq = max( minreq, 45 );
}
return minreq;
}
+6
View File
@@ -4695,6 +4695,12 @@ void HandleIMPCharProfileResultsMessage( void)
wcscpy(pString, MissingIMPSkillsDescriptions[12]);
AddEmailRecordToList( pString );
}
// Survival
if ( ProfileHasSkillTrait( iCurrentIMPSlot, SURVIVAL_NT ) > 0 )
{
wcscpy( pString, MissingIMPSkillsDescriptions[13] );
AddEmailRecordToList( pString );
}
}
else
{
+38 -36
View File
@@ -7453,42 +7453,6 @@ void AssignPersonnelSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLeve
wcscat( apStr, atStr );
}
if( gSkillTraitValues.ubRAGroupTimeSpentForTravellingFoot != 0 )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[6], ( gSkillTraitValues.ubRAGroupTimeSpentForTravellingFoot * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]);
wcscat( apStr, atStr );
}
if( gSkillTraitValues.ubRAGroupTimeSpentForTravellingVehicle != 0 )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[7], ( gSkillTraitValues.ubRAGroupTimeSpentForTravellingVehicle * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]);
wcscat( apStr, atStr );
}
if( gSkillTraitValues.ubRABreathForTravellingReduction != 0 )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[8], ( gSkillTraitValues.ubRABreathForTravellingReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]);
wcscat( apStr, atStr );
}
if( gSkillTraitValues.ubRAWeatherPenaltiesReduction != 0 )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[9], ( gSkillTraitValues.ubRAWeatherPenaltiesReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]);
wcscat( apStr, atStr );
}
//if( gSkillTraitValues.ubRACamoEffectivenessBonus != 0 )
//{
// swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[10], ( gSkillTraitValues.ubRACamoEffectivenessBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]);
// wcscat( apStr, atStr );
//}
if( gSkillTraitValues.ubRACamoWornountSpeedReduction != 0 )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[11], ( gSkillTraitValues.ubRACamoWornountSpeedReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]);
wcscat( apStr, atStr );
}
if ( gSkillTraitValues.usTrackerMaxRange && gSkillTraitValues.usTrackerAbility )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[12], (gSkillTraitValues.usTrackerAbility * (fExpertLevel ? 2 : 1) * gSkillTraitValues.usTrackerMaxRange / 100) );
wcscat( apStr, atStr );
}
break;
}
@@ -8298,6 +8262,44 @@ void AssignPersonnelSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLeve
}
break;
}
case SURVIVAL_NT:
{
swprintf( apStr, L"" );
if ( gSkillTraitValues.ubSVGroupTimeSpentForTravellingFoot != 0 )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsSurvival[0], gSkillTraitValues.ubSVGroupTimeSpentForTravellingFoot, sSpecialCharacters[0] );
wcscat( apStr, atStr );
}
if ( gSkillTraitValues.ubSVGroupTimeSpentForTravellingVehicle != 0 )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsSurvival[1], gSkillTraitValues.ubSVGroupTimeSpentForTravellingVehicle, sSpecialCharacters[0] );
wcscat( apStr, atStr );
}
if ( gSkillTraitValues.ubSVBreathForTravellingReduction != 0 )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsSurvival[2], gSkillTraitValues.ubSVBreathForTravellingReduction, sSpecialCharacters[0] );
wcscat( apStr, atStr );
}
if ( gSkillTraitValues.ubSVWeatherPenaltiesReduction != 0 )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsSurvival[3], gSkillTraitValues.ubSVWeatherPenaltiesReduction, sSpecialCharacters[0] );
wcscat( apStr, atStr );
}
if ( gSkillTraitValues.ubSVCamoWornountSpeedReduction != 0 )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsSurvival[4], gSkillTraitValues.ubSVCamoWornountSpeedReduction, sSpecialCharacters[0] );
wcscat( apStr, atStr );
}
if ( gSkillTraitValues.usSVTrackerMaxRange && gSkillTraitValues.usSVTrackerAbility )
{
swprintf( atStr, gzIMPMajorTraitsHelpTextsSurvival[5], (gSkillTraitValues.usSVTrackerAbility * gSkillTraitValues.usSVTrackerMaxRange / 100) );
wcscat( apStr, atStr );
}
break;
}
case NO_SKILLTRAIT_NT:
{
swprintf( apStr, L"" );
+2 -2
View File
@@ -5261,9 +5261,9 @@ void FatigueCharacter( SOLDIERTYPE *pSoldier )
if( gGameOptions.fNewTraitSystem )
{
// bonus for ranger travelling between sectors
if ( pSoldier->flags.fBetweenSectors && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) )
if ( pSoldier->flags.fBetweenSectors && HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) )
{
bMaxBreathLoss = (bMaxBreathLoss * (100 - gSkillTraitValues.ubRABreathForTravellingReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) ) / 100);
bMaxBreathLoss = (bMaxBreathLoss * (100 - gSkillTraitValues.ubSVBreathForTravellingReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT )) / 100);
}
// primitive people get exhausted slower
if ( gMercProfiles[pSoldier->ubProfile].bCharacterTrait == CHAR_TRAIT_PRIMITIVE )
+8 -13
View File
@@ -1280,10 +1280,9 @@ void HourlyCamouflageUpdate( void )
// first limit camo to valid values
pSoldier->bCamo = __min( gGameExternalOptions.bCamoKitArea, pSoldier->bCamo );
if (HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
if ( HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) )
{
pSoldier->bCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
// pSoldier->bCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
pSoldier->bCamo -= (Chance( __max( 0, 100 - gSkillTraitValues.ubSVCamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ) ) ) ? 1 : 0);
}
else
pSoldier->bCamo -= 1; // 2
@@ -1292,7 +1291,6 @@ void HourlyCamouflageUpdate( void )
{
pSoldier->bCamo = 0;
camoWoreOff = TRUE;
// ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, Message[STR_CAMMO_WORN_OFF], pSoldier->name );
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, Message[STR_JUNGLE_WORN_OFF], pSoldier->name );
if (gGameExternalOptions.fShowCamouflageFaces == TRUE )
@@ -1309,10 +1307,9 @@ void HourlyCamouflageUpdate( void )
// first limit camo to valid values
pSoldier->urbanCamo = __min( gGameExternalOptions.bCamoKitArea, pSoldier->urbanCamo );
if (HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
if ( HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) )
{
pSoldier->urbanCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
// pSoldier->urbanCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
pSoldier->urbanCamo -= (Chance( __max( 0, 100 - gSkillTraitValues.ubSVCamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ) ) ) ? 1 : 0);
}
else
pSoldier->urbanCamo -= 1; // 2
@@ -1337,10 +1334,9 @@ void HourlyCamouflageUpdate( void )
// first limit camo to valid values
pSoldier->desertCamo = __min( gGameExternalOptions.bCamoKitArea, pSoldier->desertCamo );
if (HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
if ( HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) )
{
pSoldier->desertCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
// pSoldier->desertCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
pSoldier->desertCamo -= (Chance( __max( 0, 100 - gSkillTraitValues.ubSVCamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ) ) ) ? 1 : 0);
}
else
pSoldier->desertCamo -= 1; // 2
@@ -1365,10 +1361,9 @@ void HourlyCamouflageUpdate( void )
// first limit camo to valid values
pSoldier->snowCamo = __min( gGameExternalOptions.bCamoKitArea, pSoldier->snowCamo );
if (HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
if ( HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) )
{
pSoldier->snowCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
// pSoldier->snowCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
pSoldier->snowCamo -= (Chance( __max( 0, 100 - gSkillTraitValues.ubSVCamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ) ) ) ? 1 : 0);
}
else
pSoldier->snowCamo -= 1; // 2
+8 -8
View File
@@ -3465,7 +3465,7 @@ INT32 GetSectorMvtTimeForGroup( UINT8 ubSector, UINT8 ubDirection, GROUP *pGroup
if ( pGroup->usGroupTeam == OUR_TEAM && !fAir && gGameOptions.fNewTraitSystem )
{
// see if we have any ranger here
UINT8 ubRangerHere = 0;
UINT8 ubSurvivalistHere = 0;
UINT8 ustravelbackground_foot = 0;
UINT8 ustravelbackground_car = 0;
UINT8 ustravelbackground_air = 0;
@@ -3474,8 +3474,8 @@ INT32 GetSectorMvtTimeForGroup( UINT8 ubSector, UINT8 ubDirection, GROUP *pGroup
while( curr )
{
pSoldier = curr->pSoldier;
if( HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
ubRangerHere += NUM_SKILL_TRAITS( pSoldier, RANGER_NT );
ubSurvivalistHere += NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT );
// Flugente: backgrounds
ustravelbackground_foot = max(ustravelbackground_foot, pSoldier->GetBackgroundValue(BG_TRAVEL_FOOT));
@@ -3485,16 +3485,16 @@ INT32 GetSectorMvtTimeForGroup( UINT8 ubSector, UINT8 ubDirection, GROUP *pGroup
curr = curr->next;
}
// yes, we have...
if( ubRangerHere || ustravelbackground_foot || ustravelbackground_car || ustravelbackground_air )
if ( ubSurvivalistHere || ustravelbackground_foot || ustravelbackground_car || ustravelbackground_air )
{
// no more than certain number of simultaneous bonuses
ubRangerHere = min( gSkillTraitValues.ubRAMaxBonusesToTravelSpeed, ubRangerHere );
ubSurvivalistHere = min( gSkillTraitValues.ubSVMaxBonusesToTravelSpeed, ubSurvivalistHere );
// on foot, the bonus should be higher
if( fFoot )
{
// however, we cannot be quicker than the helicopter
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - ( ubRangerHere * gSkillTraitValues.ubRAGroupTimeSpentForTravellingFoot )) / 100));
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (ubSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingFoot)) / 100) );
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - ustravelbackground_foot) / 100));
}
@@ -3502,7 +3502,7 @@ INT32 GetSectorMvtTimeForGroup( UINT8 ubSector, UINT8 ubDirection, GROUP *pGroup
else if ( fAir )
{
// however, we cannot be quicker than the helicopter
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - ( ubRangerHere * gSkillTraitValues.ubRAGroupTimeSpentForTravellingVehicle )) / 100));
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (ubSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingVehicle)) / 100) );
// yes, this background allows us to fly faster :-)
iBestTraverseTime = max( 9, (iBestTraverseTime * (100 - ustravelbackground_air) / 100));
@@ -3510,7 +3510,7 @@ INT32 GetSectorMvtTimeForGroup( UINT8 ubSector, UINT8 ubDirection, GROUP *pGroup
else
{
// however, we cannot be quicker than the helicopter
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - ( ubRangerHere * gSkillTraitValues.ubRAGroupTimeSpentForTravellingVehicle )) / 100));
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - (ubSurvivalistHere * gSkillTraitValues.ubSVGroupTimeSpentForTravellingVehicle)) / 100) );
iBestTraverseTime = max( 10, (iBestTraverseTime * (100 - ustravelbackground_car) / 100));
}
+2 -2
View File
@@ -1456,12 +1456,12 @@ void CalculateTrackerRange( )
if ( gusSelectedSoldier == NOBODY || !GetSoldier( &pSoldier, gusSelectedSoldier ) || !pSoldier->bInSector )
return;
FLOAT trackerskill = (FLOAT)(NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) * gSkillTraitValues.usTrackerAbility + pSoldier->GetBackgroundValue( BG_TRACKER_ABILITY )) / 100.0f;
FLOAT trackerskill = (FLOAT)(NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ) * gSkillTraitValues.usSVTrackerAbility + pSoldier->GetBackgroundValue( BG_TRACKER_ABILITY )) / 100.0f;
if ( trackerskill < 0.01f )
return;
UINT16 range = gSkillTraitValues.usTrackerMaxRange * trackerskill;
UINT16 range = gSkillTraitValues.usSVTrackerMaxRange * trackerskill;
const INT32& sSelectedSoldierGridNo = MercPtrs[gusSelectedSoldier]->sGridNo;
+2 -2
View File
@@ -245,7 +245,7 @@ INT32 InternalInitFace( UINT8 usMercProfileID, UINT8 ubSoldierID, UINT32 uiInitF
// SANDRO - old/new traits check (I am not sure if this is used at all)
if ( gGameOptions.fNewTraitSystem )
{
if ( ProfileHasSkillTrait( TEX_UB, RANGER_NT ) > 0 )
if ( ProfileHasSkillTrait( TEX_UB, SURVIVAL_NT ) > 0 )
{
sprintf( VObjectDesc.ImageFile, "FACES\\B%dc.sti", TEX_UB );
}
@@ -668,7 +668,7 @@ void GetFaceRelativeCoordinates( FACETYPE *pFace, UINT16 *pusEyesX, UINT16 *pusE
if ( gGameOptions.fNewTraitSystem )
{
if( usMercProfileID == TEX_UB && ( gMercProfiles[ TEX_UB ].bSkillTraits[0] == RANGER_NT || gMercProfiles[ TEX_UB ].bSkillTraits[1] == RANGER_NT ) )
if( usMercProfileID == TEX_UB && ( gMercProfiles[ TEX_UB ].bSkillTraits[0] == SURVIVAL_NT || gMercProfiles[ TEX_UB ].bSkillTraits[1] == SURVIVAL_NT ) )
{
usEyesX = 13;
usEyesY = 34;
+1
View File
@@ -1880,6 +1880,7 @@ enum
// Flugente: added radio operator
IMP_RADIO_OPERATOR,
IMP_SURVIVAL,
// silversurfer: added sidearm for standard weapons. Special weapons should come from traits.
IMP_SIDEARM,
+8 -50
View File
@@ -9159,24 +9159,15 @@ void WaterDamage( SOLDIERTYPE *pSoldier )
// and 0% //1% for medium water
if ( pSoldier->bCamo > 0 )
{
if ( HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) )
if ( HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) )
{
if ( pSoldier->MercInDeepWater( ) )
{
pSoldier->bCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
//pSoldier->bCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
}
/* else
{
pSoldier->bCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
}*/
pSoldier->bCamo -= (Chance( __max( 0, 100 - gSkillTraitValues.ubSVCamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ) ) ) ? 1 : 0);
}
else
{
if ( pSoldier->MercInDeepWater( ) )
pSoldier->bCamo = __max( 0, pSoldier->bCamo - 1 ); // 2
//else
// pSoldier->bCamo = __max( 0, pSoldier->bCamo - 1 );
}
if ( pSoldier->bCamo <= 0 )
@@ -9189,24 +9180,15 @@ void WaterDamage( SOLDIERTYPE *pSoldier )
}
if ( pSoldier->urbanCamo > 0 )
{
if ( HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) )
if ( HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) )
{
if ( pSoldier->MercInDeepWater( ) )
{
pSoldier->urbanCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
//pSoldier->urbanCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
}
/* else
{
pSoldier->urbanCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
}*/
pSoldier->urbanCamo -= (Chance( __max( 0, 100 - gSkillTraitValues.ubSVCamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ) ) ) ? 1 : 0);
}
else
{
if ( pSoldier->MercInDeepWater( ) )
pSoldier->urbanCamo = __max( 0, pSoldier->urbanCamo - 1); // 2
//else
// pSoldier->urbanCamo = __max( 0, pSoldier->urbanCamo - 1);
}
if ( pSoldier->urbanCamo <= 0 )
@@ -9218,17 +9200,10 @@ void WaterDamage( SOLDIERTYPE *pSoldier )
}
if ( pSoldier->desertCamo > 0 )
{
if ( HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) )
if ( HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) )
{
if ( pSoldier->MercInDeepWater( ) )
{
pSoldier->desertCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
//pSoldier->desertCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
}
/* else
{
pSoldier->desertCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
}*/
pSoldier->desertCamo -= (Chance( __max( 0, 100 - gSkillTraitValues.ubSVCamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ) ) ) ? 1 : 0);
}
else
{
@@ -9247,24 +9222,15 @@ void WaterDamage( SOLDIERTYPE *pSoldier )
}
if ( pSoldier->snowCamo > 0 )
{
if ( HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) )
if ( HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) )
{
if ( pSoldier->MercInDeepWater( ) )
{
pSoldier->snowCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
//pSoldier->snowCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
}
/* else
{
pSoldier->snowCamo -= (Chance(__max(0, 100 - gSkillTraitValues.ubRACamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ? 1 : 0 );
}*/
pSoldier->snowCamo -= (Chance( __max( 0, 100 - gSkillTraitValues.ubSVCamoWornountSpeedReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ) ) ) ? 1 : 0);
}
else
{
if ( pSoldier->MercInDeepWater( ) )
pSoldier->snowCamo = __max( 0, pSoldier->snowCamo - 1); // 2
//else
// pSoldier->snowCamo = __max( 0, pSoldier->snowCamo - 1);
}
if ( pSoldier->snowCamo <= 0 )
@@ -9283,8 +9249,6 @@ void WaterDamage( SOLDIERTYPE *pSoldier )
{
if ( pSoldier->MercInDeepWater( ) )
pSoldier->bCamo = __max( 0, pSoldier->bCamo - 1 ); // 2
//else
// pSoldier->bCamo = __max( 0, pSoldier->bCamo - 1 );
if ( (pSoldier->bCamo)== 0)
{
@@ -9297,8 +9261,6 @@ void WaterDamage( SOLDIERTYPE *pSoldier )
{
if ( pSoldier->MercInDeepWater( ) )
pSoldier->urbanCamo = __max( 0, pSoldier->urbanCamo - 1); // 2
//else
// pSoldier->urbanCamo = __max( 0, pSoldier->urbanCamo - 1);
if ( (pSoldier->urbanCamo)== 0)
{
@@ -9310,8 +9272,6 @@ void WaterDamage( SOLDIERTYPE *pSoldier )
{
if ( pSoldier->MercInDeepWater( ) )
pSoldier->desertCamo = __max( 0, pSoldier->desertCamo - 1); // 2
//else
// pSoldier->desertCamo = __max( 0, pSoldier->desertCamo - 1);
if ( (pSoldier->desertCamo)== 0)
{
@@ -9323,8 +9283,6 @@ void WaterDamage( SOLDIERTYPE *pSoldier )
{
if ( pSoldier->MercInDeepWater( ) )
pSoldier->snowCamo = __max( 0, pSoldier->snowCamo - 1); // 2
//else
// pSoldier->snowCamo = __max( 0, pSoldier->snowCamo - 1);
if ( (pSoldier->snowCamo)== 0)
{
+2 -2
View File
@@ -1541,10 +1541,10 @@ INT16 GetBreathPerAP( SOLDIERTYPE *pSoldier, UINT16 usAnimState )
if( sBreathPerAP < 0 && ( pSoldier->pathing.bLevel || !FindStructure( pSoldier->sGridNo, STRUCTURE_ROOF ) ) && pSoldier->bBreath > 1)
{
// Added a feature to reduce rain effect on regaining breath with Ranger trait - SANDRO
if( HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) && ( gGameOptions.fNewTraitSystem ))
if ( HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) && (gGameOptions.fNewTraitSystem) )
{
INT16 sBreathGainPenalty = 0;
sBreathGainPenalty = (INT16)((gGameExternalOptions.ubBreathGainReductionPerRainIntensity * (100 - gSkillTraitValues.ubRAWeatherPenaltiesReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) / 100);
sBreathGainPenalty = (INT16)((gGameExternalOptions.ubBreathGainReductionPerRainIntensity * (100 - gSkillTraitValues.ubSVWeatherPenaltiesReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT ))) / 100);
sBreathGainPenalty = min( max( 0, sBreathGainPenalty ), 100); // keep it 0-100%
sBreathPerAP -= (INT16)( sBreathPerAP * gbCurrentRainIntensity * sBreathGainPenalty /100 );
}
+73 -58
View File
@@ -21264,7 +21264,7 @@ BOOLEAN DoesSoldierWearGasMask( SOLDIERTYPE *pSoldier )//dnl ch40 200909
BOOLEAN HAS_SKILL_TRAIT( SOLDIERTYPE * pSoldier, UINT8 uiSkillTraitNumber )
{
if ( pSoldier == NULL )
return(FALSE);
return FALSE;
// Flugente: compatibility with skills
if ( uiSkillTraitNumber == VARIOUSSKILLS )
@@ -21284,40 +21284,28 @@ BOOLEAN HAS_SKILL_TRAIT( SOLDIERTYPE * pSoldier, UINT8 uiSkillTraitNumber )
// bMaxMajorTraits++;
//}
for ( INT8 bCnt = 0; bCnt < min( 30, bMaxTraits ); bCnt++ )
for ( INT8 bCnt = 0; bCnt < min( 30, bMaxTraits ); ++bCnt )
{
if ( TwoStagedTrait( uiSkillTraitNumber ) )
{
if ( pSoldier->stats.ubSkillTraits[bCnt] == uiSkillTraitNumber )
{
return(TRUE);
}
else if ( TwoStagedTrait( pSoldier->stats.ubSkillTraits[bCnt] ) )
{
bNumMajorTraitsCounted++;
}
// if we exceeded the allowed number of major traits, ignore the rest of them
if ( bNumMajorTraitsCounted >= min( 20, bMaxMajorTraits ) )
{
break;
}
}
else
{
if ( pSoldier->stats.ubSkillTraits[bCnt] == uiSkillTraitNumber )
{
return(TRUE);
}
}
if ( pSoldier->stats.ubSkillTraits[bCnt] == uiSkillTraitNumber )
return(TRUE);
if ( MajorTrait( pSoldier->stats.ubSkillTraits[bCnt] ) )
++bNumMajorTraitsCounted;
// if we exceeded the allowed number of major traits, ignore the rest of them
if ( bNumMajorTraitsCounted > min( 20, bMaxMajorTraits ) )
break;
}
}
else
{
if ( pSoldier->stats.ubSkillTraits[0] == uiSkillTraitNumber )
return(TRUE);
if ( pSoldier->stats.ubSkillTraits[1] == uiSkillTraitNumber )
return(TRUE);
}
return(FALSE);
}
@@ -21341,53 +21329,40 @@ INT8 NUM_SKILL_TRAITS( SOLDIERTYPE * pSoldier, UINT8 uiSkillTraitNumber )
// bMaxMajorTraits++;
//}
for ( INT8 bCnt = 0; bCnt < min( 30, bMaxTraits ); bCnt++ )
for ( INT8 bCnt = 0; bCnt < min( 30, bMaxTraits ); ++bCnt )
{
if ( TwoStagedTrait( uiSkillTraitNumber ) )
{
if ( pSoldier->stats.ubSkillTraits[bCnt] == uiSkillTraitNumber )
{
bNumberOfTraits++;
bNumMajorTraitsCounted++;
}
else if ( TwoStagedTrait( pSoldier->stats.ubSkillTraits[bCnt] ) )
{
bNumMajorTraitsCounted++;
}
// if we exceeded the allowed number of major traits, ignore the rest of them
if ( bNumMajorTraitsCounted >= min( 20, bMaxMajorTraits ) )
{
break;
}
}
else
{
if ( pSoldier->stats.ubSkillTraits[bCnt] == uiSkillTraitNumber )
{
bNumberOfTraits++;
}
}
if ( pSoldier->stats.ubSkillTraits[bCnt] == uiSkillTraitNumber )
++bNumberOfTraits;
if ( MajorTrait( pSoldier->stats.ubSkillTraits[bCnt] ) )
++bNumMajorTraitsCounted;
// if we exceeded the allowed number of major traits, ignore the rest of them
if ( bNumMajorTraitsCounted > min( 20, bMaxMajorTraits ) )
break;
}
// cannot have more than one same minor trait
if ( !TwoStagedTrait( uiSkillTraitNumber ) )
return (min( 1, bNumberOfTraits ));
else
return (min( 2, bNumberOfTraits ));
return (min( 2, bNumberOfTraits ));
}
else
{
if ( pSoldier->stats.ubSkillTraits[0] == uiSkillTraitNumber )
bNumberOfTraits++;
++bNumberOfTraits;
if ( pSoldier->stats.ubSkillTraits[1] == uiSkillTraitNumber )
bNumberOfTraits++;
++bNumberOfTraits;
// Electronics, Ambidextrous and Camouflaged can only be of one grade
if ( uiSkillTraitNumber == ELECTRONICS_OT ||
uiSkillTraitNumber == AMBIDEXT_OT ||
uiSkillTraitNumber == CAMOUFLAGED_OT )
return (min( 1, bNumberOfTraits ));
else
return (bNumberOfTraits);
return (bNumberOfTraits);
}
}
@@ -22068,7 +22043,47 @@ BOOLEAN DecideAltAnimForBigMerc( SOLDIERTYPE * pSoldier )
BOOLEAN TwoStagedTrait( UINT8 uiSkillTraitNumber )
{
return(uiSkillTraitNumber > 0 && (uiSkillTraitNumber <= NUM_ORIGINAL_MAJOR_TRAITS || uiSkillTraitNumber == COVERT_NT));
if ( gGameOptions.fNewTraitSystem )
{
if ( uiSkillTraitNumber > 0 )
{
// covert ops is a major trait that is in a different location
if ( uiSkillTraitNumber == COVERT_NT )
return TRUE;
// other traits below NUM_ORIGINAL_MAJOR_TRAITS are all major
if ( uiSkillTraitNumber <= NUM_ORIGINAL_MAJOR_TRAITS )
return TRUE;
}
}
else
{
if ( uiSkillTraitNumber == IMP_SKILL_TRAITS__ELECTRONICS ||
uiSkillTraitNumber == IMP_SKILL_TRAITS__AMBIDEXTROUS ||
uiSkillTraitNumber == IMP_SKILL_TRAITS__CAMO )
return(FALSE);
return TRUE;
}
return FALSE;
}
// determine if this is a major trait (no longer all two-staged)
BOOLEAN MajorTrait( UINT8 uiSkillTraitNumber )
{
if ( uiSkillTraitNumber > 0 )
{
// covert ops is a major trait that is in a different location
if ( uiSkillTraitNumber == COVERT_NT )
return TRUE;
// other traits below NUM_ORIGINAL_MAJOR_TRAITS are all major
if ( uiSkillTraitNumber <= NUM_ORIGINAL_MAJOR_TRAITS )
return TRUE;
}
return FALSE;
}
BOOLEAN GetRadioOperatorSignal( UINT8 usOwner, INT32* psTargetGridNo )
@@ -22309,7 +22324,7 @@ UINT16 GridNoSpotterCTHBonus( SOLDIERTYPE* pSniper, INT32 sGridNo, UINT bTeam )
// -> value between 0 and 2000
value = (value * effectivity) / 100;
// longer spotting gives a linear bonus - up to 100% -> value between 0 and 4600
// longer spotting gives a linear bonus - up to 100% -> value between 0 and 4000
value = (value * min( pSoldier->usSkillCounter[SOLDIER_COUNTER_SPOTTER], 2 * gGameExternalOptions.usSpotterPreparationTurns )) / gGameExternalOptions.usSpotterPreparationTurns;
// reasonable values: 0 to gGameExternalOptions.usSpotterMaxCTHBoost
+1
View File
@@ -2009,6 +2009,7 @@ BOOLEAN DecideAltAnimForBigMerc( SOLDIERTYPE * pSoldier );
// added by Flugente
BOOLEAN TwoStagedTrait( UINT8 uiSkillTraitNumber ); // determine if this (new) trait has two stages
BOOLEAN MajorTrait( UINT8 uiSkillTraitNumber ); // determine if this is a major trait
BOOLEAN GetRadioOperatorSignal(UINT8 usOwner, INT32* psTargetGridNo); // retrieve the gridno of a radio operator who (or whose team) ordered an artillery strike
BOOLEAN IsValidArtilleryOrderSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT8 bTeam ); // can an artillery strike be ordered FROM this sector
BOOLEAN SectorJammed();
+1 -1
View File
@@ -4349,7 +4349,7 @@ BOOLEAN AssignTraitsToSoldier( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STRUCT *pCre
if ( zSoldierProfile[type][pSoldier->usSoldierProfile].uiTrait[2] > 0 )
{
// we have to make sure that not all 3 traits are major traits - if that happens, we ignore the third one
if ( TwoStagedTrait( pSoldier->stats.ubSkillTraits[0] ) && TwoStagedTrait( pSoldier->stats.ubSkillTraits[1] ) && TwoStagedTrait( zSoldierProfile[type][pSoldier->usSoldierProfile].uiTrait[2] ) )
if ( MajorTrait( pSoldier->stats.ubSkillTraits[0] ) && MajorTrait( pSoldier->stats.ubSkillTraits[1] ) && MajorTrait( zSoldierProfile[type][pSoldier->usSoldierProfile].uiTrait[2] ) )
;
else
{
+17 -36
View File
@@ -2929,48 +2929,29 @@ INT8 ProfileHasSkillTrait( INT32 ubProfileID, INT8 bSkillTrait )
// bMaxMajorTraits++;
//}
for ( INT8 bCnt = 0; bCnt < bMaxTraits; ++bCnt )
{
if ( gMercProfiles[ubProfileID].bSkillTraits[bCnt] == bSkillTrait )
++bNumTraits;
if ( MajorTrait( gMercProfiles[ubProfileID].bSkillTraits[bCnt] ) )
++bNumMajorTraitsCounted;
// if we exceeded the allowed number of major traits, ignore the rest of them
if ( bNumMajorTraitsCounted > bMaxMajorTraits )
break;
}
if ( TwoStagedTrait( bSkillTrait ) )
{
for ( INT8 bCnt = 0; bCnt < bMaxTraits; ++bCnt )
{
if ( gMercProfiles[ubProfileID].bSkillTraits[bCnt] == bSkillTrait )
{
++bNumTraits;
++bNumMajorTraitsCounted;
}
else if ( TwoStagedTrait( gMercProfiles[ubProfileID].bSkillTraits[bCnt] ) )
{
++bNumMajorTraitsCounted;
}
// if we exceeded the allowed number of major traits, ignore the rest of them
if ( bNumMajorTraitsCounted >= bMaxMajorTraits )
{
break;
}
}
// cannot have more than 2 grades of a major traits
return (min( 2, bNumTraits ));
}
else
{
for ( INT8 bCnt = 0; bCnt < bMaxTraits; ++bCnt )
{
if ( gMercProfiles[ubProfileID].bSkillTraits[bCnt] == bSkillTrait )
{
++bNumTraits;
}
}
// cannot have more than 1 grade of minor traits
return (min( 1, bNumTraits ));
}
return (min( 1, bNumTraits ));
}
else
{
if (gMercProfiles[ubProfileID].bSkillTraits[ 0 ] == bSkillTrait)
++bNumTraits;
if (gMercProfiles[ubProfileID].bSkillTraits[ 1 ] == bSkillTrait)
++bNumTraits;
@@ -2979,7 +2960,7 @@ INT8 ProfileHasSkillTrait( INT32 ubProfileID, INT8 bSkillTrait )
bSkillTrait == AMBIDEXT_OT ||
bSkillTrait == CAMOUFLAGED_OT )
return ( min(1, bNumTraits) );
else
return ( bNumTraits );
return ( bNumTraits );
}
}
+2 -2
View File
@@ -349,9 +349,9 @@ INT16 AdjustMaxSightRangeForEnvEffects( SOLDIERTYPE *pSoldier, INT8 bLightLevel,
//Added a feature reducing weather penalty for ranger trait - SANDRO
INT16 sWeatherPenalty = 0; // percent vision reduction 0-100%
sWeatherPenalty = min( (max( 0, (gGameExternalOptions.ubVisDistDecreasePerRainIntensity * gbCurrentRainIntensity))), 100) ;
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) )
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, SURVIVAL_NT ) )
{
sWeatherPenalty = (sWeatherPenalty * ( 100 - (gSkillTraitValues.ubRAWeatherPenaltiesReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ))) ) / 100;
sWeatherPenalty = (sWeatherPenalty * (100 - (gSkillTraitValues.ubSVWeatherPenaltiesReduction * NUM_SKILL_TRAITS( pSoldier, SURVIVAL_NT )))) / 100;
sWeatherPenalty = min( (max( 0, sWeatherPenalty)), 100 ); // keep it in 0-100 range
}
+3 -2
View File
@@ -161,15 +161,16 @@ typedef enum
SCOUTING_NT, // 19
// Flugente: new traits have to go here, even if they are major traits, as otherwise the existing traits in profiles get mixed up
COVERT_NT, // 20
COVERT_NT, // 20 // a major trait
RADIO_OPERATOR_NT, //21 // a minor trait
SNITCH_NT, //22 // a minor trait
SURVIVAL_NT, //23 // a minor trait
NUM_SKILLTRAITS_NT
} SkillTraitNew;
#define NUM_MAJOR_TRAITS 10
#define NUM_MINOR_TRAITS 12
#define NUM_MINOR_TRAITS 13
#define NUM_ORIGINAL_MAJOR_TRAITS 9
+11 -7
View File
@@ -2524,32 +2524,34 @@ STR16 gzMercSkillTextNew[] =
// new minor traits
L"无线电操作员", // 21
L"告发", // 22
L"Survival",
// second names for major skills
L"机枪手",
L"机枪手", // 24
L"掷弹兵",
L"狙击手",
L"游骑兵", // 26
L"游骑兵",
L"枪斗术",
L"武术家",
L"班长",
L"工兵",
L"军医",
// placeholders for minor traits
L"Placeholder", // 32
L"Placeholder", // 33
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 37
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 41
L"间谍", // 42
L"Placeholder",
L"Placeholder", // 42
L"间谍", // 43
L"Placeholder", // for radio operator (minor trait)
L"Placeholder", // for snitch (minor trait)
L"更多...",
L"Placeholder", // for survival (minor trait)
L"更多...", // 47
L"多种技能", // for VARIOUSSKILLS
};
//////////////////////////////////////////////////////////
@@ -6868,6 +6870,8 @@ STR16 MissingIMPSkillsDescriptions[] =
L"特工: 你让詹姆斯邦德甘拜下风! ± ", // L"Covert Operations: You make 007 look like an amateur! ± ",
// Radio Operator
L"无线电操作员:你通过使用通讯设备让队伍的战略和战术水平得到了提升。 ± ", //L"Radio Operator: Your usage of communication devices broaden your team's tactical and strategic skills. ± ",
// Survival
L"Survival: Nature is a second home to you. ± ", // TODO.Translate
};
STR16 NewInvMessage[] =
+14 -10
View File
@@ -2519,34 +2519,36 @@ STR16 gzMercSkillTextNew[] =
L"Covert Ops", // 20
// new minor traits
L"Radio Operator", // 21
L"Snitch", // 22 // TODO.Translate
L"Snitch", // 22
L"Survival",
// second names for major skills
L"Machinegunner", // 23
L"Machinegunner", // 24
L"Bombardier",
L"Sniper",
L"Ranger",
L"Gunfighter", // 27
L"Gunfighter",
L"Martial Arts",
L"Squadleader",
L"Engineer",
L"Doctor", // 31
L"Doctor",
// placeholders for minor traits
L"Placeholder", // 32
L"Placeholder", // 33
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 37
L"Placeholder", // 38
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 41
L"Spy", // 42
L"Placeholder", // 42
L"Spy", // 43
L"Placeholder", // for radio operator (minor trait)
L"Placeholder", // for snitch (minor trait)
L"More...",
L"various", // for VARIOUSSKILLS // TODO.Translate
L"Placeholder", // for survival (minor trait)
L"More...", // 47
L"various", // for VARIOUSSKILLS
};
//////////////////////////////////////////////////////////
@@ -6872,6 +6874,8 @@ STR16 MissingIMPSkillsDescriptions[] =
L"Covert Operations: You make 007 look like an amateur! ± ", // TODO.Translate
// Radio Operator
L"Radio Operator: Your usage of communication devices broaden your team's tactical and strategic skills. ± ", // TOO.Translate
// Survival
L"Survival: Nature is a second home to you. ± ", // TODO.Translate
};
STR16 NewInvMessage[] =
+12 -8
View File
@@ -2524,32 +2524,34 @@ STR16 gzMercSkillTextNew[] =
// new minor traits
L"Radio Operator", // 21
L"Snitch", // 22
L"Survival",
// second names for major skills
L"Machinegunner", // 23
L"Machinegunner", // 24
L"Bombardier",
L"Sniper",
L"Ranger",
L"Gunfighter", // 27
L"Gunfighter",
L"Martial Arts",
L"Squadleader",
L"Engineer",
L"Doctor", // 31
L"Doctor",
// placeholders for minor traits
L"Placeholder", // 32
L"Placeholder", // 33
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 37
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 41
L"Spy", // 42
L"Placeholder",
L"Placeholder", // 42
L"Spy", // 43
L"Placeholder", // for radio operator (minor trait)
L"Placeholder", // for snitch (minor trait)
L"More...", // 45
L"Placeholder", // for survival (minor trait)
L"More...", // 47
L"various", // for VARIOUSSKILLS
};
//////////////////////////////////////////////////////////
@@ -6866,6 +6868,8 @@ STR16 MissingIMPSkillsDescriptions[] =
L"Covert Operations: You make 007 look like an amateur! ± ",
// Radio Operator
L"Radio Operator: Your usage of communication devices broaden your team's tactical and strategic skills. ± ",
// Survival
L"Survival: Nature is a second home to you. ± ",
};
STR16 NewInvMessage[] =
+7 -3
View File
@@ -2530,9 +2530,10 @@ STR16 gzMercSkillTextNew[] =
// new minor traits
L"Opérateur radio", // 21
L"Infiltré", // 22
L"Survival",
// second names for major skills
L"Mitrailleur",
L"Mitrailleur", // 24
L"Bombardier",
L"Sniper",
L"Ranger",
@@ -2542,7 +2543,7 @@ STR16 gzMercSkillTextNew[] =
L"Ingénieur",
L"Chirurgien",
// placeholders for minor traits
L"Placeholder", // 32
L"Placeholder", // 33
L"Placeholder",
L"Placeholder",
L"Placeholder",
@@ -2555,7 +2556,8 @@ STR16 gzMercSkillTextNew[] =
L"Espion", // 42
L"Placeholder", // for radio operator (minor trait)
L"Placeholder", // for snitch (minor trait)
L"Plus...", // 45
L"Placeholder", // for survival (minor trait)
L"Plus...", // 47
L"Divers", // for VARIOUSSKILLS
};
//////////////////////////////////////////////////////////
@@ -6870,6 +6872,8 @@ STR16 MissingIMPSkillsDescriptions[] =
L"Déguisement : Vous ferez passer 007 pour un amateur ! ± ",
// Radio Operator
L"Opérateur radio : Votre maitrise des appareils de communication élargit le champs des compétences tactiques et stratégiques de votre équipe. ± ",
// Survival
L"Survival: Nature is a second home to you. ± ", // TODO.Translate
};
STR16 NewInvMessage[] =
+10 -6
View File
@@ -2538,9 +2538,10 @@ STR16 gzMercSkillTextNew[] =
// new minor traits
L"Funker", // 21
L"Snitch", // 22 // TODO.Translate
L"Survival",
// second names for major skills
L"MG-Veteran",
L"MG-Veteran", // 24
L"Artillerist",
L"Scharfschütze",
L"Jäger",
@@ -2550,20 +2551,21 @@ STR16 gzMercSkillTextNew[] =
L"Ingenieur",
L"Arzt",
// placeholders for minor traits
L"Placeholder", // 32
L"Placeholder", // 33
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 37
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 41
L"Spion", // 42
L"Placeholder",
L"Placeholder", // 42
L"Spion", // 43
L"Placeholder", // for radio operator (minor trait)
L"Placeholder", // for snitch(minor trait)
L"Mehr...",
L"Placeholder", // for survival (minor trait)
L"Mehr...", //47
L"diverse", // for VARIOUSSKILLS
};
@@ -6697,6 +6699,8 @@ STR16 MissingIMPSkillsDescriptions[] =
L"Geheimagent: Neben Ihnen schaut 007 wie der reinste Amateur aus! ± ",
// Radio Operator
L"Radio Operator: Your usage of communication devices broaden your team's tactical and strategic skills. ± ", // TOO.Translate
// Survival
L"Survival: Nature is a second home to you. ± ", // TODO.Translate
};
STR16 NewInvMessage[] =
+15 -11
View File
@@ -2517,34 +2517,36 @@ STR16 gzMercSkillTextNew[] =
L"Covert Ops", // 20
// new minor traits
L"Radio Operator", // 21
L"Snitch", // 22 // TODO.Translate
L"Snitch", // 22
L"Survival",
// second names for major skills
L"Machinegunner", // 23
L"Machinegunner", // 24
L"Bombardier",
L"Sniper",
L"Ranger",
L"Gunfighter", // 27
L"Gunfighter",
L"Martial Arts",
L"Squadleader",
L"Engineer",
L"Doctor", // 31
L"Doctor",
// placeholders for minor traits
L"Placeholder", // 32
L"Placeholder", // 33
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 37
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 41
L"Spy", // 42
L"Placeholder",
L"Placeholder", // 42
L"Spy", // 43
L"Placeholder", // for radio operator (minor trait)
L"Placeholder", // for snitch(minor trait)
L"More...",
L"various", // for VARIOUSSKILLS // TODO.Translate
L"Placeholder", // for snitch (minor trait)
L"Placeholder", // for survival (minor trait)
L"More...", // 47
L"various", // for VARIOUSSKILLS
};
//////////////////////////////////////////////////////////
@@ -6868,6 +6870,8 @@ STR16 MissingIMPSkillsDescriptions[] =
L"Covert Operations: You make 007 look like an amateur! ± ", // TODO.Translate
// Radio Operator
L"Radio Operator: Your usage of communication devices broaden your team's tactical and strategic skills. ± ", // TOO.Translate
// Survival
L"Survival: Nature is a second home to you. ± ", // TODO.Translate
};
STR16 NewInvMessage[] =
+12 -8
View File
@@ -89,6 +89,7 @@ STR16 gzIMPSkillTraitsTextNewMinor[]=
L"教学",// L"Teaching",
L"侦察",// L"Scouting",
L"无线电操作员", //L"Radio Operator",
L"Survival", //TODO.Translate
L"",// L"None",
L"I.M.P 副技能",// L"I.M.P. Minor Traits",
@@ -149,14 +150,6 @@ STR16 gzIMPMajorTraitsHelpTextsRanger[]=
L"使用散弹枪时-%d%s APs\n", //L"-%d%s APs to fire Shotguns\n",
L"使用散弹枪增加%d次瞄准次数\n", //L"Adds %d more aim click for Shotguns\n",
L"使用散弹枪增加%d次瞄准次数\n", //L"Adds %d more aim clicks for Shotguns\n",
L"队伍在区域间步行移动的速度 +%d%s\n",// L"+%d%s group travelling speed between sectors if traveling by foot\n",
L"队伍在区域间乘车移动的速度 +%d%s\n",// L"+%d%s group travelling speed between sectors if traveling in vehicle (except helicopter)\n",
L"区域间移动时体力消耗 -%d%s\n",// L"-%d%s less energy spent for travelling between sectors\n",
L"天气效果惩罚 -%d%s\n",// L"-%d%s weather penalties\n",
L"迷彩涂装效果 +%d%s\n",// L"+%d%s camouflage effectiveness\n",
L"迷彩涂装退色的速度 -%d%s\n",// L"-%d%s worn out speed of camouflage by water or time\n",
L"Can spot tracks up to %d tiles away\n", // TODO.Translate
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
@@ -387,6 +380,17 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
L"+%d有效听觉范围\n",
};
STR16 gzIMPMajorTraitsHelpTextsSurvival[] = // TODO.Translate
{
L"队伍在区域间步行移动的速度 +%d%s\n",// L"+%d%s group travelling speed between sectors if traveling by foot\n",
L"队伍在区域间乘车移动的速度 +%d%s\n",// L"+%d%s group travelling speed between sectors if traveling in vehicle (except helicopter)\n",
L"区域间移动时体力消耗 -%d%s\n",// L"-%d%s less energy spent for travelling between sectors\n",
L"天气效果惩罚 -%d%s\n",// L"-%d%s weather penalties\n",
//L"迷彩涂装效果 +%d%s\n",// L"+%d%s camouflage effectiveness\n",
L"迷彩涂装退色的速度 -%d%s\n",// L"-%d%s worn out speed of camouflage by water or time\n",
L"Can spot tracks up to %d tiles away\n", // TODO.Translate
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"无奖励",// L"No bonuses",
+11 -7
View File
@@ -89,6 +89,7 @@ STR16 gzIMPSkillTraitsTextNewMinor[]=
L"Teaching",
L"Scouting",
L"Radio Operator",
L"Survival", //TODO.Translate
L"None",
L"I.M.P. Minor Traits",
@@ -149,13 +150,6 @@ STR16 gzIMPMajorTraitsHelpTextsRanger[]=
L"-%d%s APs to fire Shotguns\n",
L"Adds %d more aim click for Shotguns\n",
L"Adds %d more aim clicks for Shotguns\n",
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 less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
L"Can spot tracks up to %d tiles away\n", // TODO.Translate
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
@@ -388,6 +382,16 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
L"+%d to effective hearing range\n", // TODO.Translate
};
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 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",
L"Can spot tracks up to %d tiles away\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
+1
View File
@@ -32,6 +32,7 @@ extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[];
extern STR16 gzIMPMinorTraitsHelpTextsTeaching[];
extern STR16 gzIMPMinorTraitsHelpTextsScouting[];
extern STR16 gzIMPMinorTraitsHelpTextsSnitch[];
extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente
extern STR16 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
+12 -7
View File
@@ -89,6 +89,7 @@ STR16 gzIMPSkillTraitsTextNewMinor[]=
L"Teaching",
L"Scouting",
L"Radio Operator",
L"Survival",
L"None",
L"I.M.P. Minor Traits",
@@ -149,13 +150,6 @@ STR16 gzIMPMajorTraitsHelpTextsRanger[]=
L"-%d%s APs to fire Shotguns\n",
L"Adds %d more aim click for Shotguns\n",
L"Adds %d more aim clicks for Shotguns\n",
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 less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
L"Can spot tracks up to %d tiles away\n",
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
@@ -388,6 +382,17 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
L"+%d to effective hearing range\n",
};
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 less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
//L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
L"Can spot tracks up to %d tiles away\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
+1
View File
@@ -32,6 +32,7 @@ extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[];
extern STR16 gzIMPMinorTraitsHelpTextsTeaching[];
extern STR16 gzIMPMinorTraitsHelpTextsScouting[];
extern STR16 gzIMPMinorTraitsHelpTextsSnitch[];
extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente
extern STR16 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
+13 -8
View File
@@ -89,6 +89,7 @@ STR16 gzIMPSkillTraitsTextNewMinor[]=
L"Instructeur",
L"Reconnaissance",
L"Opérateur radio",
L"Survival", //TODO.Translate
L"Personne",
L"IMP : Traits mineurs",
@@ -150,14 +151,6 @@ STR16 gzIMPMajorTraitsHelpTextsRanger[]=
L"-%d%s PA pour tirer avec les fusils à pompe\n",
L"Ajoute un niveau de visée pour les fusils à pompe\n",
L"Ajoute %d niveaux de visée pour les fusils à pompe\n",
L"+%d%s de vitesse de déplacement du groupe entre les secteurs, s'ils sont à pied\n",
L"+%d%s de vitesse de déplacement du groupe entre les secteurs, s'ils sont dans un véhicule (sauf l'hélicoptère)\n",
L"-%d%s d'énergies nécessaire pour traverser les secteurs\n",
L"-%d%s de pénalités du temps\n",
L"+%d%s d'efficacité du camouflage\n",
L"-%d%s de l'usure du camouflage due au temps ou à l'eau\n",
L"Can spot tracks up to %d tiles away\n", // TODO.Translate
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
@@ -385,6 +378,18 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
L"Augmente votre réputation de %d tous les jours si le moral est bon.\n",
L"+ %d de portée auditive\n",
};
STR16 gzIMPMajorTraitsHelpTextsSurvival[] = // TODO.Translate
{
L"+%d%s de vitesse de déplacement du groupe entre les secteurs, s'ils sont à pied\n",
L"+%d%s de vitesse de déplacement du groupe entre les secteurs, s'ils sont dans un véhicule (sauf l'hélicoptère)\n",
L"-%d%s d'énergies nécessaire pour traverser les secteurs\n",
L"-%d%s de pénalités du temps\n",
//L"+%d%s d'efficacité du camouflage\n",
L"-%d%s de l'usure du camouflage due au temps ou à l'eau\n",
L"Can spot tracks up to %d tiles away\n", // TODO.Translate
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"Pas de bonus",
+1
View File
@@ -32,6 +32,7 @@ extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[];
extern STR16 gzIMPMinorTraitsHelpTextsTeaching[];
extern STR16 gzIMPMinorTraitsHelpTextsScouting[];
extern STR16 gzIMPMinorTraitsHelpTextsSnitch[];
extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente
extern STR16 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
+12 -7
View File
@@ -89,6 +89,7 @@ STR16 gzIMPSkillTraitsTextNewMinor[]=
L"Ausbilden", // alt. "Lehren"
L"Aufklären", // alt. "Spähen"
L"Funktechnik", // Alternative: Funk, Funkkommunikation [Leonidas]
L"Survival", //TODO.Translate
L"Keine",
L"B.S.E. Nebenfertigkeiten",
@@ -149,13 +150,6 @@ STR16 gzIMPMajorTraitsHelpTextsRanger[]=
L"-%d%s APs benötigt um Flinten abzufeuern\n",
L"Gibt Flinten einen weiteren Zielklick\n",
L"%d weitere Zielklicks für Flinten\n",
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 weniger Energieverlust beim Reisen zwischen Sektoren\n",
L"-%d%s Einfluss durch schlechtes Wetter\n",
L"+%d%s Tarnungs-Effektivität\n",
L"-%d%s Abnutzung von Tarnfarbe durch Wasser oder Zeit\n",
L"Can spot tracks up to %d tiles away\n", // TODO.Translate
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
@@ -389,6 +383,17 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
L"Erhält +%d auf die Hörweite",
};
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 weniger Energieverlust beim Reisen zwischen Sektoren\n",
L"-%d%s Einfluss durch schlechtes Wetter\n",
//L"+%d%s Tarnungs-Effektivität\n",
L"-%d%s Abnutzung von Tarnfarbe durch Wasser oder Zeit\n",
L"Kann Spuren bis zu %d Felder weit erkennen\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"Keine Boni",
+1
View File
@@ -32,6 +32,7 @@ extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[];
extern STR16 gzIMPMinorTraitsHelpTextsTeaching[];
extern STR16 gzIMPMinorTraitsHelpTextsScouting[];
extern STR16 gzIMPMinorTraitsHelpTextsSnitch[];
extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente
extern STR16 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
+12 -7
View File
@@ -87,6 +87,7 @@ STR16 gzIMPSkillTraitsTextNewMinor[]=
L"Teaching",
L"Scouting",
L"Radio Operator",
L"Survival", //TODO.Translate
L"None",
L"I.M.P. Minor Traits",
@@ -147,13 +148,6 @@ STR16 gzIMPMajorTraitsHelpTextsRanger[]=
L"-%d%s APs to fire Shotguns\n",
L"Adds %d more aim click for Shotguns\n",
L"Adds %d more aim clicks for Shotguns\n",
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 less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
L"Can spot tracks up to %d tiles away\n", // TODO.Translate
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
@@ -385,6 +379,17 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
L"Increases your reputation by %d every day if in good morale.\n", // TODO.Translate
L"+%d to effective hearing range\n", // TODO.Translate
};
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 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",
L"Can spot tracks up to %d tiles away\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
+1
View File
@@ -32,6 +32,7 @@ extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[];
extern STR16 gzIMPMinorTraitsHelpTextsTeaching[];
extern STR16 gzIMPMinorTraitsHelpTextsScouting[];
extern STR16 gzIMPMinorTraitsHelpTextsSnitch[];
extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente
extern STR16 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
+13 -9
View File
@@ -89,6 +89,7 @@ STR16 gzIMPSkillTraitsTextNewMinor[]=
L"Nauczanie",
L"Zwiad",
L"Radio Operator",
L"Survival", //TODO.Translate
L"Brak",
L"Pomniejsze cechy I.M.P",
@@ -149,13 +150,6 @@ STR16 gzIMPMajorTraitsHelpTextsRanger[]=
L"-%d%s APs to fire Shotguns\n",
L"Adds %d more aim click for Shotguns\n",
L"Adds %d more aim clicks for Shotguns\n",
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 less energy spent for travelling between sectors\n",
L"-%d%s weather penalties\n",
L"+%d%s camouflage effectiveness\n",
L"-%d%s worn out speed of camouflage by water or time\n",
L"Can spot tracks up to %d tiles away\n", // TODO.Translate
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
@@ -385,9 +379,19 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
L"Może zbierać plotki w miastach.\n",
L"Może zostać umieszczony w więzieniu jako tajniak.\n",
L"Jeżeli w dobrym nastroju, poprawia twoją reputację o %d każdego dnia.\n",
L"+%d zasięg słuchu\n",
L"+%d zasięg słuchu\n",
};
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 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",
L"Can spot tracks up to %d tiles away\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"No bonuses",
+1
View File
@@ -32,6 +32,7 @@ extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[];
extern STR16 gzIMPMinorTraitsHelpTextsTeaching[];
extern STR16 gzIMPMinorTraitsHelpTextsScouting[];
extern STR16 gzIMPMinorTraitsHelpTextsSnitch[];
extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente
extern STR16 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
+25 -11
View File
@@ -88,7 +88,8 @@ STR16 gzIMPSkillTraitsTextNewMinor[]=
L"Подрывник", //Demolitions
L"Инструктор", //Teaching
L"Разведчик", //Scouting
L"Радист",
L"Радист", //Radio Operator
L"Survival", //TODO.Translate
L"Нет",
L"I.M.P.: Дополнительные навыки", //I.M.P. Minor Traits
@@ -149,14 +150,6 @@ STR16 gzIMPMajorTraitsHelpTextsRanger[]=
L"-%d%s ОД на выстрел из дробовика\n",
L"+%d клик прицеливания для дробовиков\n",
L"+%d кликов прицеливания для дробовиков\n",
L"+%d%s к скорости передвижения группы между секторами, если идти пешком\n",
L"+%d%s к скорости передвижения группы между секторами, \nесли передвигаться на транспорте (за исключением вертолёта)\n",
L"-%d%s к затрате энергии при переходе между секторами\n", //меньше тратит сил
L"-%d%s к штрафам от погодных условий\n",
L"+%d%s к эффективности камуфляжа\n",
L"-%d%s на скорость ухудшения камуфляжа от воды и времени\n",
L"Can spot tracks up to %d tiles away\n", // TODO.Translate
};
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
{
@@ -267,6 +260,17 @@ STR16 gzIMPMajorTraitsHelpTextsRadioOperator[]=
L"Может вызывать подкрепления из отрядов ополченцев из соседних секторов.\n",
};
STR16 gzIMPMajorTraitsHelpTextsSurvival[] =
{
L"+%d%s к скорости передвижения группы между секторами, если идти пешком\n",
L"+%d%s к скорости передвижения группы между секторами, \nесли передвигаться на транспорте (за исключением вертолёта)\n",
L"-%d%s к затрате энергии при переходе между секторами\n", //меньше тратит сил
L"-%d%s к штрафам от погодных условий\n",
//L"+%d%s к эффективности камуфляжа\n",
L"-%d%s на скорость ухудшения камуфляжа от воды и времени\n",
L"Can spot tracks up to %d tiles away\n", // TODO.Translate
};
STR16 gzIMPMajorTraitsHelpTextsNone[]=
{
L"Нет преимуществ",
@@ -381,9 +385,19 @@ STR16 gzIMPMinorTraitsHelpTextsSnitch[]=
L"Может собирать слухи в городах.\n",
L"Можно засылать в качестве доносчика в тюрьмы.\n",
L"Увеличивает вашу репутацию на %d каждый день, если его боевой дух высок.\n",
L"+%d фактической дальности слуха.\n",
L"+%d фактической дальности слуха.\n",
};
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 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",
L"Can spot tracks up to %d tiles away\n",
};
STR16 gzIMPMinorTraitsHelpTextsNone[]=
{
L"Нет преимуществ",
+1
View File
@@ -32,6 +32,7 @@ extern STR16 gzIMPMinorTraitsHelpTextsDemolitions[];
extern STR16 gzIMPMinorTraitsHelpTextsTeaching[];
extern STR16 gzIMPMinorTraitsHelpTextsScouting[];
extern STR16 gzIMPMinorTraitsHelpTextsSnitch[];
extern STR16 gzIMPMajorTraitsHelpTextsSurvival[]; // added by Flugente
extern STR16 gzIMPMinorTraitsHelpTextsNone[];
extern STR16 gzIMPOldSkillTraitsHelpTexts[];
+11 -6
View File
@@ -2531,9 +2531,10 @@ STR16 gzMercSkillTextNew[] =
// new minor traits
L"Radiooperator", // 21
L"Kapuś", // 22
L"Survival",
// second names for major skills
L"Strzelec RKMu",
L"Strzelec RKMu", // 24
L"Bombardier",
L"Snajper",
L"Myśliwy",
@@ -2542,20 +2543,22 @@ STR16 gzMercSkillTextNew[] =
L"Dowódca Drużyny",
L"Inżynier",
L"Doktor",
L"Placeholder", // 32
// placeholders for minor traits
L"Placeholder", // 33
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 37
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 41
L"Szpieg", // 42
L"Placeholder",
L"Placeholder", // 42
L"Szpieg", // 43
L"Placeholder", // for radio operator (minor trait)
L"Placeholder", // for snitch(minor trait)
L"Więcej...",
L"Placeholder", // for survival (minor trait)
L"Więcej...", // 47
L"różne", // for VARIOUSSKILLS
};
//////////////////////////////////////////////////////////
@@ -6879,6 +6882,8 @@ STR16 MissingIMPSkillsDescriptions[] =
L"Covert Operations: You make 007 look like an amateur! ± ", // TODO.Translate
// Radio Operator
L"Radio Operator: Your usage of communication devices broaden your team's tactical and strategic skills. ± ", // TOO.Translate
// Survival
L"Survival: Nature is a second home to you. ± ", // TODO.Translate
};
STR16 NewInvMessage[] =
+10 -5
View File
@@ -2522,6 +2522,7 @@ STR16 gzMercSkillTextNew[] =
// new minor traits
L"Радист", // 21
L"Осведомитель", // 22
L"Survival",
// second names for major skills
L"Пулемётчик", //Machinegunner
@@ -2533,20 +2534,22 @@ STR16 gzMercSkillTextNew[] =
L"Командир", //Squadleader
L"Инженер", //Engineer
L"Доктор", //Doctor
L"Placeholder", // 32
// placeholders for minor traits
L"Placeholder", // 33
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 37
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder",
L"Placeholder", // 41
L"Шпион", // 42
L"Placeholder", // 42
L"Шпион", // 43
L"Placeholder", // for radio operator (minor trait)
L"Placeholder", // for snitch(minor trait)
L"Ещё...",
L"Placeholder", // for survival (minor trait)
L"Ещё...", // 47
L"различные", // for VARIOUSSKILLS
};
//////////////////////////////////////////////////////////
@@ -6863,6 +6866,8 @@ STR16 MissingIMPSkillsDescriptions[] =
L"Шпион: Агент 007 по сравнению с вами - дилетант! ± ",
// Radio Operator
L"Радист: Использование вами средств связи позволяет расширить тактические и стратегические возможности команды. ± ",
// Survival
L"Survival: Nature is a second home to you. ± ", // TODO.Translate
};
STR16 NewInvMessage[] =