diff --git a/GameSettings.cpp b/GameSettings.cpp index 625c1776..5707ff36 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -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(){ diff --git a/GameSettings.h b/GameSettings.h index 2bc05295..de535988 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -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. diff --git a/Laptop/IMP Background.cpp b/Laptop/IMP Background.cpp index dfe889aa..834dc283 100644 --- a/Laptop/IMP Background.cpp +++ b/Laptop/IMP Background.cpp @@ -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; diff --git a/Laptop/IMP Compile Character.cpp b/Laptop/IMP Compile Character.cpp index 669f26fb..398dae37 100644 --- a/Laptop/IMP Compile Character.cpp +++ b/Laptop/IMP Compile Character.cpp @@ -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; } diff --git a/Laptop/IMP Confirm.cpp b/Laptop/IMP Confirm.cpp index a10088ed..36df156c 100644 --- a/Laptop/IMP Confirm.cpp +++ b/Laptop/IMP Confirm.cpp @@ -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 { diff --git a/Laptop/IMP Gear.cpp b/Laptop/IMP Gear.cpp index dc61db52..ee469c2c 100644 --- a/Laptop/IMP Gear.cpp +++ b/Laptop/IMP Gear.cpp @@ -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; diff --git a/Laptop/IMP Minor Trait.cpp b/Laptop/IMP Minor Trait.cpp index de069f16..821f9370 100644 --- a/Laptop/IMP Minor Trait.cpp +++ b/Laptop/IMP Minor Trait.cpp @@ -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 0 ) + { + wcscpy( pString, MissingIMPSkillsDescriptions[13] ); + AddEmailRecordToList( pString ); + } } else { diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index ee0ad84d..176ae0c4 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -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"" ); diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 5f1a7d67..2018fc0b 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -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 ) diff --git a/Strategic/Strategic Merc Handler.cpp b/Strategic/Strategic Merc Handler.cpp index 87ebfe7d..338f2cc8 100644 --- a/Strategic/Strategic Merc Handler.cpp +++ b/Strategic/Strategic Merc Handler.cpp @@ -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 diff --git a/Strategic/Strategic Movement.cpp b/Strategic/Strategic Movement.cpp index b1b1a080..7198ee2a 100644 --- a/Strategic/Strategic Movement.cpp +++ b/Strategic/Strategic Movement.cpp @@ -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)); } diff --git a/Tactical/DisplayCover.cpp b/Tactical/DisplayCover.cpp index 137ff946..c75c5713 100644 --- a/Tactical/DisplayCover.cpp +++ b/Tactical/DisplayCover.cpp @@ -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; diff --git a/Tactical/Faces.cpp b/Tactical/Faces.cpp index da65d5e5..316e2a19 100644 --- a/Tactical/Faces.cpp +++ b/Tactical/Faces.cpp @@ -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; diff --git a/Tactical/Item Types.h b/Tactical/Item Types.h index 705d3e2e..46af64c9 100644 --- a/Tactical/Item Types.h +++ b/Tactical/Item Types.h @@ -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, diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index e2b1739c..0e252f0c 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -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) { diff --git a/Tactical/Points.cpp b/Tactical/Points.cpp index 40a0dca5..0416da33 100644 --- a/Tactical/Points.cpp +++ b/Tactical/Points.cpp @@ -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 ); } diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index b82c1b1b..377a5627 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -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 diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 08b0d112..49089a47 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -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(); diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index a4c9272b..644dc344 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -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 { diff --git a/Tactical/Soldier Profile.cpp b/Tactical/Soldier Profile.cpp index e4c6a050..783a8d93 100644 --- a/Tactical/Soldier Profile.cpp +++ b/Tactical/Soldier Profile.cpp @@ -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 ); } } diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 9023115c..458f8f53 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -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 } diff --git a/Tactical/soldier profile type.h b/Tactical/soldier profile type.h index 038ff784..1e50792b 100644 --- a/Tactical/soldier profile type.h +++ b/Tactical/soldier profile type.h @@ -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 diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index ced28076..5d9548c1 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -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[] = diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index 601df188..37c46e79 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -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[] = diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index bd6a81d9..17d9e485 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -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[] = diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index befe4d68..a99f98c2 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -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[] = diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index 4fde1ca4..64ffd1ef 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -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[] = diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 6da44332..9cfc5bd4 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -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[] = diff --git a/Utils/_Ja25ChineseText.cpp b/Utils/_Ja25ChineseText.cpp index 392edb23..84af9684 100644 --- a/Utils/_Ja25ChineseText.cpp +++ b/Utils/_Ja25ChineseText.cpp @@ -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", diff --git a/Utils/_Ja25DutchText.cpp b/Utils/_Ja25DutchText.cpp index 691c1ff0..92c1e9bf 100644 --- a/Utils/_Ja25DutchText.cpp +++ b/Utils/_Ja25DutchText.cpp @@ -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", diff --git a/Utils/_Ja25DutchText.h b/Utils/_Ja25DutchText.h index 645ea93c..1520f1ae 100644 --- a/Utils/_Ja25DutchText.h +++ b/Utils/_Ja25DutchText.h @@ -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[]; diff --git a/Utils/_Ja25EnglishText.cpp b/Utils/_Ja25EnglishText.cpp index 63a411aa..8f101755 100644 --- a/Utils/_Ja25EnglishText.cpp +++ b/Utils/_Ja25EnglishText.cpp @@ -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", diff --git a/Utils/_Ja25EnglishText.h b/Utils/_Ja25EnglishText.h index 8ec405bd..2f9ceff4 100644 --- a/Utils/_Ja25EnglishText.h +++ b/Utils/_Ja25EnglishText.h @@ -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[]; diff --git a/Utils/_Ja25FrenchText.cpp b/Utils/_Ja25FrenchText.cpp index 1f268bc1..830f4182 100644 --- a/Utils/_Ja25FrenchText.cpp +++ b/Utils/_Ja25FrenchText.cpp @@ -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", diff --git a/Utils/_Ja25FrenchText.h b/Utils/_Ja25FrenchText.h index 645ea93c..1520f1ae 100644 --- a/Utils/_Ja25FrenchText.h +++ b/Utils/_Ja25FrenchText.h @@ -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[]; diff --git a/Utils/_Ja25GermanText.cpp b/Utils/_Ja25GermanText.cpp index 8a993791..ebeba0fd 100644 --- a/Utils/_Ja25GermanText.cpp +++ b/Utils/_Ja25GermanText.cpp @@ -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", diff --git a/Utils/_Ja25GermanText.h b/Utils/_Ja25GermanText.h index f0aa6614..a362a000 100644 --- a/Utils/_Ja25GermanText.h +++ b/Utils/_Ja25GermanText.h @@ -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[]; diff --git a/Utils/_Ja25ItalianText.cpp b/Utils/_Ja25ItalianText.cpp index dfc5f83e..bda00f54 100644 --- a/Utils/_Ja25ItalianText.cpp +++ b/Utils/_Ja25ItalianText.cpp @@ -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", diff --git a/Utils/_Ja25ItalianText.h b/Utils/_Ja25ItalianText.h index 645ea93c..1520f1ae 100644 --- a/Utils/_Ja25ItalianText.h +++ b/Utils/_Ja25ItalianText.h @@ -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[]; diff --git a/Utils/_Ja25PolishText.cpp b/Utils/_Ja25PolishText.cpp index c98af32b..af07b556 100644 --- a/Utils/_Ja25PolishText.cpp +++ b/Utils/_Ja25PolishText.cpp @@ -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", diff --git a/Utils/_Ja25PolishText.h b/Utils/_Ja25PolishText.h index 645ea93c..1520f1ae 100644 --- a/Utils/_Ja25PolishText.h +++ b/Utils/_Ja25PolishText.h @@ -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[]; diff --git a/Utils/_Ja25RussianText.cpp b/Utils/_Ja25RussianText.cpp index 1616a503..c43a19b0 100644 --- a/Utils/_Ja25RussianText.cpp +++ b/Utils/_Ja25RussianText.cpp @@ -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"Нет преимуществ", diff --git a/Utils/_Ja25RussianText.h b/Utils/_Ja25RussianText.h index 645ea93c..1520f1ae 100644 --- a/Utils/_Ja25RussianText.h +++ b/Utils/_Ja25RussianText.h @@ -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[]; diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index 0f6c4910..8694a2a8 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -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[] = diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index 7c29cdb8..05ca70d9 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -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[] =