mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Fix: mouse position was not restored after a message box was closed
Modified the Ranger trait to make it more useful after loosing all survival bonuses: - aim click bonus for shotguns is now again 1 (hunter) or 2 (ranger) - new aim click bonus for rifles that is half the shotgun bonus. With the default value of "1" this means 0 for hunter and 1 for ranger. This does NOT stack with the sniper bonus! It's one or the other depending on which is higher. - new speed bonus to reloading single shells into shotguns - new range bonus for shotguns of 10% (hunter) or 20% (ranger) EDB now displays the trait modified values for: - Gun Range - Draw Cost git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7761 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+3
-1
@@ -2320,10 +2320,12 @@ 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.ubRAEffectiveRangeBonusShotguns = iniReader.ReadInteger("Ranger","EFFECTIVE_RANGE_BONUS_SHOTGUNS", 10, 0, 100);
|
||||
gSkillTraitValues.ubRAReloadSpeedShotgunsManual = iniReader.ReadInteger("Ranger","RELOAD_SPEED_SHOTGUNS_MANUAL", 15, 0, 30);
|
||||
|
||||
// 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);
|
||||
gSkillTraitValues.ubGSEffectiveRangeBonusPistols = iniReader.ReadInteger("Gunslinger","EFFECTIVE_RANGE_BONUS_PISTOLS", 10, 0, 100);
|
||||
gSkillTraitValues.ubGSBonusCtHPistols = iniReader.ReadInteger("Gunslinger","BONUS_CTH_PISTOLS", 10, 0, 100);
|
||||
gSkillTraitValues.ubGSBonusCtHMachinePistols = iniReader.ReadInteger("Gunslinger","BONUS_CTH_MACHINE_PISTOLS", 5, 0, 100);
|
||||
gSkillTraitValues.ubGSCtHMPExcludeAuto = iniReader.ReadBoolean("Gunslinger","CTH_MP_EXCLUDE_AUTOFIRE", TRUE);
|
||||
|
||||
@@ -1616,6 +1616,8 @@ typedef struct
|
||||
UINT8 ubRAPumpShotgunsAPsReduction;
|
||||
UINT8 ubRAFiringSpeedBonusShotguns;
|
||||
UINT8 ubRAAimClicksAdded;
|
||||
UINT8 ubRAEffectiveRangeBonusShotguns;
|
||||
UINT8 ubRAReloadSpeedShotgunsManual;
|
||||
|
||||
// GUNSLINGER
|
||||
UINT8 ubGSFiringSpeedBonusPistols;
|
||||
|
||||
+20
-3
@@ -7444,14 +7444,31 @@ void AssignPersonnelSkillTraitHelpText( UINT8 ubTraitNumber, BOOLEAN fExpertLeve
|
||||
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[3], ( gSkillTraitValues.ubRAFiringSpeedBonusShotguns * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]);
|
||||
wcscat( apStr, atStr );
|
||||
}
|
||||
if( gSkillTraitValues.ubRAReloadSpeedShotgunsManual != 0 )
|
||||
{
|
||||
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[7], ( gSkillTraitValues.ubRAReloadSpeedShotgunsManual * (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));
|
||||
if( gSkillTraitValues.ubRAAimClicksAdded == 1 && !fExpertLevel )
|
||||
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[4], (UINT8)( gSkillTraitValues.ubRAAimClicksAdded * (fExpertLevel ? 2 : 1) ) );
|
||||
else
|
||||
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[5], (UINT8)( gSkillTraitValues.ubRAAimClicksAdded * (fExpertLevel ? 2 : 1) / 2.0f));
|
||||
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[5], (UINT8)( gSkillTraitValues.ubRAAimClicksAdded * (fExpertLevel ? 2 : 1) ) );
|
||||
|
||||
wcscat( apStr, atStr );
|
||||
// half of the above bonus also applies to rifles
|
||||
if( (gSkillTraitValues.ubRAAimClicksAdded >= 2 && !fExpertLevel) || (gSkillTraitValues.ubRAAimClicksAdded == 1 && fExpertLevel) )
|
||||
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[8], (UINT8)( gSkillTraitValues.ubRAAimClicksAdded * (fExpertLevel ? 2 : 1) / 2.0f));
|
||||
else
|
||||
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[9], (UINT8)( gSkillTraitValues.ubRAAimClicksAdded * (fExpertLevel ? 2 : 1) / 2.0f));
|
||||
|
||||
wcscat( apStr, atStr );
|
||||
}
|
||||
if( gSkillTraitValues.ubRAEffectiveRangeBonusShotguns != 0 )
|
||||
{
|
||||
swprintf( atStr, gzIMPMajorTraitsHelpTextsRanger[6], ( gSkillTraitValues.ubRAEffectiveRangeBonusShotguns * (fExpertLevel ? 2 : 1)), sSpecialCharacters[0]);
|
||||
wcscat( apStr, atStr );
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
@@ -1240,9 +1240,9 @@ UINT32 ExitMsgBox( INT8 ubExitCode )
|
||||
|
||||
if( fCursorLockedToArea == TRUE )
|
||||
{
|
||||
GetMousePos( &pPosition );
|
||||
|
||||
if( ( pPosition.iX > MessageBoxRestrictedCursorRegion.iRight ) || ( pPosition.iX > MessageBoxRestrictedCursorRegion.iLeft ) && ( pPosition.iY < MessageBoxRestrictedCursorRegion.iTop ) && ( pPosition.iY > MessageBoxRestrictedCursorRegion.iBottom ) )
|
||||
// silversurfer: Why would we only reset cursor position if it is outside of some boundary? If "fCursorLockedToArea" is set we put the cursor back to its old position no matter where it is!
|
||||
//GetMousePos( &pPosition );
|
||||
//if( ( pPosition.iX > MessageBoxRestrictedCursorRegion.iRight ) || ( pPosition.iX > MessageBoxRestrictedCursorRegion.iLeft ) && ( pPosition.iY < MessageBoxRestrictedCursorRegion.iTop ) && ( pPosition.iY > MessageBoxRestrictedCursorRegion.iBottom ) )
|
||||
{
|
||||
SimulateMouseMovement( pOldMousePosition.iX , pOldMousePosition.iY );
|
||||
}
|
||||
|
||||
@@ -6737,7 +6737,7 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
||||
iRangeValue *= ( (FLOAT)(gGameExternalOptions.iGunRangeModifier / 100) * gItemSettings.fRangeModifierLauncher);
|
||||
|
||||
// Get Final Range value
|
||||
UINT16 iFinalRangeValue = GunRange( gpItemDescObject, NULL );
|
||||
UINT16 iFinalRangeValue = GunRange( gpItemDescObject, gpItemDescSoldier );
|
||||
|
||||
// Get difference
|
||||
INT16 iRangeModifier = iFinalRangeValue - iRangeValue;
|
||||
@@ -6761,7 +6761,7 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
||||
else if ( Item[ gpComparedItemDescObject->usItem ].usItemClass & IC_LAUNCHER )
|
||||
iComparedRangeValue *= ( (FLOAT)(gGameExternalOptions.iGunRangeModifier / 100) * gItemSettings.fRangeModifierLauncher);
|
||||
// Get Final Range value
|
||||
UINT16 iComparedFinalRangeValue = GunRange( gpComparedItemDescObject, NULL );
|
||||
UINT16 iComparedFinalRangeValue = GunRange( gpComparedItemDescObject, gpItemDescSoldier );
|
||||
// Get difference
|
||||
INT16 iComparedRangeModifier = iComparedFinalRangeValue - iComparedRangeValue;
|
||||
// Print difference in base value
|
||||
@@ -7709,6 +7709,16 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
||||
|
||||
// Get final Draw Cost
|
||||
INT16 iFinalDrawAPCost = (Weapon[ gpItemDescObject->usItem ].ubReadyTime * (100 - GetPercentReadyTimeAPReduction(gpItemDescObject)) / 100);
|
||||
// final draw cost modified by traits
|
||||
if( gGameOptions.fNewTraitSystem )
|
||||
{
|
||||
// LMGs
|
||||
if( Weapon[gpItemDescObject->usItem].ubWeaponType == GUN_LMG && HAS_SKILL_TRAIT(gpItemDescSoldier, AUTO_WEAPONS_NT) )
|
||||
iFinalDrawAPCost = (FLOAT)iFinalDrawAPCost * __max(0, (FLOAT)(100 - gSkillTraitValues.ubAWPercentReadyLMGReduction * NUM_SKILL_TRAITS(gpItemDescSoldier, AUTO_WEAPONS_NT) ) / 100.0 );
|
||||
// Pistols and Revolvers
|
||||
else if( Weapon[gpItemDescObject->usItem].ubWeaponType == GUN_PISTOL && HAS_SKILL_TRAIT(gpItemDescSoldier, GUNSLINGER_NT) )
|
||||
iFinalDrawAPCost = (FLOAT)iFinalDrawAPCost * __max(0, (FLOAT)(100 - gSkillTraitValues.ubGSPercentReadyPistolsReduction * NUM_SKILL_TRAITS(gpItemDescSoldier, GUNSLINGER_NT) ) / 100.0 );
|
||||
}
|
||||
|
||||
// Get base Draw Cost
|
||||
INT16 iDrawAPCost = Weapon[ gpItemDescObject->usItem ].ubReadyTime;
|
||||
@@ -7729,6 +7739,17 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
||||
{
|
||||
// Get final Draw Cost
|
||||
INT16 iComparedFinalDrawAPCost = (Weapon[ gpComparedItemDescObject->usItem ].ubReadyTime * (100 - GetPercentReadyTimeAPReduction(gpComparedItemDescObject)) / 100);
|
||||
// final draw cost modified by traits
|
||||
if( gGameOptions.fNewTraitSystem )
|
||||
{
|
||||
// LMGs
|
||||
if( Weapon[gpItemDescObject->usItem].ubWeaponType == GUN_LMG && HAS_SKILL_TRAIT(gpItemDescSoldier, AUTO_WEAPONS_NT) )
|
||||
iComparedFinalDrawAPCost = (FLOAT)iComparedFinalDrawAPCost * __max(0, (FLOAT)(100 - gSkillTraitValues.ubAWPercentReadyLMGReduction * NUM_SKILL_TRAITS(gpItemDescSoldier, AUTO_WEAPONS_NT) ) / 100.0 );
|
||||
// Pistols and Revolvers
|
||||
else if( Weapon[gpItemDescObject->usItem].ubWeaponType == GUN_PISTOL && HAS_SKILL_TRAIT(gpItemDescSoldier, GUNSLINGER_NT) )
|
||||
iComparedFinalDrawAPCost = (FLOAT)iComparedFinalDrawAPCost * __max(0, (FLOAT)(100 - gSkillTraitValues.ubGSPercentReadyPistolsReduction * NUM_SKILL_TRAITS(gpItemDescSoldier, GUNSLINGER_NT) ) / 100.0 );
|
||||
}
|
||||
|
||||
// Get base Draw Cost
|
||||
INT16 iComparedDrawAPCost = Weapon[ gpComparedItemDescObject->usItem ].ubReadyTime;
|
||||
// Get Draw Cost Modifier
|
||||
@@ -7746,6 +7767,17 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
||||
ubNumLine = 13;
|
||||
// Get final Draw Cost
|
||||
INT16 iFinalDrawAPCost = (Weapon[ gpComparedItemDescObject->usItem ].ubReadyTime * (100 - GetPercentReadyTimeAPReduction(gpComparedItemDescObject)) / 100);
|
||||
// final draw cost modified by traits
|
||||
if( gGameOptions.fNewTraitSystem )
|
||||
{
|
||||
// LMGs
|
||||
if( Weapon[gpItemDescObject->usItem].ubWeaponType == GUN_LMG && HAS_SKILL_TRAIT(gpItemDescSoldier, AUTO_WEAPONS_NT) )
|
||||
iFinalDrawAPCost = (FLOAT)iFinalDrawAPCost * __max(0, (FLOAT)(100 - gSkillTraitValues.ubAWPercentReadyLMGReduction * NUM_SKILL_TRAITS(gpItemDescSoldier, AUTO_WEAPONS_NT) ) / 100.0 );
|
||||
// Pistols and Revolvers
|
||||
else if( Weapon[gpItemDescObject->usItem].ubWeaponType == GUN_PISTOL && HAS_SKILL_TRAIT(gpItemDescSoldier, GUNSLINGER_NT) )
|
||||
iFinalDrawAPCost = (FLOAT)iFinalDrawAPCost * __max(0, (FLOAT)(100 - gSkillTraitValues.ubGSPercentReadyPistolsReduction * NUM_SKILL_TRAITS(gpItemDescSoldier, GUNSLINGER_NT) ) / 100.0 );
|
||||
}
|
||||
|
||||
// Get base Draw Cost
|
||||
INT16 iDrawAPCost = Weapon[ gpComparedItemDescObject->usItem ].ubReadyTime;
|
||||
// Get Draw Cost Modifier
|
||||
|
||||
+34
-20
@@ -10482,8 +10482,10 @@ INT32 GetAimLevelsTraitModifier( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj )
|
||||
if ( Weapon[Item[pObj->usItem].ubClassIndex].ubWeaponType == GUN_PISTOL || Weapon[Item[pObj->usItem].ubClassIndex].ubWeaponType == GUN_M_PISTOL )
|
||||
ubSkillModifier -= gSkillTraitValues.ubGSAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, GUNSLINGER_NT );
|
||||
else if ( Weapon[Item[pObj->usItem].ubClassIndex].ubWeaponType == GUN_SHOTGUN )
|
||||
ubSkillModifier -= (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f);
|
||||
else
|
||||
ubSkillModifier -= gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT );
|
||||
else if ( Weapon[Item[pObj->usItem].ubClassIndex].ubWeaponType == GUN_RIFLE )
|
||||
ubSkillModifier -= __max( (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f), gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ) );
|
||||
else if ( Weapon[Item[pObj->usItem].ubClassIndex].ubWeaponType == GUN_SN_RIFLE )
|
||||
ubSkillModifier -= gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT );
|
||||
}
|
||||
else
|
||||
@@ -13339,9 +13341,9 @@ UINT8 AllowedAimingLevels(SOLDIERTYPE * pSoldier, INT32 sGridNo)
|
||||
// silversurfer added this - STOMP traits - Ranger bonus aim clicks
|
||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) )
|
||||
{
|
||||
maxAimForType += (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f);
|
||||
aimLevels += (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f);
|
||||
maxAimWithoutBipod += (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f);
|
||||
maxAimForType += gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT );
|
||||
aimLevels += gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT );
|
||||
maxAimWithoutBipod += gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT );
|
||||
}
|
||||
}
|
||||
else if (weaponType == GUN_LMG || (weaponType == GUN_SMG && fTwoHanded == 1))
|
||||
@@ -13356,12 +13358,12 @@ UINT8 AllowedAimingLevels(SOLDIERTYPE * pSoldier, INT32 sGridNo)
|
||||
aimLevels = 2;
|
||||
maxAimWithoutBipod = 3;
|
||||
|
||||
// SANDRO - STOMP traits - Sniper bonus aim clicks
|
||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ) )
|
||||
// SANDRO - STOMP traits - Sniper and Ranger bonus aim clicks
|
||||
if ( gGameOptions.fNewTraitSystem && weaponType == GUN_RIFLE )
|
||||
{
|
||||
maxAimForType += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
aimLevels += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
maxAimWithoutBipod += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
maxAimForType += __max( (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )), (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f) );
|
||||
aimLevels += __max( (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )), (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f) );
|
||||
maxAimWithoutBipod += __max( (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )), (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f) );
|
||||
}
|
||||
}
|
||||
else if (((weaponType == GUN_AS_RIFLE || weaponType == GUN_RIFLE) && weaponRange > 500) ||
|
||||
@@ -13370,12 +13372,22 @@ UINT8 AllowedAimingLevels(SOLDIERTYPE * pSoldier, INT32 sGridNo)
|
||||
maxAimForType = 6;
|
||||
aimLevels = 3;
|
||||
maxAimWithoutBipod = 4;
|
||||
// SANDRO - STOMP traits - Sniper bonus aim clicks
|
||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ) )
|
||||
// SANDRO - STOMP traits - Sniper and Ranger bonus aim clicks
|
||||
if ( gGameOptions.fNewTraitSystem )
|
||||
{
|
||||
maxAimForType += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
aimLevels += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
maxAimWithoutBipod += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
if( weaponType == GUN_RIFLE )
|
||||
{
|
||||
maxAimForType += __max( (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )), (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f) );
|
||||
aimLevels += __max( (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )), (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f) );
|
||||
maxAimWithoutBipod += __max( (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )), (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f) );
|
||||
}
|
||||
else if( weaponType == GUN_SN_RIFLE )
|
||||
{
|
||||
maxAimForType += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
aimLevels += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
maxAimWithoutBipod += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (weaponType == GUN_SN_RIFLE && weaponRange > 500)
|
||||
@@ -13520,11 +13532,13 @@ UINT8 AllowedAimingLevels(SOLDIERTYPE * pSoldier, INT32 sGridNo)
|
||||
aimLevels += 2;
|
||||
}
|
||||
|
||||
// SANDRO - STOMP traits - Sniper bonus aim clicks
|
||||
if ((weaponType == GUN_AS_RIFLE || weaponType == GUN_RIFLE || weaponType == GUN_SN_RIFLE) &&
|
||||
gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ) )
|
||||
// SANDRO - STOMP traits - Sniper and Ranger bonus aim clicks
|
||||
if (gGameOptions.fNewTraitSystem )
|
||||
{
|
||||
aimLevels += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
if( weaponType == GUN_RIFLE )
|
||||
aimLevels += __max( (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )), (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f) );
|
||||
else if( weaponType == GUN_SN_RIFLE )
|
||||
aimLevels += (gSkillTraitValues.ubSNAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT ));
|
||||
}
|
||||
}
|
||||
// SANDRO - STOMP traits - Gunslinger bonus aim clicks
|
||||
@@ -13538,7 +13552,7 @@ UINT8 AllowedAimingLevels(SOLDIERTYPE * pSoldier, INT32 sGridNo)
|
||||
if ( weaponType == GUN_SHOTGUN &&
|
||||
gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) )
|
||||
{
|
||||
aimLevels += (gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 2.0f);
|
||||
aimLevels += gSkillTraitValues.ubRAAimClicksAdded * NUM_SKILL_TRAITS( pSoldier, RANGER_NT );
|
||||
}
|
||||
|
||||
// SANDRO - if using alternative weapon holding, we reduce the aim levels available
|
||||
|
||||
+23
-10
@@ -3008,20 +3008,33 @@ INT16 GetAPsToReloadGunWithAmmo( SOLDIERTYPE *pSoldier, OBJECTTYPE * pGun, OBJEC
|
||||
// individually loaded guns
|
||||
int reload = 0;
|
||||
int rounds = __min((GetMagSize(pGun)-(*pGun)[0]->data.gun.ubGunShotsLeft), Magazine[Item[pAmmo->usItem].ubClassIndex].ubMagSize);
|
||||
FLOAT fSpeedBonus = 1.0;
|
||||
|
||||
// Ambidextrous check
|
||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||
fSpeedBonus *= (FLOAT)(100 - gSkillTraitValues.ubAMReloadSpeedLoose) / 100.0;
|
||||
|
||||
// Ranger bonus to reload shotgun shells manually
|
||||
if( Weapon[ pGun->usItem ].ubWeaponType == GUN_SHOTGUN && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) )
|
||||
fSpeedBonus *= (FLOAT)(100 - gSkillTraitValues.ubRAReloadSpeedShotgunsManual * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) ) / 100.0;
|
||||
|
||||
// limit bonus to proper values
|
||||
fSpeedBonus = __min( 1.0, __max( 0.1, fSpeedBonus ) );
|
||||
|
||||
if(!((*pGun)[0]->data.gun.ubGunState & GS_WEAPON_BEING_RELOADED))
|
||||
{
|
||||
reload = GetAPsToReload(pGun);
|
||||
// SANDRO - added Ambidextrous check
|
||||
reload = GetAPsToReload(pGun) * fSpeedBonus;
|
||||
/* // SANDRO - added Ambidextrous check
|
||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||
{
|
||||
reload = (INT16)(reload * (100 - gSkillTraitValues.ubAMReloadSpeedMagazines)/100);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
if(usAllAPs == 1)
|
||||
{
|
||||
for(int i = 1; i <= rounds; i++)
|
||||
{
|
||||
// SANDRO - added Ambidextrous check
|
||||
/* // SANDRO - added Ambidextrous check
|
||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||
{
|
||||
if(EnoughPoints(pSoldier,(reload + (i * (INT16)((APBPConstants[AP_RELOAD_LOOSE]*(100 - gSkillTraitValues.ubAMReloadSpeedLoose)/100) + 0.5))),0,FALSE) == FALSE)
|
||||
@@ -3031,23 +3044,23 @@ INT16 GetAPsToReloadGunWithAmmo( SOLDIERTYPE *pSoldier, OBJECTTYPE * pGun, OBJEC
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(EnoughPoints(pSoldier,(reload + (i * APBPConstants[AP_RELOAD_LOOSE])),0,FALSE) == FALSE)
|
||||
{*/
|
||||
if(EnoughPoints(pSoldier,(reload + (i * (INT16)(APBPConstants[AP_RELOAD_LOOSE] * fSpeedBonus + 0.5))),0,FALSE) == FALSE)
|
||||
{
|
||||
rounds = i-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
}
|
||||
else if (usAllAPs == 2)
|
||||
rounds = 1;
|
||||
|
||||
// SANDRO - added Ambidextrous check
|
||||
/* // SANDRO - added Ambidextrous check
|
||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||
return (reload + ((INT16) (rounds * (APBPConstants[AP_RELOAD_LOOSE]*(100 - gSkillTraitValues.ubAMReloadSpeedLoose)/100) + 0.5)));
|
||||
else
|
||||
return (reload + (rounds * APBPConstants[AP_RELOAD_LOOSE]));
|
||||
else*/
|
||||
return (reload + (rounds * (INT16)(APBPConstants[AP_RELOAD_LOOSE] * fSpeedBonus + 0.5)));
|
||||
}
|
||||
|
||||
return GetAPsToReload(pGun); // added by SANDRO - safety check
|
||||
|
||||
@@ -963,14 +963,21 @@ UINT16 GunRange( OBJECTTYPE * pObj, SOLDIERTYPE * pSoldier ) // SANDRO - added a
|
||||
rng = (usRange * GetPercentRangeBonus(pObj))/10000;
|
||||
rng += GetRangeBonus(pObj);
|
||||
|
||||
// SANDRO - STOMP traits - Gunslinger bonus range with pistols
|
||||
// SANDRO - STOMP traits
|
||||
if ( pSoldier != NULL && Item[ pObj->usItem ].usItemClass & IC_GUN )
|
||||
{
|
||||
// Gunslinger bonus range with pistols
|
||||
if ((Weapon[ pObj->usItem ].ubWeaponType == GUN_PISTOL || Weapon[ pObj->usItem ].ubWeaponType == GUN_M_PISTOL) &&
|
||||
gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, GUNSLINGER_NT ) )
|
||||
{
|
||||
rng += (rng * gSkillTraitValues.ubGSEffectiveRangeBonusPistols * NUM_SKILL_TRAITS( pSoldier, GUNSLINGER_NT ) / 100 );
|
||||
}
|
||||
// Ranger bonus range with shotguns
|
||||
else if ( Weapon[ pObj->usItem ].ubWeaponType == GUN_SHOTGUN &&
|
||||
gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ) )
|
||||
{
|
||||
rng += (rng * gSkillTraitValues.ubRAEffectiveRangeBonusShotguns * NUM_SKILL_TRAITS( pSoldier, RANGER_NT ) / 100 );
|
||||
}
|
||||
}
|
||||
|
||||
return rng;
|
||||
|
||||
@@ -150,6 +150,10 @@ 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 effective range with Shotguns\n", // TODO.Translate
|
||||
L"-%d%s APs to reload single Shotgun shells\n", // TODO.Translate
|
||||
L"Adds %d more aim click for Rifles\n", // TODO.Translate
|
||||
L"Adds %d more aim clicks for Rifles\n", // TODO.Translate
|
||||
};
|
||||
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
|
||||
{
|
||||
|
||||
@@ -150,6 +150,10 @@ 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 effective range with Shotguns\n",
|
||||
L"-%d%s APs to reload single Shotgun shells\n",
|
||||
L"Adds %d more aim click for Rifles\n",
|
||||
L"Adds %d more aim clicks for Rifles\n",
|
||||
};
|
||||
|
||||
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
|
||||
|
||||
@@ -150,6 +150,10 @@ 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 effective range with Shotguns\n",
|
||||
L"-%d%s APs to reload single Shotgun shells\n",
|
||||
L"Adds %d more aim click for Rifles\n",
|
||||
L"Adds %d more aim clicks for Rifles\n",
|
||||
};
|
||||
|
||||
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
|
||||
|
||||
@@ -151,7 +151,12 @@ 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 effective range with Shotguns\n", // TODO.Translate
|
||||
L"-%d%s APs to reload single Shotgun shells\n", // TODO.Translate
|
||||
L"Adds %d more aim click for Rifles\n", // TODO.Translate
|
||||
L"Adds %d more aim clicks for Rifles\n", // TODO.Translate
|
||||
};
|
||||
|
||||
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
|
||||
{
|
||||
L"-%d%s du nombre de PA nécessaire pour tirer avec un pistolet ou un revolver\n",
|
||||
|
||||
@@ -144,12 +144,16 @@ STR16 gzIMPMajorTraitsHelpTextsSniper[]=
|
||||
};
|
||||
STR16 gzIMPMajorTraitsHelpTextsRanger[]=
|
||||
{
|
||||
L"+%d%s Trefferchance mit Büchsen\n",
|
||||
L"+%d%s Trefferchance mit Flinten\n",
|
||||
L"-%d%s APs benötigt um Flinten zu repetieren\n",
|
||||
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 Trefferchance mit Gewehren\n",
|
||||
L"+%d%s Trefferchance mit Schrotflinten\n",
|
||||
L"-%d%s APs benötigt, um Schrotflinten zu repetieren\n",
|
||||
L"-%d%s APs benötigt, um Schrotflinten abzufeuern\n",
|
||||
L"Gibt Schrotflinten einen weiteren Zielklick\n",
|
||||
L"%d weitere Zielklicks für Schrotflinten\n",
|
||||
L"+%d%s effektive Reichweite mit Schrotflinten\n",
|
||||
L"-%d%s APs benötigt, um einzelne Schrotpatronen zu laden\n",
|
||||
L"Gibt Gewehren einen weiteren Zielklick\n",
|
||||
L"%d weitere Zielklicks für Gewehre\n",
|
||||
};
|
||||
|
||||
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
|
||||
|
||||
@@ -148,6 +148,10 @@ 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 effective range with Shotguns\n",
|
||||
L"-%d%s APs to reload single Shotgun shells\n",
|
||||
L"Adds %d more aim click for Rifles\n",
|
||||
L"Adds %d more aim clicks for Rifles\n",
|
||||
};
|
||||
|
||||
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
|
||||
|
||||
@@ -150,6 +150,10 @@ 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 effective range with Shotguns\n",
|
||||
L"-%d%s APs to reload single Shotgun shells\n",
|
||||
L"Adds %d more aim click for Rifles\n",
|
||||
L"Adds %d more aim clicks for Rifles\n",
|
||||
};
|
||||
|
||||
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
|
||||
|
||||
@@ -150,6 +150,10 @@ STR16 gzIMPMajorTraitsHelpTextsRanger[]=
|
||||
L"-%d%s ОД на выстрел из дробовика\n",
|
||||
L"+%d клик прицеливания для дробовиков\n",
|
||||
L"+%d кликов прицеливания для дробовиков\n",
|
||||
L"+%d%s effective range with Shotguns\n", // TODO.Translate
|
||||
L"-%d%s APs to reload single Shotgun shells\n", // TODO.Translate
|
||||
L"Adds %d more aim click for Rifles\n", // TODO.Translate
|
||||
L"Adds %d more aim clicks for Rifles\n", // TODO.Translate
|
||||
};
|
||||
STR16 gzIMPMajorTraitsHelpTextsGunslinger[]=
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user