diff --git a/Laptop/IMP Minor Trait.cpp b/Laptop/IMP Minor Trait.cpp index 8db89cc16..de069f162 100644 --- a/Laptop/IMP Minor Trait.cpp +++ b/Laptop/IMP Minor Trait.cpp @@ -21,6 +21,7 @@ #include "soldier profile type.h" #include "IMP Compile Character.h" #include "GameSettings.h" + #include "personnel.h" // added by Flugente #endif @@ -59,6 +60,23 @@ #define IMP_MINOR_TRAIT__GREY_BOX_OFFSET_X 5 #define IMP_MINOR_TRAIT__GREY_BOX_OFFSET_Y 7 +// 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 +UINT8 gusNewMinorTraitRemap[IMP_SKILL_TRAITS_NEW_NUMBER_MINOR_SKILLS] = +{ + AMBIDEXTROUS_NT, // IMP_SKILL_TRAITS_NEW_AMBIDEXTROUS + MELEE_NT, // IMP_SKILL_TRAITS_NEW_MELEE + THROWING_NT, // IMP_SKILL_TRAITS_NEW_THROWING + NIGHT_OPS_NT, // IMP_SKILL_TRAITS_NEW_NIGHT_OPS + STEALTHY_NT, // IMP_SKILL_TRAITS_NEW_STEALTHY + ATHLETICS_NT, // IMP_SKILL_TRAITS_NEW_ATHLETICS + BODYBUILDING_NT, // IMP_SKILL_TRAITS_NEW_BODYBUILDING + DEMOLITIONS_NT, // IMP_SKILL_TRAITS_NEW_DEMOLITIONS + TEACHING_NT, // IMP_SKILL_TRAITS_NEW_TEACHING + SCOUTING_NT, // IMP_SKILL_TRAITS_NEW_SCOUTING + RADIO_OPERATOR_NT, // IMP_SKILL_TRAITS_NEW_RADIO_OPERATOR + NO_SKILLTRAIT_NT, // IMP_SKILL_TRAITS_NEW_MINOR_NONE +}; + //******************************************************************* // // Global Variables @@ -101,7 +119,6 @@ void HandleLastSelectedMinorTrait( INT8 bNewTrait ); INT8 GetLastSelectedMinorTrait( void ); INT8 NumAvailableMinorTraits(); -void AssignMinorTraitHelpText( UINT8 ubNumber ); //ppp //******************************************************************* @@ -465,7 +482,13 @@ void IMPMinorTraitDisplaySkills() //draw the text to the screenx DrawTextToScreen( gzIMPSkillTraitsTextNewMinor[ uiCnt ], usPosX, usPosY, 0, IMP_MINOR_TRAIT__FONT, IMP_MINOR_TRAIT__COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); - AssignMinorTraitHelpText( uiCnt ); + CHAR16 apStr[5000]; + swprintf( apStr, L"" ); + AssignPersonnelSkillTraitHelpText( gusNewMinorTraitRemap[uiCnt], FALSE, FALSE, apStr ); + + // Set region help text + SetRegionFastHelpText( &(gMR_MinorTraitHelpTextRegions[uiCnt]), apStr ); + SetRegionHelpEndCallback( &gMR_MinorTraitHelpTextRegions[uiCnt], MSYS_NO_CALLBACK ); //Determine the next x location if( uiCnt < IMP_MINOR_TRAIT__TRAITS_TO_START_RIGHT_COL ) @@ -1051,413 +1074,3 @@ UINT8 ExplosivesRequiredAdjustmentForMinorTraits( INT32 iInitialValue ) return( 0 ); } - -void AssignMinorTraitHelpText( UINT8 ubNumber ) -{ - CHAR16 apStr[ 5000 ]; - CHAR16 atStr[ 1500 ]; - - switch( ubNumber ) - { - case IMP_SKILL_TRAITS_NEW_AMBIDEXTROUS: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubAMPenaltyDoubleReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsAmbidextrous[0], gSkillTraitValues.ubAMPenaltyDoubleReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAMReloadSpeedMagazines != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsAmbidextrous[1], gSkillTraitValues.ubAMReloadSpeedMagazines, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAMReloadSpeedLoose != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsAmbidextrous[2], gSkillTraitValues.ubAMReloadSpeedLoose, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAMPickItemsAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsAmbidextrous[3], gSkillTraitValues.ubAMPickItemsAPsReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAMWorkBackpackAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsAmbidextrous[4], gSkillTraitValues.ubAMWorkBackpackAPsReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAMHandleDoorsAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsAmbidextrous[5], gSkillTraitValues.ubAMHandleDoorsAPsReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAMHandleBombsAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsAmbidextrous[6], gSkillTraitValues.ubAMHandleBombsAPsReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAMAttachingItemsAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsAmbidextrous[7], gSkillTraitValues.ubAMAttachingItemsAPsReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_MELEE: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubMEBladesAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsMelee[0], gSkillTraitValues.ubMEBladesAPsReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMECtHBladesBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsMelee[1], gSkillTraitValues.ubMECtHBladesBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMECtHBluntBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsMelee[2], gSkillTraitValues.ubMECtHBluntBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMEDamageBonusBlades != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsMelee[3], gSkillTraitValues.ubMEDamageBonusBlades, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMEDamageBonusBlunt != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsMelee[4], gSkillTraitValues.ubMEDamageBonusBlunt, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.usMEAimedMeleeAttackDamageBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsMelee[5], gSkillTraitValues.usMEAimedMeleeAttackDamageBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMEDodgeBladesBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsMelee[6], gSkillTraitValues.ubMEDodgeBladesBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMECtDBladesOnTopWithBladeInHands != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsMelee[7], gSkillTraitValues.ubMECtDBladesOnTopWithBladeInHands, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMEDodgeBluntBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsMelee[8], gSkillTraitValues.ubMEDodgeBluntBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMECtDBluntOnTopWithBladeInHands != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsMelee[9], gSkillTraitValues.ubMECtDBluntOnTopWithBladeInHands, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_THROWING: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubTHBladesAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsThrowing[0], gSkillTraitValues.ubTHBladesAPsReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTHBladesMaxRange != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsThrowing[1], gSkillTraitValues.ubTHBladesMaxRange, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTHBladesCtHBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsThrowing[2], gSkillTraitValues.ubTHBladesCtHBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTHBladesCtHBonusPerClick != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsThrowing[3], gSkillTraitValues.ubTHBladesCtHBonusPerClick, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTHBladesDamageBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsThrowing[4], gSkillTraitValues.ubTHBladesDamageBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTHBladesDamageBonusPerClick != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsThrowing[5], gSkillTraitValues.ubTHBladesDamageBonusPerClick, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTHBladesSilentCriticalHitChance != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsThrowing[6], gSkillTraitValues.ubTHBladesSilentCriticalHitChance, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTHBladesCriticalHitMultiplierBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsThrowing[7], gSkillTraitValues.ubTHBladesCriticalHitMultiplierBonus); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTHBladesAimClicksAdded != 0 ) - { - if( gSkillTraitValues.ubTHBladesAimClicksAdded == 1 ) - swprintf( atStr, gzIMPMinorTraitsHelpTextsThrowing[8], gSkillTraitValues.ubTHBladesAimClicksAdded ); - else - swprintf( atStr, gzIMPMinorTraitsHelpTextsThrowing[9], gSkillTraitValues.ubTHBladesAimClicksAdded ); - - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_NIGHT_OPS: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubNOeSightRangeBonusInDark != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsNightOps[0], gSkillTraitValues.ubNOeSightRangeBonusInDark, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubNOHearingRangeBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsNightOps[1], gSkillTraitValues.ubNOHearingRangeBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubNOHearingRangeBonusInDark != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsNightOps[2], gSkillTraitValues.ubNOHearingRangeBonusInDark, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubNOIterruptsBonusInDark != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsNightOps[3], gSkillTraitValues.ubNOIterruptsBonusInDark, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubNONeedForSleepReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsNightOps[4], gSkillTraitValues.ubNONeedForSleepReduction); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_STEALTHY: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubSTStealthModeSpeedBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsStealthy[0], gSkillTraitValues.ubSTStealthModeSpeedBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSTBonusToMoveQuietly != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsStealthy[1], gSkillTraitValues.ubSTBonusToMoveQuietly, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSTStealthBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsStealthy[2], gSkillTraitValues.ubSTStealthBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSTReducedAPsRegistered != 0 && gGameOptions.fImprovedInterruptSystem ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsStealthy[4], gSkillTraitValues.ubSTReducedAPsRegistered, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSTStealthPenaltyForMovingReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsStealthy[3], gSkillTraitValues.ubSTStealthPenaltyForMovingReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_ATHLETICS: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubATAPsMovementReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsAthletics[0], gSkillTraitValues.ubATAPsMovementReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubATBPsMovementReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsAthletics[1], gSkillTraitValues.ubATBPsMovementReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_BODYBUILDING: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubBBDamageResistance != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsBodybuilding[0], gSkillTraitValues.ubBBDamageResistance, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubBBCarryWeightBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsBodybuilding[1], gSkillTraitValues.ubBBCarryWeightBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubBBBreathLossForHtHImpactReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsBodybuilding[2], gSkillTraitValues.ubBBBreathLossForHtHImpactReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.usBBIncreasedNeededDamageToFallDown != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsBodybuilding[3], gSkillTraitValues.usBBIncreasedNeededDamageToFallDown, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_DEMOLITIONS: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubDEAPsNeededToThrowGrenadesReduction != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsDemolitions[0], gSkillTraitValues.ubDEAPsNeededToThrowGrenadesReduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubDEMaxRangeToThrowGrenades != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsDemolitions[1], gSkillTraitValues.ubDEMaxRangeToThrowGrenades, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubDECtHWhenThrowingGrenades != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsDemolitions[2], gSkillTraitValues.ubDECtHWhenThrowingGrenades, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubDEDamageOfBombsAndMines != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsDemolitions[3], gSkillTraitValues.ubDEDamageOfBombsAndMines, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubDEAttachDetonatorCheckBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsDemolitions[4], gSkillTraitValues.ubDEAttachDetonatorCheckBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubDEPlantAndRemoveBombCheckBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsDemolitions[5], gSkillTraitValues.ubDEPlantAndRemoveBombCheckBonus, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubDEPlacedBombLevelBonus != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsDemolitions[6], gSkillTraitValues.ubDEPlacedBombLevelBonus); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubDEShapedChargeDamageMultiplier != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsDemolitions[7], gSkillTraitValues.ubDEShapedChargeDamageMultiplier); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_TEACHING: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubTGBonusToTrainMilitia != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsTeaching[0], gSkillTraitValues.ubTGBonusToTrainMilitia, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTGEffectiveLDRToTrainMilitia != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsTeaching[1], gSkillTraitValues.ubTGEffectiveLDRToTrainMilitia, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTGBonusToTeachOtherMercs != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsTeaching[2], gSkillTraitValues.ubTGBonusToTeachOtherMercs, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTGEffectiveSkillValueForTeaching != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsTeaching[3], gSkillTraitValues.ubTGEffectiveSkillValueForTeaching); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTGBonusOnPractising != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsTeaching[4], gSkillTraitValues.ubTGBonusOnPractising, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_SCOUTING: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubSCSightRangebonusWithScopes != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsScouting[0], gSkillTraitValues.ubSCSightRangebonusWithScopes, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.usSCSightRangebonusWithBinoculars != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsScouting[1], gSkillTraitValues.usSCSightRangebonusWithBinoculars, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSCTunnelVisionReducedWithBinoculars != 0 ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsScouting[2], gSkillTraitValues.ubSCTunnelVisionReducedWithBinoculars, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.fSCCanDetectEnemyPresenseAround ) - { - if( gSkillTraitValues.fSCCanDetermineEnemyNumbersAround ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsScouting[3]); - wcscat( apStr, atStr ); - } - else - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsScouting[4]); - wcscat( apStr, atStr ); - } - } - if( gSkillTraitValues.fSCPreventsTheEnemyToAmbushMercs ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsScouting[5]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.fSCPreventsBloodcatsAmbushes ) - { - swprintf( atStr, gzIMPMinorTraitsHelpTextsScouting[6]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_RADIO_OPERATOR: - { - swprintf( apStr, L"" ); - swprintf( atStr, gzIMPMajorTraitsHelpTextsRadioOperator[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPMajorTraitsHelpTextsRadioOperator[1]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPMajorTraitsHelpTextsRadioOperator[2]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPMajorTraitsHelpTextsRadioOperator[3]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPMajorTraitsHelpTextsRadioOperator[4]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPMajorTraitsHelpTextsRadioOperator[5]); - wcscat( apStr, atStr ); - break; - } - case IMP_SKILL_TRAITS_NEW_MINOR_NONE: - { - swprintf( apStr, gzIMPMinorTraitsHelpTextsNone[0] ); - break; - } - } - - // Set region help text - SetRegionFastHelpText( &(gMR_MinorTraitHelpTextRegions[ubNumber]), apStr ); - SetRegionHelpEndCallback( &gMR_MinorTraitHelpTextRegions[ubNumber], MSYS_NO_CALLBACK ); - - return; -} \ No newline at end of file diff --git a/Laptop/IMP Skill Trait.cpp b/Laptop/IMP Skill Trait.cpp index 3d01b03aa..e89ffcc8f 100644 --- a/Laptop/IMP Skill Trait.cpp +++ b/Laptop/IMP Skill Trait.cpp @@ -23,6 +23,7 @@ #include "IMP Color Choosing.h" // added by SANDRO #include "IMP Minor Trait.h" #include "Soldier Profile.h" + #include "personnel.h" // added by Flugente #endif @@ -62,6 +63,23 @@ #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 +UINT8 gusNewMajorTraitRemap[IMP_SKILL_TRAITS_NEW_NUMBER_MAJOR_SKILLS] = +{ + AUTO_WEAPONS_NT, // IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS + HEAVY_WEAPONS_NT, // IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS + SNIPER_NT, // IMP_SKILL_TRAITS_NEW_PROF_SNIPER + RANGER_NT, // IMP_SKILL_TRAITS_NEW_RANGER + GUNSLINGER_NT, // IMP_SKILL_TRAITS_NEW_GUNSLINGER + MARTIAL_ARTS_NT, // IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS + SQUADLEADER_NT, // IMP_SKILL_TRAITS_NEW_SQUADLEADER + TECHNICIAN_NT, // IMP_SKILL_TRAITS_NEW_TECHNICIAN + DOCTOR_NT, // IMP_SKILL_TRAITS_NEW_DOCTOR + COVERT_NT, // IMP_SKILL_TRAITS_NEW_COVERT + NO_SKILLTRAIT_NT, // IMP_SKILL_TRAITS_NEW_MAJOR_NONE +}; + + //******************************************************************* // // Global Variables @@ -112,8 +130,6 @@ BOOLEAN CameBackToSpecialtiesPageButNotFinished(); BOOLEAN DoesSkillHaveExpertLevel( UINT32 uiSkillTrait ); MOUSE_REGION gMR_SkillTraitHelpTextRegions[IMP_SKILL_TRAITS_NEW_NUMBER_MAJOR_SKILLS]; - -void AssignSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLevel ); //ppp //******************************************************************* @@ -874,7 +890,13 @@ void IMPSkillTraitDisplaySkills() } // assign help texts - AssignSkillTraitHelpText( uiCnt, ((gfSkillTraitQuestions[uiCnt] && gfSkillTraitQuestions2[uiCnt]) ? TRUE : FALSE) ); + CHAR16 apStr[5000]; + swprintf( apStr, L"" ); + AssignPersonnelSkillTraitHelpText( gusNewMajorTraitRemap[uiCnt], ((gfSkillTraitQuestions[uiCnt] && gfSkillTraitQuestions2[uiCnt]) ? TRUE : FALSE), fCharacterIsMale && !bBigBodySelected( ), apStr ); + + // Set region help text + SetRegionFastHelpText( &(gMR_SkillTraitHelpTextRegions[uiCnt]), apStr ); + SetRegionHelpEndCallback( &gMR_SkillTraitHelpTextRegions[uiCnt], MSYS_NO_CALLBACK ); //Determine the next x location if( uiCnt < uiNumSkillsToStartRightColumn ) @@ -1805,817 +1827,4 @@ INT32 ExplosivesRequiredDueToMajorSkills( void ) } return(0); -} - -void AssignSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLevel ) -{ - CHAR16 apStr[ 5000 ]; - CHAR16 atStr[ 1500 ]; - - if( gGameOptions.fNewTraitSystem ) - { - switch( ubTraitNumber ) - { - case IMP_SKILL_TRAITS_NEW_AUTO_WEAPONS: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubAWBonusCtHAssaultRifles != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsAutoWeapons[0], ( gSkillTraitValues.ubAWBonusCtHAssaultRifles * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAWBonusCtHSMGs != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsAutoWeapons[1], ( gSkillTraitValues.ubAWBonusCtHSMGs * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAWBonusCtHLMGs != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsAutoWeapons[2], ( gSkillTraitValues.ubAWBonusCtHLMGs * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAWFiringSpeedBonusLMGs != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsAutoWeapons[3], ( gSkillTraitValues.ubAWFiringSpeedBonusLMGs * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAWPercentReadyLMGReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsAutoWeapons[4], ( gSkillTraitValues.ubAWPercentReadyLMGReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAWAutoFirePenaltyReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsAutoWeapons[5], ( gSkillTraitValues.ubAWAutoFirePenaltyReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubAWUnwantedBulletsReduction > 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsAutoWeapons[6]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_HEAVY_WEAPONS: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubHWGrenadeLaunchersAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsHeavyWeapons[0], ( gSkillTraitValues.ubHWGrenadeLaunchersAPsReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubHWRocketLaunchersAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsHeavyWeapons[1], ( gSkillTraitValues.ubHWRocketLaunchersAPsReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubHWBonusCtHGrenadeLaunchers != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsHeavyWeapons[2], ( gSkillTraitValues.ubHWBonusCtHGrenadeLaunchers * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubHWBonusCtHRocketLaunchers != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsHeavyWeapons[3], ( gSkillTraitValues.ubHWBonusCtHRocketLaunchers * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubHWMortarAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsHeavyWeapons[4], ( gSkillTraitValues.ubHWMortarAPsReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubHWMortarCtHPenaltyReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsHeavyWeapons[5], ( gSkillTraitValues.ubHWMortarCtHPenaltyReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubHWDamageTanksBonusPercent != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsHeavyWeapons[6], ( gSkillTraitValues.ubHWDamageTanksBonusPercent * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubHWDamageBonusPercentForHW != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsHeavyWeapons[7], ( gSkillTraitValues.ubHWDamageBonusPercentForHW * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_PROF_SNIPER: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubSNBonusCtHRifles != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSniper[0], ( gSkillTraitValues.ubSNBonusCtHRifles * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSNBonusCtHSniperRifles != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSniper[1], ( gSkillTraitValues.ubSNBonusCtHSniperRifles * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSNEffRangeToTargetReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSniper[2], ( gSkillTraitValues.ubSNEffRangeToTargetReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSNAimingBonusPerClick != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSniper[3], ( gSkillTraitValues.ubSNAimingBonusPerClick * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSNDamageBonusPerClick != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSniper[4], ( gSkillTraitValues.ubSNDamageBonusPerClick * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - if( gSkillTraitValues.ubSNDamageBonusFromNumClicks == 0) - { - wcscat( apStr, gzIMPMajorTraitsHelpTextsSniper[5] ); - wcscat( apStr, gzIMPMajorTraitsHelpTextsSniper[6] ); - } - else if( gSkillTraitValues.ubSNDamageBonusFromNumClicks == 1 ) - { - wcscat( atStr, gzIMPMajorTraitsHelpTextsSniper[6] ); - } - else - { - wcscat( atStr, gzIMPMajorTraitsHelpTextsSniper[6] ); - wcscat( atStr, gzIMPMajorTraitsHelpTextsSniper[gSkillTraitValues.ubSNDamageBonusFromNumClicks + 4] ); - } - wcscat( atStr, L"\n" ); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSNChamberRoundAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSniper[14], ( gSkillTraitValues.ubSNChamberRoundAPsReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSNAimClicksAdded != 0 ) - { - if( UsingNewCTHSystem() == true ) - { - if( gSkillTraitValues.ubSNAimClicksAdded == 1 && !fExpertLevel ) - swprintf( atStr, gzIMPMajorTraitsHelpTextsSniper[17]); - else - swprintf( atStr, gzIMPMajorTraitsHelpTextsSniper[18], ( gSkillTraitValues.ubSNAimClicksAdded * (fExpertLevel ? 2 : 1))); - } - else - { - if( gSkillTraitValues.ubSNAimClicksAdded == 1 && !fExpertLevel) - swprintf( atStr, gzIMPMajorTraitsHelpTextsSniper[15]); - else - swprintf( atStr, gzIMPMajorTraitsHelpTextsSniper[16], ( gSkillTraitValues.ubSNAimClicksAdded * (fExpertLevel ? 2 : 1))); - } - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_RANGER: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubRABonusCtHRifles != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[0], ( gSkillTraitValues.ubRABonusCtHRifles * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubRABonusCtHShotguns != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[1], ( gSkillTraitValues.ubRABonusCtHShotguns * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubRAPumpShotgunsAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[2], ( gSkillTraitValues.ubRAPumpShotgunsAPsReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubRAFiringSpeedBonusShotguns != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[3], ( gSkillTraitValues.ubRAFiringSpeedBonusShotguns * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubRAAimClicksAdded != 0 ) - { - if( (gSkillTraitValues.ubRAAimClicksAdded >= 2 && !fExpertLevel) || (gSkillTraitValues.ubRAAimClicksAdded == 1 && fExpertLevel) ) - swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[4], (UINT8)( gSkillTraitValues.ubRAAimClicksAdded * (fExpertLevel ? 2 : 1) / 2.0f)); - else - swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[5], (UINT8)( gSkillTraitValues.ubRAAimClicksAdded * (fExpertLevel ? 2 : 1) / 2.0f)); - - 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 ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_GUNSLINGER: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubGSFiringSpeedBonusPistols != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsGunslinger[0], ( gSkillTraitValues.ubGSFiringSpeedBonusPistols * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubGSEffectiveRangeBonusPistols != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsGunslinger[1], ( gSkillTraitValues.ubGSEffectiveRangeBonusPistols * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubGSBonusCtHPistols != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsGunslinger[2], ( gSkillTraitValues.ubGSBonusCtHPistols * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubGSBonusCtHMachinePistols != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsGunslinger[3], ( gSkillTraitValues.ubGSBonusCtHMachinePistols * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - if( gSkillTraitValues.ubGSCtHMPExcludeAuto ) - wcscat( atStr, gzIMPMajorTraitsHelpTextsGunslinger[4] ); - wcscat( atStr, L"\n"); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubGSAimingBonusPerClick != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsGunslinger[5], ( gSkillTraitValues.ubGSAimingBonusPerClick * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubGSPercentReadyPistolsReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsGunslinger[6], ( gSkillTraitValues.ubGSPercentReadyPistolsReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubGSRealoadSpeedHandgunsBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsGunslinger[7], ( gSkillTraitValues.ubGSRealoadSpeedHandgunsBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubGSAimClicksAdded != 0 ) - { - if( gSkillTraitValues.ubGSAimClicksAdded == 1 && !fExpertLevel ) - swprintf( atStr, gzIMPMajorTraitsHelpTextsGunslinger[8], ( gSkillTraitValues.ubGSAimClicksAdded * (fExpertLevel ? 2 : 1))); - else - swprintf( atStr, gzIMPMajorTraitsHelpTextsGunslinger[9], ( gSkillTraitValues.ubGSAimClicksAdded * (fExpertLevel ? 2 : 1))); - - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_MARTIAL_ARTS: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubMAPunchAPsReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[0], ( gSkillTraitValues.ubMAPunchAPsReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMABonusCtHBareHands != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[1], ( gSkillTraitValues.ubMABonusCtHBareHands * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMABonusCtHBrassKnuckles != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[2], ( gSkillTraitValues.ubMABonusCtHBrassKnuckles * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMABonusDamageHandToHand != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[3], ( gSkillTraitValues.ubMABonusDamageHandToHand * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMABonusBreathDamageHandToHand != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[4], ( gSkillTraitValues.ubMABonusBreathDamageHandToHand * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.usMALostBreathRegainPenalty != 0 ) - { - if( (gSkillTraitValues.usMALostBreathRegainPenalty * (fExpertLevel ? 2 : 1)) <= 25) - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[5]); - else if( (gSkillTraitValues.usMALostBreathRegainPenalty * (fExpertLevel ? 2 : 1)) <= 50) - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[6]); - else if( (gSkillTraitValues.usMALostBreathRegainPenalty * (fExpertLevel ? 2 : 1)) <= 100) - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[7]); - else if( (gSkillTraitValues.usMALostBreathRegainPenalty * (fExpertLevel ? 2 : 1)) <= 200) - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[8]); - else if( (gSkillTraitValues.usMALostBreathRegainPenalty * (fExpertLevel ? 2 : 1)) <= 400) - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[9]); - else if( (gSkillTraitValues.usMALostBreathRegainPenalty * (fExpertLevel ? 2 : 1)) <= 700) - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[10]); - else - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[11]); - - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.usMAAimedPunchDamageBonus != 0 ) - { - if (!fCharacterIsMale || bBigBodySelected() || (gSkillTraitValues.fPermitExtraAnimationsOnlyToMA && (!gfSkillTraitQuestions[ubTraitNumber] || !gfSkillTraitQuestions2[ubTraitNumber]))) - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[12], ( gSkillTraitValues.usMAAimedPunchDamageBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - else - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[13], ( gSkillTraitValues.usMAAimedPunchDamageBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMAChanceToDodgeHtH != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[14], ( gSkillTraitValues.ubMAChanceToDodgeHtH * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMAOnTopCTDHtHBareHanded != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[15], ( gSkillTraitValues.ubMAOnTopCTDHtHBareHanded * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - if( gSkillTraitValues.ubMAOnTopCTDHtHBrassKnuckles == gSkillTraitValues.ubMAOnTopCTDHtHBareHanded ) - wcscat( apStr, gzIMPMajorTraitsHelpTextsMartialArts[16] ); - else if( gSkillTraitValues.ubMAOnTopCTDHtHBrassKnuckles > 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[17], ( gSkillTraitValues.ubMAOnTopCTDHtHBrassKnuckles * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - wcscat( apStr, L"\n" ); - } - else if( gSkillTraitValues.ubMAOnTopCTDHtHBrassKnuckles != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[18], ( gSkillTraitValues.ubMAOnTopCTDHtHBrassKnuckles * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMAChanceToDodgeMelee != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[19], ( gSkillTraitValues.ubMAChanceToDodgeMelee * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMAReducedAPsToSteal != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[20], ( gSkillTraitValues.ubMAReducedAPsToSteal * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMAAPsChangeStanceReduction != 0 && ( gSkillTraitValues.ubMAAPsChangeStanceReduction == gSkillTraitValues.ubMAApsTurnAroundReduction == gSkillTraitValues.ubMAAPsClimbOrJumpReduction )) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[21], ( gSkillTraitValues.ubMAAPsChangeStanceReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - else - { - if( gSkillTraitValues.ubMAAPsChangeStanceReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[22], ( gSkillTraitValues.ubMAAPsChangeStanceReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMAApsTurnAroundReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[23], ( gSkillTraitValues.ubMAApsTurnAroundReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMAAPsClimbOrJumpReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[24], ( gSkillTraitValues.ubMAAPsClimbOrJumpReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - } - if( gSkillTraitValues.ubMAReducedAPsRegisteredWhenMoving != 0 && gGameOptions.fImprovedInterruptSystem ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[27], ( gSkillTraitValues.ubMAReducedAPsRegisteredWhenMoving * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubMAChanceToCkickDoors != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[25], ( gSkillTraitValues.ubMAChanceToCkickDoors * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if (fCharacterIsMale && !bBigBodySelected() && - ((gSkillTraitValues.fPermitExtraAnimationsOnlyToMA && fExpertLevel) || - !gSkillTraitValues.fPermitExtraAnimationsOnlyToMA )) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[26]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_SQUADLEADER: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubSLBonusAPsPercent != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[0], ( gSkillTraitValues.ubSLBonusAPsPercent * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSLEffectiveLevelInRadius != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[1], ( gSkillTraitValues.ubSLEffectiveLevelInRadius * (fExpertLevel ? 2 : 1)), (fExpertLevel ? gzIMPSkillTraitsTextNewMajor[ubTraitNumber + NEWTRAIT_EXPERT_OFFSET] : gzIMPSkillTraitsTextNewMajor[ubTraitNumber])); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSLEffectiveLevelAsStandby != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[2], ( gSkillTraitValues.ubSLEffectiveLevelAsStandby * (fExpertLevel ? 2 : 1))); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSLCollectiveInterruptsBonus != 0 && gGameOptions.fImprovedInterruptSystem ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[11], ( gSkillTraitValues.ubSLCollectiveInterruptsBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSLOverallSuppresionBonusPercent != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[3], ( gSkillTraitValues.ubSLOverallSuppresionBonusPercent * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0], (fExpertLevel ? gzIMPSkillTraitsTextNewMajor[ubTraitNumber + NEWTRAIT_EXPERT_OFFSET] : gzIMPSkillTraitsTextNewMajor[ubTraitNumber])); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSLMoraleGainBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[4], ( gSkillTraitValues.ubSLMoraleGainBonus * (fExpertLevel ? 2 : 1))); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSLMoraleLossReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[5], ( gSkillTraitValues.ubSLMoraleLossReduction * (fExpertLevel ? 2 : 1))); - wcscat( apStr, atStr ); - } - - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[6], gSkillTraitValues.usSLRadiusNormal); - wcscat( apStr, atStr ); - if( gSkillTraitValues.usSLRadiusExtendedEar > gSkillTraitValues.usSLRadiusNormal ) - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[7], gSkillTraitValues.usSLRadiusExtendedEar); - - wcscat( apStr, atStr ); - wcscat( apStr, L"\n" ); - - if( gSkillTraitValues.ubSLMaxBonuses > 1 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[8], gSkillTraitValues.ubSLMaxBonuses ) ; - wcscat( apStr, atStr ); - } - - if( gSkillTraitValues.ubSLFearResistance != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[9], ( gSkillTraitValues.ubSLFearResistance * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0], (fExpertLevel ? gzIMPSkillTraitsTextNewMajor[ubTraitNumber + NEWTRAIT_EXPERT_OFFSET] : gzIMPSkillTraitsTextNewMajor[ubTraitNumber])); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubSLDeathMoralelossMultiplier != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsSquadleader[10], (1 + ( gSkillTraitValues.ubSLDeathMoralelossMultiplier * (fExpertLevel ? 2 : 1))), (fExpertLevel ? gzIMPSkillTraitsTextNewMajor[ubTraitNumber + NEWTRAIT_EXPERT_OFFSET] : gzIMPSkillTraitsTextNewMajor[ubTraitNumber])); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_TECHNICIAN: - { - swprintf( apStr, L"" ); - if( gSkillTraitValues.usTERepairSpeedBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[0], ( gSkillTraitValues.usTERepairSpeedBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.usTELockpickingBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[1], ( gSkillTraitValues.usTELockpickingBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.usTEDisarmElTrapBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[2], ( gSkillTraitValues.usTEDisarmElTrapBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.usTEAttachingItemsBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[3], ( gSkillTraitValues.usTEAttachingItemsBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTEUnjamGunBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[4], ( gSkillTraitValues.ubTEUnjamGunBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTERepairElectronicsPenaltyReduction != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[5], ( gSkillTraitValues.ubTERepairElectronicsPenaltyReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTEChanceToDetectTrapsBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[6], ( gSkillTraitValues.ubTEChanceToDetectTrapsBonus * (fExpertLevel ? 2 : 1))); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTECtHControlledRobotBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[7], ( gSkillTraitValues.ubTECtHControlledRobotBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0], (fExpertLevel ? gzIMPSkillTraitsTextNewMajor[ubTraitNumber + NEWTRAIT_EXPERT_OFFSET] : gzIMPSkillTraitsTextNewMajor[ubTraitNumber])); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubTETraitsNumToRepairRobot == 2 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[8], (fExpertLevel ? gzIMPSkillTraitsTextNewMajor[ubTraitNumber + NEWTRAIT_EXPERT_OFFSET] : gzIMPSkillTraitsTextNewMajor[ubTraitNumber])); - wcscat( apStr, atStr ); - } - else if( gSkillTraitValues.ubTETraitsNumToRepairRobot == 1 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[8], (fExpertLevel ? gzIMPSkillTraitsTextNewMajor[ubTraitNumber + NEWTRAIT_EXPERT_OFFSET] : gzIMPSkillTraitsTextNewMajor[ubTraitNumber])); - wcscat( apStr, atStr ); - - if( gSkillTraitValues.ubTERepairRobotPenaltyReduction != 0 && fExpertLevel) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsTechnician[9], ( gSkillTraitValues.ubTERepairRobotPenaltyReduction * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - } - break; - } - case IMP_SKILL_TRAITS_NEW_DOCTOR: - { - BOOLEAN fCanSurgery = FALSE; - swprintf( apStr, L"" ); - if( gSkillTraitValues.ubDONumberTraitsNeededForSurgery != 0 && ((gSkillTraitValues.ubDOSurgeryHealPercentBase + gSkillTraitValues.ubDOSurgeryHealPercentOnTop) > 0)) - { - if( gSkillTraitValues.ubDONumberTraitsNeededForSurgery <= (fExpertLevel ? 2 : 1)) - { - fCanSurgery = TRUE; - swprintf( atStr, gzIMPMajorTraitsHelpTextsDoctor[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPMajorTraitsHelpTextsDoctor[1], (gSkillTraitValues.ubDOSurgeryHealPercentBase + ( gSkillTraitValues.ubDOSurgeryHealPercentOnTop * (fExpertLevel ? 2 : 1))), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - if( gSkillTraitValues.usDOSurgeryMedBagConsumption >= 60 ) - wcscat( apStr, gzIMPMajorTraitsHelpTextsDoctor[2] ); - - wcscat( apStr, L"\n" ); - } - } - if( (gSkillTraitValues.usDORepairStatsRateBasic + gSkillTraitValues.usDORepairStatsRateOnTop) > 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsDoctor[3]); - wcscat( apStr, atStr ); - if( fCanSurgery ) - wcscat( apStr, gzIMPMajorTraitsHelpTextsDoctor[4] ); - - wcscat( apStr, gzIMPMajorTraitsHelpTextsDoctor[5] ); - } - if( gSkillTraitValues.usDODoctorAssignmentBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsDoctor[6], ( gSkillTraitValues.usDODoctorAssignmentBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubDOBandagingSpeedPercent != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsDoctor[7], ( gSkillTraitValues.ubDOBandagingSpeedPercent * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( gSkillTraitValues.ubDONaturalRegenBonus != 0 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsDoctor[8], ( gSkillTraitValues.ubDONaturalRegenBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - if( gSkillTraitValues.ubDOMaxRegenBonuses > 1 ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsDoctor[9], gSkillTraitValues.ubDOMaxRegenBonuses ) ; - wcscat( apStr, atStr ); - } - wcscat( apStr, L"\n" ); - } - break; - } - case IMP_SKILL_TRAITS_NEW_COVERT: - { - swprintf( apStr, L"" ); - swprintf( atStr, gzIMPMajorTraitsHelpTextsCovertOps[0]); - wcscat( apStr, atStr ); - - swprintf( atStr, gzIMPMajorTraitsHelpTextsCovertOps[1]); - wcscat( apStr, atStr ); - - if ( !fExpertLevel ) - { - swprintf( atStr, gzIMPMajorTraitsHelpTextsCovertOps[2], gSkillTraitValues.sCOCloseDetectionRange); - wcscat( apStr, atStr ); - } - - swprintf( atStr, gzIMPMajorTraitsHelpTextsCovertOps[3], gSkillTraitValues.sCOCloseDetectionRangeSoldierCorpse); - wcscat( apStr, atStr ); - - swprintf( atStr, gzIMPMajorTraitsHelpTextsCovertOps[4], ( gSkillTraitValues.sCOMeleeCTHBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - - swprintf( atStr, gzIMPMajorTraitsHelpTextsCovertOps[5], ( gSkillTraitValues.sCoMeleeInstakillBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - - INT16 apreduction = ( gSkillTraitValues.sCODisguiseAPReduction * (fExpertLevel ? 2 : 1)); - swprintf( atStr, gzIMPMajorTraitsHelpTextsCovertOps[6], apreduction, sSpecialCharacters[0]); - wcscat( apStr, atStr ); - break; - } - case IMP_SKILL_TRAITS_NEW_MAJOR_NONE: - { - swprintf( apStr, gzIMPMajorTraitsHelpTextsNone[0] ); - break; - } - } - } - else - { - switch( ubTraitNumber ) - { - case IMP_SKILL_TRAITS__LOCKPICK: - { - swprintf( apStr, L"" ); - if( gbSkillTraitBonus[LOCKPICKING_OT] != 0 ) - { - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[0], ( gbSkillTraitBonus[LOCKPICKING_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS__HAND_2_HAND: - { - swprintf( apStr, L"" ); - if( gbSkillTraitBonus[HANDTOHAND_OT] != 0 ) - { - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[1], ( gbSkillTraitBonus[HANDTOHAND_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[2], ( 3 * gbSkillTraitBonus[HANDTOHAND_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[3], ( gbSkillTraitBonus[HANDTOHAND_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS__ELECTRONICS: - { - swprintf( apStr, L"" ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[4] ); - wcscat( apStr, atStr ); - break; - } - case IMP_SKILL_TRAITS__NIGHT_OPS: - { - swprintf( apStr, L"" ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[5], (fExpertLevel ? 2 : 1)); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[6], (fExpertLevel ? 2 : 1)); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[7], (fExpertLevel ? 2 : 1)); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[8], (fExpertLevel ? 2 : 1)); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[9], (fExpertLevel ? 2 : 1)); - wcscat( apStr, atStr ); - break; - } - case IMP_SKILL_TRAITS__THROWING: - { - swprintf( apStr, L"" ); - if( gbSkillTraitBonus[THROWING_OT] != 0 ) - { - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[10], ( gbSkillTraitBonus[THROWING_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[11], ( gbSkillTraitBonus[THROWING_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[12], ( 10 * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS__TEACHING: - { - swprintf( apStr, L"" ); - if( gGameExternalOptions.ubTeachBonusToTrain != 0 ) - { - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[13], ( gGameExternalOptions.ubTeachBonusToTrain * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - if( (gGameExternalOptions.usTeacherTraitEffectOnLeadership - 100) > 0 ) - { - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[14], ( (gGameExternalOptions.usTeacherTraitEffectOnLeadership - 100) * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS__HEAVY_WEAPONS: - { - swprintf( apStr, L"" ); - if( gbSkillTraitBonus[HEAVY_WEAPS_OT] != 0 ) - { - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[15], ( gbSkillTraitBonus[HEAVY_WEAPS_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS__AUTO_WEAPONS: - { - swprintf( apStr, L"" ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[16], ( 2 * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[17] ); - wcscat( apStr, atStr ); - break; - } - case IMP_SKILL_TRAITS__STEALTHY: - { - swprintf( apStr, L"" ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[18], ( 25 * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - if( gGameExternalOptions.ubStealthTraitCoverValue != 0 ) - { - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[19], ( gGameExternalOptions.ubStealthTraitCoverValue * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS__AMBIDEXTROUS: - { - swprintf( apStr, L"" ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[20] ); - wcscat( apStr, atStr ); - break; - } - case IMP_SKILL_TRAITS__KNIFING: - { - swprintf( apStr, L"" ); - if( gbSkillTraitBonus[KNIFING_OT] != 0 ) - { - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[21], ( gbSkillTraitBonus[KNIFING_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[22], ( gbSkillTraitBonus[KNIFING_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[23], ( gbSkillTraitBonus[KNIFING_OT] / 3 * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[24], ( gbSkillTraitBonus[KNIFING_OT] / 2 * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - break; - } - case IMP_SKILL_TRAITS__PROF_SNIPER: - { - swprintf( apStr, L"" ); - if( gbSkillTraitBonus[PROF_SNIPER_OT] != 0 ) - { - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[25], ( gbSkillTraitBonus[PROF_SNIPER_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[26], ( 10 * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - break; - } - case IMP_SKILL_TRAITS__CAMO: - { - swprintf( apStr, L"" ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[27] ); - wcscat( apStr, atStr ); - break; - } - case IMP_SKILL_TRAITS__MARTIAL_ARTS: - { - swprintf( apStr, L"" ); - if( gbSkillTraitBonus[MARTIALARTS_OT] != 0 ) - { - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[28], ( gbSkillTraitBonus[MARTIALARTS_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[29], ( gbSkillTraitBonus[MARTIALARTS_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[30], ( gbSkillTraitBonus[MARTIALARTS_OT] * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[31], ( gbSkillTraitBonus[MARTIALARTS_OT] * 2 / 3 * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[32], ( gbSkillTraitBonus[MARTIALARTS_OT] / 2 * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); - wcscat( apStr, atStr ); - } - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[33]); - wcscat( apStr, atStr ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[34]); - wcscat( apStr, atStr ); - break; - } - case IMP_SKILL_TRAITS__NONE: - { - swprintf( apStr, L"" ); - swprintf( atStr, gzIMPOldSkillTraitsHelpTexts[35] ); - wcscat( apStr, atStr ); - break; - } - } - } - - // Set region help text - SetRegionFastHelpText( &(gMR_SkillTraitHelpTextRegions[ubTraitNumber]), apStr ); - SetRegionHelpEndCallback( &gMR_SkillTraitHelpTextRegions[ubTraitNumber], MSYS_NO_CALLBACK ); - - return; } \ No newline at end of file diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index a67ef73b3..ee0ad84dc 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -454,7 +454,7 @@ void HandleTimedAtmModes( void ); // SANDRO - added variables for popup help text windows MOUSE_REGION gSkillTraitHelpTextRegion[13]; BOOLEAN fAddedTraitRegion[13] = { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }; -void AssignPersonnelSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLevel, INT32 ubProfile, INT8 bRegionNumber ); + void AssignPersonnelCharacterTraitHelpText( UINT8 ubCharacterNumber ); void AssignPersonnelDisabilityHelpText( UINT8 ubDisabilityNumber ); void AssignPersonnelKillsHelpText( INT32 ubProfile ); @@ -1878,8 +1878,15 @@ void DisplayCharStats(INT32 iId, INT32 iSlot) MSYS_NO_CURSOR, MSYS_NO_CALLBACK, NULL ); MSYS_AddRegion( &gSkillTraitHelpTextRegion[0] ); fAddedTraitRegion[0] = TRUE; + // Assign the text - AssignPersonnelSkillTraitHelpText( 0, FALSE, iId, 0 ); + CHAR16 apStr[5000]; + swprintf( apStr, L"" ); + AssignPersonnelSkillTraitHelpText( 0, FALSE, (gMercProfiles[iId].ubBodyType == REGMALE), apStr ); + + // Set region help text + SetRegionFastHelpText( &(gSkillTraitHelpTextRegion[0]), apStr ); + SetRegionHelpEndCallback( &gSkillTraitHelpTextRegion[0], MSYS_NO_CALLBACK ); } else { @@ -1946,7 +1953,13 @@ void DisplayCharStats(INT32 iId, INT32 iSlot) if ( fExpert ) traitnr -= NEWTRAIT_MERCSKILL_EXPERTOFFSET; - AssignPersonnelSkillTraitHelpText( traitnr, fExpert, Menptr[iId].ubProfile, ubCnt ); + CHAR16 apStr[5000]; + swprintf( apStr, L"" ); + AssignPersonnelSkillTraitHelpText( traitnr, fExpert, (gMercProfiles[Menptr[iId].ubProfile].ubBodyType == REGMALE), apStr ); + + // Set region help text + SetRegionFastHelpText( &(gSkillTraitHelpTextRegion[ubCnt]), apStr ); + SetRegionHelpEndCallback( &gSkillTraitHelpTextRegion[ubCnt], MSYS_NO_CALLBACK ); } } @@ -2013,9 +2026,15 @@ void DisplayCharStats(INT32 iId, INT32 iSlot) MSYS_NO_CURSOR, MSYS_NO_CALLBACK, NULL ); MSYS_AddRegion( &gSkillTraitHelpTextRegion[0] ); fAddedTraitRegion[0] = TRUE; - // Assign the text - AssignPersonnelSkillTraitHelpText( bSkill1, TRUE, iId, 0 ); + // Assign the text + CHAR16 apStr[5000]; + swprintf( apStr, L"" ); + AssignPersonnelSkillTraitHelpText( bSkill1, TRUE, (gMercProfiles[iId].ubBodyType == REGMALE), apStr ); + + // Set region help text + SetRegionFastHelpText( &(gSkillTraitHelpTextRegion[0]), apStr ); + SetRegionHelpEndCallback( &gSkillTraitHelpTextRegion[0], MSYS_NO_CALLBACK ); } else { @@ -2041,10 +2060,17 @@ void DisplayCharStats(INT32 iId, INT32 iSlot) MSYS_NO_CURSOR, MSYS_NO_CALLBACK, NULL ); MSYS_AddRegion( &gSkillTraitHelpTextRegion[0] ); fAddedTraitRegion[0] = TRUE; + // Assign the text - AssignPersonnelSkillTraitHelpText( bSkill1, FALSE, iId, 0 ); + CHAR16 apStr[5000]; + swprintf( apStr, L"" ); + AssignPersonnelSkillTraitHelpText( bSkill1, FALSE, (gMercProfiles[iId].ubBodyType == REGMALE), apStr ); - bScreenLocIndex++; + // Set region help text + SetRegionFastHelpText( &(gSkillTraitHelpTextRegion[0]), apStr ); + SetRegionHelpEndCallback( &gSkillTraitHelpTextRegion[0], MSYS_NO_CALLBACK ); + + ++bScreenLocIndex; } //Display the second skill @@ -2069,10 +2095,17 @@ void DisplayCharStats(INT32 iId, INT32 iSlot) MSYS_NO_CURSOR, MSYS_NO_CALLBACK, NULL ); MSYS_AddRegion( &gSkillTraitHelpTextRegion[1] ); fAddedTraitRegion[1] = TRUE; + // Assign the text - AssignPersonnelSkillTraitHelpText( bSkill2, FALSE, iId, 1 ); + CHAR16 apStr[5000]; + swprintf( apStr, L"" ); + AssignPersonnelSkillTraitHelpText( bSkill2, FALSE, (gMercProfiles[iId].ubBodyType == REGMALE), apStr ); - bScreenLocIndex++; + // Set region help text + SetRegionFastHelpText( &(gSkillTraitHelpTextRegion[1]), apStr ); + SetRegionHelpEndCallback( &gSkillTraitHelpTextRegion[1], MSYS_NO_CALLBACK ); + + ++bScreenLocIndex; } //if no skill was displayed @@ -2093,8 +2126,15 @@ void DisplayCharStats(INT32 iId, INT32 iSlot) MSYS_NO_CURSOR, MSYS_NO_CALLBACK, NULL ); MSYS_AddRegion( &gSkillTraitHelpTextRegion[0] ); fAddedTraitRegion[0] = TRUE; + // Assign the text - AssignPersonnelSkillTraitHelpText( bSkill1, FALSE, iId, 0 ); + CHAR16 apStr[5000]; + swprintf( apStr, L"" ); + AssignPersonnelSkillTraitHelpText( bSkill1, FALSE, (gMercProfiles[iId].ubBodyType == REGMALE), apStr ); + + // Set region help text + SetRegionFastHelpText( &(gSkillTraitHelpTextRegion[0]), apStr ); + SetRegionHelpEndCallback( &gSkillTraitHelpTextRegion[0], MSYS_NO_CALLBACK ); } } } @@ -2107,7 +2147,6 @@ void DisplayCharStats(INT32 iId, INT32 iSlot) break; } } - return; } @@ -7220,9 +7259,9 @@ INT32 CalcTimeLeftOnMercContract( SOLDIERTYPE *pSoldier ) } // SANDRO - Popup text windows for traits -void AssignPersonnelSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLevel, INT32 ubProfile, INT8 bRegionNumber ) +void AssignPersonnelSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLevel, BOOLEAN fRegMale, STR16 apStr ) { - CHAR16 apStr[ 5000 ]; + //CHAR16 apStr[ 5000 ]; CHAR16 atStr[ 1500 ]; if( gGameOptions.fNewTraitSystem ) @@ -7554,7 +7593,7 @@ void AssignPersonnelSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLeve } if( gSkillTraitValues.usMAAimedPunchDamageBonus != 0 ) { - if (gMercProfiles[ ubProfile ].ubBodyType != REGMALE || (gSkillTraitValues.fPermitExtraAnimationsOnlyToMA && !fExpertLevel)) + if ( !fRegMale || (gSkillTraitValues.fPermitExtraAnimationsOnlyToMA && !fExpertLevel) ) swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[12], ( gSkillTraitValues.usMAAimedPunchDamageBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); else swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[13], ( gSkillTraitValues.usMAAimedPunchDamageBonus * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); @@ -7627,8 +7666,8 @@ void AssignPersonnelSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLeve swprintf( atStr, gzIMPMajorTraitsHelpTextsMartialArts[25], ( gSkillTraitValues.ubMAChanceToCkickDoors * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]); wcscat( apStr, atStr ); } - //if (gMercProfiles[ ubProfile ].ubBodyType == REGMALE && - if (gMercProfiles[ ubProfile ].ubBodyType == REGMALE && + + if ( fRegMale && ((gSkillTraitValues.fPermitExtraAnimationsOnlyToMA && fExpertLevel) || !gSkillTraitValues.fPermitExtraAnimationsOnlyToMA )) { @@ -8451,13 +8490,8 @@ void AssignPersonnelSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLeve } } } - - // Set region help text - SetRegionFastHelpText( &(gSkillTraitHelpTextRegion[bRegionNumber]), apStr ); - SetRegionHelpEndCallback( &gSkillTraitHelpTextRegion[bRegionNumber], MSYS_NO_CALLBACK ); - - return; } + // SANDRO - Popup text windows for character void AssignPersonnelCharacterTraitHelpText( UINT8 ubCharacterNumber ) { @@ -8469,8 +8503,6 @@ void AssignPersonnelCharacterTraitHelpText( UINT8 ubCharacterNumber ) // Set region help text SetRegionFastHelpText( &(gSkillTraitHelpTextRegion[5]), apStr ); SetRegionHelpEndCallback( &gSkillTraitHelpTextRegion[5], MSYS_NO_CALLBACK ); - - return; } @@ -8485,8 +8517,6 @@ void AssignPersonnelDisabilityHelpText( UINT8 ubDisabilityNumber ) // Set region help text SetRegionFastHelpText( &(gSkillTraitHelpTextRegion[6]), apStr ); SetRegionHelpEndCallback( &gSkillTraitHelpTextRegion[6], MSYS_NO_CALLBACK ); - - return; } void AssignPersonnelKillsHelpText( INT32 ubProfile ) diff --git a/Laptop/personnel.h b/Laptop/personnel.h index bfce10791..5b48dccd5 100644 --- a/Laptop/personnel.h +++ b/Laptop/personnel.h @@ -79,10 +79,6 @@ BOOLEAN TransferFundsFromBankToMerc( SOLDIERTYPE *pSoldier, INT32 iCurrentBalanc BOOLEAN RemoveNewlyHiredMercFromPersonnelDepartedList( UINT8 ubProfile ); +void AssignPersonnelSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLevel, BOOLEAN fRegMale, STR16 apStr ); + #endif - - - - - -