mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
- fixed incorrect rounding in several places in the code
- diagonal movement now uses the proper amount of AP and BP git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8634 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+2
-2
@@ -55,8 +55,8 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CHAR8 czVersionNumber[16] = { "Build 18.31.10" }; //YY.MM.DD
|
CHAR8 czVersionNumber[16] = { "Build 18.03.11" }; //YY.MM.DD
|
||||||
CHAR16 zTrackingNumber[16] = { L"Z" };
|
CHAR16 zTrackingNumber[16] = { L"Z" };
|
||||||
CHAR16 zRevisionNumber[16] = { L"Revision 8633" };
|
CHAR16 zRevisionNumber[16] = { L"Revision 8634" };
|
||||||
|
|
||||||
// SAVE_GAME_VERSION is defined in header, change it there
|
// SAVE_GAME_VERSION is defined in header, change it there
|
||||||
|
|||||||
@@ -1204,7 +1204,7 @@ INT32 CalculateInsuranceContractCost( INT32 iLength, UINT8 ubMercID )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// premium depend on merc's salary, the base insurance rate, and the individual's risk factor at this time
|
// premium depend on merc's salary, the base insurance rate, and the individual's risk factor at this time
|
||||||
uiDailyInsurancePremium = (UINT32) (((pProfile->sSalary * INSURANCE_PREMIUM_RATE * flRiskFactor) / 100) + 0.5);
|
uiDailyInsurancePremium = (UINT32) (pProfile->sSalary * INSURANCE_PREMIUM_RATE * flRiskFactor / 100.0f + 0.5f);
|
||||||
// multiply by the insurance contract length
|
// multiply by the insurance contract length
|
||||||
uiTotalInsurancePremium = uiDailyInsurancePremium * iLength;
|
uiTotalInsurancePremium = uiDailyInsurancePremium * iLength;
|
||||||
|
|
||||||
|
|||||||
@@ -8986,7 +8986,7 @@ INT8 CalculateMercsAchievementPercentage( INT32 ubProfile )
|
|||||||
// Calculate percentage
|
// Calculate percentage
|
||||||
if( ulTotalMercPoints != 0 )
|
if( ulTotalMercPoints != 0 )
|
||||||
{
|
{
|
||||||
uiMercPercentage = (UINT32)(((100 * uiMercPoints)/ulTotalMercPoints)+ 0.5);
|
uiMercPercentage = (UINT32)(100.0f * (FLOAT)uiMercPoints / (FLOAT)ulTotalMercPoints + 0.5f);
|
||||||
|
|
||||||
uiMercPercentage = min( 100, uiMercPercentage );
|
uiMercPercentage = min( 100, uiMercPercentage );
|
||||||
|
|
||||||
|
|||||||
@@ -4453,7 +4453,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
|||||||
}
|
}
|
||||||
else if ((HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT )) && ( gGameOptions.fNewTraitSystem ))
|
else if ((HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT )) && ( gGameOptions.fNewTraitSystem ))
|
||||||
{
|
{
|
||||||
sAPCost += max( 1, (INT16)((APBPConstants[AP_STEAL_ITEM] * (100 - gSkillTraitValues.ubMAReducedAPsToSteal * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT ))/ 100) + 0.5));
|
sAPCost += max( 1, (INT16)(APBPConstants[AP_STEAL_ITEM] * (100 - gSkillTraitValues.ubMAReducedAPsToSteal * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8175,13 +8175,13 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
|||||||
else if( Weapon[ gpItemDescObject->usItem ].ubWeaponType == GUN_SHOTGUN && Weapon[gpItemDescObject->usItem].swapClips != 1 )
|
else if( Weapon[ gpItemDescObject->usItem ].ubWeaponType == GUN_SHOTGUN && Weapon[gpItemDescObject->usItem].swapClips != 1 )
|
||||||
iFinalReloadAPCost = (INT16)( (FLOAT)iFinalReloadAPCost
|
iFinalReloadAPCost = (INT16)( (FLOAT)iFinalReloadAPCost
|
||||||
* max(0,(100 - gSkillTraitValues.ubRAReloadSpeedShotgunsManual * NUM_SKILL_TRAITS( gpItemDescSoldier, RANGER_NT )
|
* max(0,(100 - gSkillTraitValues.ubRAReloadSpeedShotgunsManual * NUM_SKILL_TRAITS( gpItemDescSoldier, RANGER_NT )
|
||||||
- gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT ) ) ) / 100.0 + 0.5f );
|
- gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT ) ) ) / 100.0f + 0.5f );
|
||||||
// ambidextrous reload bullets
|
// ambidextrous reload bullets
|
||||||
else if( Weapon[gpItemDescObject->usItem].swapClips != 1 )
|
else if( Weapon[gpItemDescObject->usItem].swapClips != 1 )
|
||||||
iFinalReloadAPCost = (INT16)( (FLOAT)iFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) )/100 + 0.5);
|
iFinalReloadAPCost = (INT16)( (FLOAT)iFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) ) / 100.0f + 0.5f);
|
||||||
// ambidextrous reload magazines
|
// ambidextrous reload magazines
|
||||||
else
|
else
|
||||||
iFinalReloadAPCost = (INT16)( (FLOAT)iFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedMagazines * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) )/100 + 0.5);
|
iFinalReloadAPCost = (INT16)( (FLOAT)iFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedMagazines * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) ) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get base Reload Cost
|
// Get base Reload Cost
|
||||||
@@ -8220,13 +8220,13 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
|||||||
else if( Weapon[ gpComparedItemDescObject->usItem ].ubWeaponType == GUN_SHOTGUN && Weapon[gpComparedItemDescObject->usItem].swapClips != 1 )
|
else if( Weapon[ gpComparedItemDescObject->usItem ].ubWeaponType == GUN_SHOTGUN && Weapon[gpComparedItemDescObject->usItem].swapClips != 1 )
|
||||||
iComparedFinalReloadAPCost = (INT16)( (FLOAT)iComparedFinalReloadAPCost
|
iComparedFinalReloadAPCost = (INT16)( (FLOAT)iComparedFinalReloadAPCost
|
||||||
* max(0,(100 - gSkillTraitValues.ubRAReloadSpeedShotgunsManual * NUM_SKILL_TRAITS( gpItemDescSoldier, RANGER_NT )
|
* max(0,(100 - gSkillTraitValues.ubRAReloadSpeedShotgunsManual * NUM_SKILL_TRAITS( gpItemDescSoldier, RANGER_NT )
|
||||||
- gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT ) ) ) / 100.0 + 0.5f );
|
- gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT ) ) ) / 100.0f + 0.5f );
|
||||||
// ambidextrous reload bullets
|
// ambidextrous reload bullets
|
||||||
else if( Weapon[gpComparedItemDescObject->usItem].swapClips != 1 )
|
else if( Weapon[gpComparedItemDescObject->usItem].swapClips != 1 )
|
||||||
iComparedFinalReloadAPCost = (INT16)( (FLOAT)iComparedFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) )/100 + 0.5);
|
iComparedFinalReloadAPCost = (INT16)( (FLOAT)iComparedFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) ) / 100.0f + 0.5f);
|
||||||
// ambidextrous reload magazines
|
// ambidextrous reload magazines
|
||||||
else
|
else
|
||||||
iComparedFinalReloadAPCost = (INT16)( (FLOAT)iComparedFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedMagazines * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) )/100 + 0.5);
|
iComparedFinalReloadAPCost = (INT16)( (FLOAT)iComparedFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedMagazines * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) ) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get base Reload Cost
|
// Get base Reload Cost
|
||||||
@@ -8272,10 +8272,10 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
|||||||
- gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT ) ) ) / 100.0 + 0.5f );
|
- gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT ) ) ) / 100.0 + 0.5f );
|
||||||
// ambidextrous reload bullets
|
// ambidextrous reload bullets
|
||||||
else if( Weapon[gpComparedItemDescObject->usItem].swapClips != 1 )
|
else if( Weapon[gpComparedItemDescObject->usItem].swapClips != 1 )
|
||||||
iFinalReloadAPCost = (INT16)( (FLOAT)iFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) )/100 + 0.5);
|
iFinalReloadAPCost = (INT16)( (FLOAT)iFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedLoose * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) ) / 100.0f + 0.5f);
|
||||||
// ambidextrous reload magazines
|
// ambidextrous reload magazines
|
||||||
else
|
else
|
||||||
iFinalReloadAPCost = (INT16)( (FLOAT)iFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedMagazines * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) )/100 + 0.5);
|
iFinalReloadAPCost = (INT16)( (FLOAT)iFinalReloadAPCost * max( 0,(100 - gSkillTraitValues.ubAMReloadSpeedMagazines * NUM_SKILL_TRAITS( gpItemDescSoldier, AMBIDEXTROUS_NT )) ) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get base Reload Cost
|
// Get base Reload Cost
|
||||||
|
|||||||
@@ -4088,7 +4088,7 @@ BOOLEAN ChangeZipperStatus(SOLDIERTYPE *pSoldier, BOOLEAN newStatus)
|
|||||||
sAPCost = (newStatus) ? APBPConstants[AP_CLOSE_ZIPPER] : APBPConstants[AP_OPEN_ZIPPER];
|
sAPCost = (newStatus) ? APBPConstants[AP_CLOSE_ZIPPER] : APBPConstants[AP_OPEN_ZIPPER];
|
||||||
// SANDRO - ambidextrous bonus to handle things faster
|
// SANDRO - ambidextrous bonus to handle things faster
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
sAPCost = (INT16)((sAPCost * (100 - gSkillTraitValues.ubAMWorkBackpackAPsReduction) / 100) + 0.5);
|
sAPCost = (INT16)(sAPCost * (100 - gSkillTraitValues.ubAMWorkBackpackAPsReduction) / 100.0f + 0.5f);
|
||||||
|
|
||||||
//Are we currently in combat?
|
//Are we currently in combat?
|
||||||
if(gTacticalStatus.uiFlags & INCOMBAT)
|
if(gTacticalStatus.uiFlags & INCOMBAT)
|
||||||
|
|||||||
@@ -6439,10 +6439,10 @@ void NCTHImprovedAPColor( SOLDIERTYPE* pSoldier, OBJECTTYPE* pWeapon )
|
|||||||
{
|
{
|
||||||
// Sniper trait makes chambering a round faster
|
// Sniper trait makes chambering a round faster
|
||||||
if (( Weapon[Item[pWeapon->usItem].ubClassIndex].ubWeaponType == GUN_SN_RIFLE || Weapon[Item[pWeapon->usItem].ubClassIndex].ubWeaponType == GUN_RIFLE ) && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ))
|
if (( Weapon[Item[pWeapon->usItem].ubClassIndex].ubWeaponType == GUN_SN_RIFLE || Weapon[Item[pWeapon->usItem].ubClassIndex].ubWeaponType == GUN_RIFLE ) && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ))
|
||||||
sModifiedReloadAP = (INT16)(((sModifiedReloadAP * (100 - gSkillTraitValues.ubSNChamberRoundAPsReduction * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )))/100) + 0.5);
|
sModifiedReloadAP = (INT16)(sModifiedReloadAP * (100 - gSkillTraitValues.ubSNChamberRoundAPsReduction * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )) / 100.0f + 0.5f);
|
||||||
// Ranger trait makes pumping shotguns faster
|
// Ranger trait makes pumping shotguns faster
|
||||||
else if (( Weapon[Item[pWeapon->usItem].ubClassIndex].ubWeaponType == GUN_SHOTGUN ) && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
|
else if (( Weapon[Item[pWeapon->usItem].ubClassIndex].ubWeaponType == GUN_SHOTGUN ) && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
|
||||||
sModifiedReloadAP = (INT16)(((sModifiedReloadAP * (100 - gSkillTraitValues.ubRAPumpShotgunsAPsReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT )))/100) + 0.5);
|
sModifiedReloadAP = (INT16)(sModifiedReloadAP * (100 - gSkillTraitValues.ubRAPumpShotgunsAPsReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT )) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
INT16 sPointsToShoot = CalcTotalAPsToAttack( pSoldier, gCTHDisplay.iTargetGridNo, 0, pSoldier->aiData.bShownAimTime ) + sModifiedReloadAP;
|
INT16 sPointsToShoot = CalcTotalAPsToAttack( pSoldier, gCTHDisplay.iTargetGridNo, 0, pSoldier->aiData.bShownAimTime ) + sModifiedReloadAP;
|
||||||
|
|||||||
+2
-2
@@ -2271,7 +2271,7 @@ UINT8 AttachmentAPCost( UINT16 usAttachment, UINT16 usItem, SOLDIERTYPE * pSoldi
|
|||||||
{
|
{
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
{
|
{
|
||||||
ubAPCost = (UINT8)((ubAPCost * (100 - gSkillTraitValues.ubAMAttachingItemsAPsReduction) / 100) + 0.5);
|
ubAPCost = (UINT8)(ubAPCost * (100 - gSkillTraitValues.ubAMAttachingItemsAPsReduction) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2290,7 +2290,7 @@ UINT8 AttachmentAPCost( UINT16 usAttachment, OBJECTTYPE * pObj, SOLDIERTYPE * pS
|
|||||||
{
|
{
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
{
|
{
|
||||||
ubAPCost = (UINT8)((ubAPCost * (100 - gSkillTraitValues.ubAMAttachingItemsAPsReduction) / 100) + 0.5);
|
ubAPCost = (UINT8)(ubAPCost * (100 - gSkillTraitValues.ubAMAttachingItemsAPsReduction) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10997,21 +10997,21 @@ INT8 CalcEffectiveShockLevel( SOLDIERTYPE * pSoldier )
|
|||||||
// Squadleader's resistance to cowering
|
// Squadleader's resistance to cowering
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, SQUADLEADER_NT ))
|
if ( HAS_SKILL_TRAIT( pSoldier, SQUADLEADER_NT ))
|
||||||
{
|
{
|
||||||
bShockForCower = (INT8)((bShockForCower * (100 - gSkillTraitValues.ubSLFearResistance * NUM_SKILL_TRAITS( pSoldier, SQUADLEADER_NT )) /100) + 0.5);
|
bShockForCower = (INT8)(bShockForCower * (100 - gSkillTraitValues.ubSLFearResistance * NUM_SKILL_TRAITS( pSoldier, SQUADLEADER_NT )) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for character traits
|
// Check for character traits
|
||||||
if ( DoesMercHavePersonality( pSoldier, CHAR_TRAIT_INTELLECTUAL ) )
|
if ( DoesMercHavePersonality( pSoldier, CHAR_TRAIT_INTELLECTUAL ) )
|
||||||
{
|
{
|
||||||
bShockForCower = (INT8)((bShockForCower * 23 / 20 ) + 0.5); // +15% as shock
|
bShockForCower = (INT8)(bShockForCower * 23.0f / 20.0f + 0.5f); // +15% as shock
|
||||||
}
|
}
|
||||||
else if ( DoesMercHavePersonality( pSoldier, CHAR_TRAIT_DAUNTLESS ) )
|
else if ( DoesMercHavePersonality( pSoldier, CHAR_TRAIT_DAUNTLESS ) )
|
||||||
{
|
{
|
||||||
bShockForCower = (INT8)((bShockForCower * 17 / 20 ) + 0.5); // -15% as shock
|
bShockForCower = (INT8)(bShockForCower * 17.0f / 20.0f + 0.5f); // -15% as shock
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flugente: personal fear resistance
|
// Flugente: personal fear resistance
|
||||||
bShockForCower = (INT8)((bShockForCower * (100 - pSoldier->GetFearResistanceBonus()) / 100 ) + 0.5);
|
bShockForCower = (INT8)(bShockForCower * (100 - pSoldier->GetFearResistanceBonus()) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
return bShockForCower;
|
return bShockForCower;
|
||||||
|
|||||||
+203
-205
@@ -3629,7 +3629,7 @@ if(!GridNoOnVisibleWorldTile(iDestination))
|
|||||||
// SANDRO - STOMP traits - Athletics trait decreases movement cost
|
// SANDRO - STOMP traits - Athletics trait decreases movement cost
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( s, ATHLETICS_NT ))
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( s, ATHLETICS_NT ))
|
||||||
{
|
{
|
||||||
ubAPCost = max(1, (INT16)((ubAPCost * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100) + 0.5));
|
ubAPCost = max(1, (INT16)(ubAPCost * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100.0f + 0.5f));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Moa: scuba fins and swimming background
|
// Moa: scuba fins and swimming background
|
||||||
@@ -4441,31 +4441,30 @@ void ErasePath(char bEraseOldOne)
|
|||||||
|
|
||||||
INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget)
|
INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget)
|
||||||
{
|
{
|
||||||
INT16 sTileCost,sPoints=0,sAnimCost=0;
|
INT16 sTileCost,sPoints=0,sAnimCost=0;
|
||||||
INT16 sPointsWalk=0,sPointsCrawl=0,sPointsRun=0,sPointsSwat=0;
|
INT16 sPointsWalk=0,sPointsCrawl=0,sPointsRun=0,sPointsSwat=0;
|
||||||
INT16 sExtraCostStand,sExtraCostSwat,sExtraCostCrawl;
|
INT16 sExtraCostStand,sExtraCostSwat,sExtraCostCrawl;
|
||||||
INT16 sMovementAPsCost = 0; // added by SANDRO
|
FLOAT sMovementAPsCost = 0; // added by SANDRO
|
||||||
INT32 iLastGrid, sTempGrid;
|
INT32 iLastGrid, sTempGrid;
|
||||||
INT32 iCnt;
|
INT32 iCnt;
|
||||||
INT32 sOldGrid=0;
|
INT32 sOldGrid=0;
|
||||||
INT16 sFootOrderIndex;
|
INT16 sFootOrderIndex;
|
||||||
INT16 sSwitchValue;
|
INT16 sSwitchValue;
|
||||||
INT16 sFootOrder[5] = { GREENSTEPSTART, PURPLESTEPSTART, BLUESTEPSTART,
|
INT16 sFootOrder[5] = { GREENSTEPSTART, PURPLESTEPSTART, BLUESTEPSTART, ORANGESTEPSTART, REDSTEPSTART };
|
||||||
ORANGESTEPSTART, REDSTEPSTART };
|
UINT16 usTileIndex;
|
||||||
UINT16 usTileIndex;
|
UINT16 usTileNum;
|
||||||
UINT16 usTileNum;
|
LEVELNODE *pNode;
|
||||||
LEVELNODE *pNode;
|
|
||||||
UINT16 usMovementModeToUseForAPs;
|
UINT16 usMovementModeToUseForAPs;
|
||||||
BOOLEAN bIgnoreNextCost = FALSE;
|
BOOLEAN bIgnoreNextCost = FALSE;
|
||||||
INT32 sTestGridNo;
|
INT32 sTestGridNo;
|
||||||
|
|
||||||
if ( bPlot && gusPathShown )
|
if ( bPlot && gusPathShown )
|
||||||
{
|
{
|
||||||
ErasePath(FALSE);
|
ErasePath(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
gusAPtsToMove = 0;
|
gusAPtsToMove = 0;
|
||||||
sTempGrid = pSold->sGridNo;
|
sTempGrid = pSold->sGridNo;
|
||||||
|
|
||||||
sFootOrderIndex = 0;
|
sFootOrderIndex = 0;
|
||||||
|
|
||||||
@@ -4528,14 +4527,10 @@ INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPl
|
|||||||
// sAnimCost = APBPConstants[AP_CROUCH];
|
// sAnimCost = APBPConstants[AP_CROUCH];
|
||||||
// break;
|
// break;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
sPoints = sPoints + sAnimCost;
|
sPoints = sPoints + sAnimCost;
|
||||||
gusAPtsToMove = gusAPtsToMove + sAnimCost;
|
gusAPtsToMove = gusAPtsToMove + sAnimCost;*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (bStayOn)
|
if (bStayOn)
|
||||||
{
|
{
|
||||||
@@ -4580,68 +4575,21 @@ INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPl
|
|||||||
sTileCost = TerrainActionPoints( pSold, sTempGrid, (INT8)guiPathingData[iCnt], pSold->pathing.bLevel );
|
sTileCost = TerrainActionPoints( pSold, sTempGrid, (INT8)guiPathingData[iCnt], pSold->pathing.bLevel );
|
||||||
|
|
||||||
|
|
||||||
if ( bIgnoreNextCost )
|
if ( bIgnoreNextCost )
|
||||||
{
|
|
||||||
bIgnoreNextCost = FALSE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// ATE: If we have a 'special cost, like jump fence...
|
|
||||||
if ( sSwitchValue == TRAVELCOST_FENCE )
|
|
||||||
{
|
{
|
||||||
sPoints = sPoints + sTileCost;
|
bIgnoreNextCost = FALSE;
|
||||||
|
|
||||||
bIgnoreNextCost = TRUE;
|
|
||||||
|
|
||||||
// If we are changeing stance ( either before or after getting there....
|
|
||||||
// We need to reflect that...
|
|
||||||
switch( usMovementModeToUseForAPs )
|
|
||||||
{
|
|
||||||
case RUNNING:
|
|
||||||
case WALKING :
|
|
||||||
case WALKING_WEAPON_RDY:
|
|
||||||
case WALKING_DUAL_RDY:
|
|
||||||
case WALKING_ALTERNATIVE_RDY :
|
|
||||||
|
|
||||||
// Add here cost to go from crouch to stand AFTER fence hop....
|
|
||||||
// Since it's AFTER.. make sure we will be moving after jump...
|
|
||||||
if ( ( iCnt + 2 ) < iLastGrid )
|
|
||||||
{
|
|
||||||
sExtraCostStand += GetAPsCrouch(pSold, TRUE);
|
|
||||||
|
|
||||||
// ATE: if running, charge extra point to srart again
|
|
||||||
if ( usMovementModeToUseForAPs== RUNNING )
|
|
||||||
{
|
|
||||||
sExtraCostStand++;
|
|
||||||
}
|
|
||||||
|
|
||||||
sPoints = sPoints + sExtraCostStand;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SWATTING:
|
|
||||||
case CROUCHEDMOVE_RIFLE_READY:
|
|
||||||
case CROUCHEDMOVE_PISTOL_READY:
|
|
||||||
case CROUCHEDMOVE_DUAL_READY:
|
|
||||||
|
|
||||||
// Add cost to stand once there BEFORE....
|
|
||||||
sExtraCostSwat += GetAPsCrouch(pSold, TRUE);
|
|
||||||
sPoints = sPoints + sExtraCostSwat;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CRAWLING:
|
|
||||||
|
|
||||||
// Can't do it here.....
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (sTileCost > 0)
|
else
|
||||||
{
|
{
|
||||||
// else, movement is adjusted based on mode...
|
// ATE: If we have a 'special cost, like jump fence...
|
||||||
|
if ( sSwitchValue == TRAVELCOST_FENCE )
|
||||||
if (sSwitchValue == TRAVELCOST_NOT_STANDING)
|
|
||||||
{
|
{
|
||||||
|
sPoints = sPoints + sTileCost;
|
||||||
|
|
||||||
|
bIgnoreNextCost = TRUE;
|
||||||
|
|
||||||
|
// If we are changeing stance ( either before or after getting there....
|
||||||
|
// We need to reflect that...
|
||||||
switch( usMovementModeToUseForAPs )
|
switch( usMovementModeToUseForAPs )
|
||||||
{
|
{
|
||||||
case RUNNING:
|
case RUNNING:
|
||||||
@@ -4649,148 +4597,198 @@ INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPl
|
|||||||
case WALKING_WEAPON_RDY:
|
case WALKING_WEAPON_RDY:
|
||||||
case WALKING_DUAL_RDY:
|
case WALKING_DUAL_RDY:
|
||||||
case WALKING_ALTERNATIVE_RDY :
|
case WALKING_ALTERNATIVE_RDY :
|
||||||
// charge crouch APs for ducking head!
|
|
||||||
sExtraCostStand += GetAPsCrouch(pSold, TRUE);
|
// Add here cost to go from crouch to stand AFTER fence hop....
|
||||||
|
// Since it's AFTER.. make sure we will be moving after jump...
|
||||||
|
if ( ( iCnt + 2 ) < iLastGrid )
|
||||||
|
{
|
||||||
|
sExtraCostStand += GetAPsCrouch(pSold, TRUE);
|
||||||
|
|
||||||
|
// ATE: if running, charge extra point to srart again
|
||||||
|
if ( usMovementModeToUseForAPs== RUNNING )
|
||||||
|
{
|
||||||
|
sExtraCostStand++;
|
||||||
|
}
|
||||||
|
|
||||||
|
sPoints = sPoints + sExtraCostStand;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
case SWATTING:
|
||||||
|
case CROUCHEDMOVE_RIFLE_READY:
|
||||||
|
case CROUCHEDMOVE_PISTOL_READY:
|
||||||
|
case CROUCHEDMOVE_DUAL_READY:
|
||||||
|
|
||||||
|
// Add cost to stand once there BEFORE....
|
||||||
|
sExtraCostSwat += GetAPsCrouch(pSold, TRUE);
|
||||||
|
sPoints = sPoints + sExtraCostSwat;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CRAWLING:
|
||||||
|
|
||||||
|
// Can't do it here.....
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (sTileCost > 0)
|
||||||
// so, then we must modify it for other movement styles and accumulate
|
|
||||||
// CHRISL: Force display path to calculate AP cost differently if we're wearing a backpack
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// SANDRO - This part have been modified "a bit" (see also "TerrainActionPoints" in "points.cpp")
|
|
||||||
// Check movement modifiers
|
|
||||||
switch( usMovementModeToUseForAPs )
|
|
||||||
{
|
{
|
||||||
case RUNNING:
|
// else, movement is adjusted based on mode...
|
||||||
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_RUN];
|
|
||||||
break;
|
if (sSwitchValue == TRAVELCOST_NOT_STANDING)
|
||||||
case WALKING:
|
{
|
||||||
if ( 0 && !(pSold->MercInWater()) && ( (gAnimControl[ pSold->usAnimState ].uiFlags & ANIM_FIREREADY ) || (gAnimControl[ pSold->usAnimState ].uiFlags & ANIM_FIRE ) ))
|
switch( usMovementModeToUseForAPs )
|
||||||
{
|
{
|
||||||
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_WALK] + APBPConstants[AP_MODIFIER_READY];
|
case RUNNING:
|
||||||
|
case WALKING :
|
||||||
|
case WALKING_WEAPON_RDY:
|
||||||
|
case WALKING_DUAL_RDY:
|
||||||
|
case WALKING_ALTERNATIVE_RDY :
|
||||||
|
// charge crouch APs for ducking head!
|
||||||
|
sExtraCostStand += GetAPsCrouch(pSold, TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// so, then we must modify it for other movement styles and accumulate
|
||||||
|
// CHRISL: Force display path to calculate AP cost differently if we're wearing a backpack
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// SANDRO - This part have been modified "a bit" (see also "TerrainActionPoints" in "points.cpp")
|
||||||
|
// Check movement modifiers
|
||||||
|
switch( usMovementModeToUseForAPs )
|
||||||
|
{
|
||||||
|
case RUNNING:
|
||||||
|
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_RUN];
|
||||||
|
break;
|
||||||
|
case WALKING:
|
||||||
|
if ( 0 && !(pSold->MercInWater()) && ( (gAnimControl[ pSold->usAnimState ].uiFlags & ANIM_FIREREADY ) || (gAnimControl[ pSold->usAnimState ].uiFlags & ANIM_FIRE ) ))
|
||||||
|
{
|
||||||
|
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_WALK] + APBPConstants[AP_MODIFIER_READY];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_WALK];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WALKING_ALTERNATIVE_RDY :
|
||||||
|
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_WALK];
|
||||||
|
break;
|
||||||
|
case WALKING_WEAPON_RDY:
|
||||||
|
case WALKING_DUAL_RDY:
|
||||||
|
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_WALK] + APBPConstants[AP_MODIFIER_READY];
|
||||||
|
break;
|
||||||
|
case SWATTING:
|
||||||
|
case SIDE_STEP_CROUCH_RIFLE:
|
||||||
|
case SIDE_STEP_CROUCH_PISTOL:
|
||||||
|
case SIDE_STEP_CROUCH_DUAL:
|
||||||
|
case CROUCHEDMOVE_RIFLE_READY:
|
||||||
|
case CROUCHEDMOVE_PISTOL_READY:
|
||||||
|
case CROUCHEDMOVE_DUAL_READY:
|
||||||
|
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_SWAT];
|
||||||
|
break;
|
||||||
|
case CRAWLING:
|
||||||
|
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_CRAWL];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sMovementAPsCost = sTileCost;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for reverse mode
|
||||||
|
if ( pSold->bReverse || bReverse )
|
||||||
|
sMovementAPsCost += APBPConstants[AP_REVERSE_MODIFIER];
|
||||||
|
|
||||||
|
// STOMP traits - Athletics trait decreases movement cost
|
||||||
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSold, ATHLETICS_NT ))
|
||||||
|
{
|
||||||
|
sMovementAPsCost = max(1, (sMovementAPsCost * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100.0f) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Moa: scuba fins and swimming background
|
||||||
|
if ( pSold->inv[LEGPOS].exists() && HasItemFlag( pSold->inv[LEGPOS].usItem, SCUBA_FINS ) )
|
||||||
|
{
|
||||||
|
if ( TERRAIN_IS_HIGH_WATER( ubTerrainID) )
|
||||||
|
sMovementAPsCost /= 2;
|
||||||
|
else
|
||||||
|
sMovementAPsCost *= 2;
|
||||||
|
}
|
||||||
|
if ( TERRAIN_IS_HIGH_WATER( ubTerrainID) )
|
||||||
|
sMovementAPsCost = sMovementAPsCost * (100 + pSold->GetBackgroundValue(BG_SWIMMING)) / 100.0f;
|
||||||
|
|
||||||
|
// Check if doors if not player's merc (they have to open them manually)
|
||||||
|
if ( sSwitchValue == TRAVELCOST_DOOR && pSold->bTeam != gbPlayerNum )
|
||||||
|
{
|
||||||
|
sMovementAPsCost += GetAPsToOpenDoor( pSold ) + GetAPsToOpenDoor( pSold ); // Include open and close costs!
|
||||||
|
}
|
||||||
|
// Check for stealth mode
|
||||||
|
if ( pSold->bStealthMode || bStealth )
|
||||||
|
{
|
||||||
|
// STOMP traits - Stealthy trait decreases stealth AP modifier
|
||||||
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSold, STEALTHY_NT ))
|
||||||
|
{
|
||||||
|
sMovementAPsCost += max(0, (APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100.0f) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_WALK];
|
sMovementAPsCost += APBPConstants[AP_STEALTH_MODIFIER];
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case WALKING_ALTERNATIVE_RDY :
|
|
||||||
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_WALK];
|
|
||||||
break;
|
|
||||||
case WALKING_WEAPON_RDY:
|
|
||||||
case WALKING_DUAL_RDY:
|
|
||||||
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_WALK] + APBPConstants[AP_MODIFIER_READY];
|
|
||||||
break;
|
|
||||||
case SWATTING:
|
|
||||||
case SIDE_STEP_CROUCH_RIFLE:
|
|
||||||
case SIDE_STEP_CROUCH_PISTOL:
|
|
||||||
case SIDE_STEP_CROUCH_DUAL:
|
|
||||||
case CROUCHEDMOVE_RIFLE_READY:
|
|
||||||
case CROUCHEDMOVE_PISTOL_READY:
|
|
||||||
case CROUCHEDMOVE_DUAL_READY:
|
|
||||||
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_SWAT];
|
|
||||||
break;
|
|
||||||
case CRAWLING:
|
|
||||||
sMovementAPsCost = sTileCost + APBPConstants[AP_MODIFIER_CRAWL];
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sMovementAPsCost = sTileCost;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for reverse mode
|
|
||||||
if ( pSold->bReverse || bReverse )
|
|
||||||
sMovementAPsCost += APBPConstants[AP_REVERSE_MODIFIER];
|
|
||||||
|
|
||||||
// STOMP traits - Athletics trait decreases movement cost
|
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSold, ATHLETICS_NT ))
|
|
||||||
{
|
|
||||||
sMovementAPsCost = max(1, (INT16)((sMovementAPsCost * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100) + 0.5));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Moa: scuba fins and swimming background
|
|
||||||
if ( pSold->inv[LEGPOS].exists() && HasItemFlag( pSold->inv[LEGPOS].usItem, SCUBA_FINS ) )
|
|
||||||
{
|
|
||||||
if ( TERRAIN_IS_HIGH_WATER( ubTerrainID) )
|
|
||||||
sMovementAPsCost /= 2;
|
|
||||||
else
|
|
||||||
sMovementAPsCost *= 2;
|
|
||||||
}
|
|
||||||
if ( TERRAIN_IS_HIGH_WATER( ubTerrainID) )
|
|
||||||
sMovementAPsCost = (sMovementAPsCost * (100 + pSold->GetBackgroundValue(BG_SWIMMING))) / 100;
|
|
||||||
|
|
||||||
// Check if doors if not player's merc (they have to open them manually)
|
|
||||||
if ( sSwitchValue == TRAVELCOST_DOOR && pSold->bTeam != gbPlayerNum )
|
|
||||||
{
|
|
||||||
sMovementAPsCost += GetAPsToOpenDoor( pSold ) + GetAPsToOpenDoor( pSold ); // Include open and close costs!
|
|
||||||
}
|
|
||||||
// Check for stealth mode
|
|
||||||
if ( pSold->bStealthMode || bStealth )
|
|
||||||
{
|
|
||||||
// STOMP traits - Stealthy trait decreases stealth AP modifier
|
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSold, STEALTHY_NT ))
|
|
||||||
{
|
|
||||||
sMovementAPsCost += (max(0, (INT16)((APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100) + 0.5)));
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
// Flugente: riot shields lower movement speed
|
||||||
|
if ( pSold->IsRiotShieldEquipped( ) )
|
||||||
{
|
{
|
||||||
sMovementAPsCost += APBPConstants[AP_STEALTH_MODIFIER];
|
sMovementAPsCost *= gItemSettings.fShieldMovementAPCostModifier;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Flugente: riot shields lower movement speed
|
|
||||||
if ( pSold->IsRiotShieldEquipped( ) )
|
|
||||||
{
|
|
||||||
sMovementAPsCost *= gItemSettings.fShieldMovementAPCostModifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flugente: dragging someone
|
// Flugente: dragging someone
|
||||||
if ( pSold->IsDraggingSomeone( ) )
|
if ( pSold->IsDraggingSomeone( ) )
|
||||||
{
|
|
||||||
sMovementAPsCost *= gItemSettings.fDragAPCostModifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for backpack
|
|
||||||
//if((UsingNewInventorySystem() == true) && FindBackpackOnSoldier( pSold ) != ITEM_NOT_FOUND )
|
|
||||||
// sMovementAPsCost += APBPConstants[AP_MODIFIER_PACK];
|
|
||||||
if ( UsingNewInventorySystem() == true && gGameExternalOptions.fBackPackWeightLowersAP )
|
|
||||||
{
|
|
||||||
INT8 bSlot= FindBackpackOnSoldier( pSold );
|
|
||||||
if ( bSlot != ITEM_NOT_FOUND )
|
|
||||||
{
|
{
|
||||||
UINT16 usBPPenalty = APBPConstants[AP_MODIFIER_PACK];
|
sMovementAPsCost *= gItemSettings.fDragAPCostModifier;
|
||||||
if ( bSlot == BPACKPOCKPOS ) //Backpack caried on back
|
}
|
||||||
|
|
||||||
|
// Check for backpack
|
||||||
|
//if((UsingNewInventorySystem() == true) && FindBackpackOnSoldier( pSold ) != ITEM_NOT_FOUND )
|
||||||
|
// sMovementAPsCost += APBPConstants[AP_MODIFIER_PACK];
|
||||||
|
if ( UsingNewInventorySystem() == true && gGameExternalOptions.fBackPackWeightLowersAP )
|
||||||
|
{
|
||||||
|
INT8 bSlot= FindBackpackOnSoldier( pSold );
|
||||||
|
if ( bSlot != ITEM_NOT_FOUND )
|
||||||
{
|
{
|
||||||
OBJECTTYPE * pObj = &( pSold->inv[ BPACKPOCKPOS ] );
|
UINT16 usBPPenalty = APBPConstants[AP_MODIFIER_PACK];
|
||||||
UINT16 usBackPackWeight = CalculateObjectWeight( pObj );
|
if ( bSlot == BPACKPOCKPOS ) //Backpack caried on back
|
||||||
// CalculateObjectWeight checks for active LBE gear. Unfortunatly our backpack is not active since we are carying it.
|
|
||||||
// Sounds not intuitive at all, active means the LBE caries items (marked with blue *), but when put on the LBE adittional slots of our soldier
|
|
||||||
// are activated where something can be carried. So we have to add the weights of those slots as well.
|
|
||||||
std::vector<INT8> vbLBESlots;
|
|
||||||
GetLBESlots( BPACKPOCKPOS, vbLBESlots );
|
|
||||||
for ( UINT8 i = 0; i < vbLBESlots.size() ; i++ )
|
|
||||||
{
|
{
|
||||||
pObj = &( pSold->inv[ vbLBESlots[ i ] ] );
|
OBJECTTYPE * pObj = &( pSold->inv[ BPACKPOCKPOS ] );
|
||||||
usBackPackWeight += CalculateObjectWeight( pObj );
|
UINT16 usBackPackWeight = CalculateObjectWeight( pObj );
|
||||||
|
// CalculateObjectWeight checks for active LBE gear. Unfortunatly our backpack is not active since we are carying it.
|
||||||
|
// Sounds not intuitive at all, active means the LBE caries items (marked with blue *), but when put on the LBE adittional slots of our soldier
|
||||||
|
// are activated where something can be carried. So we have to add the weights of those slots as well.
|
||||||
|
std::vector<INT8> vbLBESlots;
|
||||||
|
GetLBESlots( BPACKPOCKPOS, vbLBESlots );
|
||||||
|
for ( UINT8 i = 0; i < vbLBESlots.size() ; i++ )
|
||||||
|
{
|
||||||
|
pObj = &( pSold->inv[ vbLBESlots[ i ] ] );
|
||||||
|
usBackPackWeight += CalculateObjectWeight( pObj );
|
||||||
|
}
|
||||||
|
usBPPenalty = min( ( usBackPackWeight / 50 ), usBPPenalty ); //1 AP penalty for each 5kg of weight up to the penalty defined by AP_MODIFIER_PACK (default = 4)
|
||||||
}
|
}
|
||||||
usBPPenalty = min( ( usBackPackWeight / 50 ), usBPPenalty ); //1 AP penalty for each 5kg of weight up to the penalty defined by AP_MODIFIER_PACK (default = 4)
|
else //Backpack caried not on back (maybe somewhere inside another LBE or in Hand?)
|
||||||
|
{
|
||||||
|
//apply full penalty
|
||||||
|
}
|
||||||
|
sMovementAPsCost += usBPPenalty;
|
||||||
}
|
}
|
||||||
else //Backpack caried not on back (maybe somewhere inside another LBE or in Hand?)
|
|
||||||
{
|
|
||||||
//apply full penalty
|
|
||||||
}
|
|
||||||
sMovementAPsCost += usBPPenalty;
|
|
||||||
}
|
}
|
||||||
}
|
// moving diagonally
|
||||||
|
if (guiPathingData[iCnt] & 1)
|
||||||
|
sMovementAPsCost *= 1.4f;
|
||||||
|
|
||||||
sPoints += sMovementAPsCost + sExtraCostStand;
|
sPoints += (INT16)(sMovementAPsCost + 0.5f) + sExtraCostStand;
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// THIS NEXT SECTION ONLY NEEDS TO HAPPEN FOR CURSOR UI FEEDBACK, NOT ACTUAL COSTING
|
// THIS NEXT SECTION ONLY NEEDS TO HAPPEN FOR CURSOR UI FEEDBACK, NOT ACTUAL COSTING
|
||||||
|
|
||||||
@@ -4812,10 +4810,10 @@ INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPl
|
|||||||
// STOMP traits - Athletics trait decreases movement cost
|
// STOMP traits - Athletics trait decreases movement cost
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSold, ATHLETICS_NT ))
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSold, ATHLETICS_NT ))
|
||||||
{
|
{
|
||||||
sPointsWalk += max(1, (INT16)(((sMovementAPsCost + APBPConstants[AP_MODIFIER_WALK]) * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100) + 0.5));
|
sPointsWalk += max(1, (INT16)((sMovementAPsCost + APBPConstants[AP_MODIFIER_WALK]) * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100.0f + 0.5f));
|
||||||
sPointsCrawl += max(1, (INT16)(((sMovementAPsCost + APBPConstants[AP_MODIFIER_CRAWL]) * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100) + 0.5));
|
sPointsCrawl += max(1, (INT16)((sMovementAPsCost + APBPConstants[AP_MODIFIER_CRAWL]) * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100.0f + 0.5f));
|
||||||
sPointsSwat += max(1, (INT16)(((sMovementAPsCost + APBPConstants[AP_MODIFIER_SWAT]) * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100) + 0.5));
|
sPointsSwat += max(1, (INT16)((sMovementAPsCost + APBPConstants[AP_MODIFIER_SWAT]) * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100.0f + 0.5f));
|
||||||
sPointsRun += max(1, (INT16)(((sMovementAPsCost + APBPConstants[AP_MODIFIER_RUN]) * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100) + 0.5));
|
sPointsRun += max(1, (INT16)((sMovementAPsCost + APBPConstants[AP_MODIFIER_RUN]) * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100.0f + 0.5f));
|
||||||
}
|
}
|
||||||
// Specify movement modes
|
// Specify movement modes
|
||||||
else
|
else
|
||||||
@@ -4862,10 +4860,10 @@ INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPl
|
|||||||
// STOMP traits - Stealthy trait decreases stealth AP modifier
|
// STOMP traits - Stealthy trait decreases stealth AP modifier
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSold, STEALTHY_NT ))
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSold, STEALTHY_NT ))
|
||||||
{
|
{
|
||||||
sPointsWalk += (max(0, (INT16)((APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100) + 0.5)));
|
sPointsWalk += (max(0, (INT16)(APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100.0f + 0.5f)));
|
||||||
sPointsCrawl += (max(0, (INT16)((APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100) + 0.5)));
|
sPointsCrawl += (max(0, (INT16)(APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100.0f + 0.5f)));
|
||||||
sPointsSwat += (max(0, (INT16)((APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100) + 0.5)));
|
sPointsSwat += (max(0, (INT16)(APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100.0f + 0.5f)));
|
||||||
sPointsRun += (max(0, (INT16)((APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100) + 0.5)));
|
sPointsRun += (max(0, (INT16)(APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100.0f + 0.5f)));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
+63
-54
@@ -200,11 +200,13 @@ INT16 TerrainActionPoints( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, INT8
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SANDRO - note: as it is, the modifiers for walking/running/etc are not multiplied for diagonal movement, but is it intentional?
|
// silversurfer: don't multiply here or the following bonus/penalty calculations will all be wrong and cause our mercs to spend too many APs
|
||||||
|
// direction is now taken into account in function "ActionPointCost"
|
||||||
|
/* // SANDRO - note: as it is, the modifiers for walking/running/etc are not multiplied for diagonal movement, but is it intentional?
|
||||||
if (bDir & 1)
|
if (bDir & 1)
|
||||||
{
|
{
|
||||||
sAPCost = (sAPCost * 14) / 10;
|
sAPCost = (sAPCost * 14) / 10;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
return(sAPCost);
|
return(sAPCost);
|
||||||
|
|
||||||
@@ -249,7 +251,7 @@ INT16 BreathPointAdjustmentForCarriedWeight( SOLDIERTYPE * pSoldier )
|
|||||||
|
|
||||||
INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode)
|
INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode)
|
||||||
{
|
{
|
||||||
INT32 iPoints=0;
|
FLOAT iPoints = 0;
|
||||||
UINT8 ubMovementCost;
|
UINT8 ubMovementCost;
|
||||||
|
|
||||||
ubMovementCost = gubWorldMovementCosts[sGridNo][bDir][0];
|
ubMovementCost = gubWorldMovementCosts[sGridNo][bDir][0];
|
||||||
@@ -262,7 +264,7 @@ INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bDir, UINT
|
|||||||
{
|
{
|
||||||
ubTerrainID = FLAT_GROUND;
|
ubTerrainID = FLAT_GROUND;
|
||||||
|
|
||||||
// WANNE.WATER.BUGFIX: If we "walk on water", take the travecost_flat BPs instead of the high swimming BPs ...
|
// WANNE.WATER.BUGFIX: If we "walk on water", take the travelcost_flat BPs instead of the high swimming BPs ...
|
||||||
ubMovementCost = TRAVELCOST_FLAT;
|
ubMovementCost = TRAVELCOST_FLAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -303,7 +305,7 @@ INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bDir, UINT
|
|||||||
iPoints += APBPConstants[BP_MOVEMENT_READY];
|
iPoints += APBPConstants[BP_MOVEMENT_READY];
|
||||||
}
|
}
|
||||||
|
|
||||||
iPoints = iPoints * BreathPointAdjustmentForCarriedWeight( pSoldier ) / 100;
|
iPoints = iPoints * BreathPointAdjustmentForCarriedWeight( pSoldier ) / 100.0f;
|
||||||
|
|
||||||
// ATE - MAKE MOVEMENT ALWAYS WALK IF IN WATER
|
// ATE - MAKE MOVEMENT ALWAYS WALK IF IN WATER
|
||||||
if ( TERRAIN_IS_WATER( ubTerrainID) )
|
if ( TERRAIN_IS_WATER( ubTerrainID) )
|
||||||
@@ -350,7 +352,7 @@ INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bDir, UINT
|
|||||||
// SANDRO - STOMP traits - Athletics reduce breath points spent for moving
|
// SANDRO - STOMP traits - Athletics reduce breath points spent for moving
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, ATHLETICS_NT ))
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, ATHLETICS_NT ))
|
||||||
{
|
{
|
||||||
iPoints = max(1, (INT16)((iPoints * (100 - gSkillTraitValues.ubATBPsMovementReduction) / 100) + 0.5));
|
iPoints = max(1, (iPoints * (100 - gSkillTraitValues.ubATBPsMovementReduction) / 100.0f) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flugente: scuba fins reduce movement cost in water, but increase cost on land
|
// Flugente: scuba fins reduce movement cost in water, but increase cost on land
|
||||||
@@ -368,7 +370,7 @@ INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bDir, UINT
|
|||||||
|
|
||||||
// Flugente: backgrounds
|
// Flugente: backgrounds
|
||||||
if ( TERRAIN_IS_HIGH_WATER( ubTerrainID) )
|
if ( TERRAIN_IS_HIGH_WATER( ubTerrainID) )
|
||||||
iPoints = (iPoints * (100 + pSoldier->GetBackgroundValue(BG_SWIMMING))) / 100;
|
iPoints = iPoints * ( 100 + pSoldier->GetBackgroundValue(BG_SWIMMING) ) / 100.0f;
|
||||||
|
|
||||||
// ATE: Adjust these by realtime movement
|
// ATE: Adjust these by realtime movement
|
||||||
if (!(gTacticalStatus.uiFlags & TURNBASED) || !(gTacticalStatus.uiFlags & INCOMBAT ) )
|
if (!(gTacticalStatus.uiFlags & TURNBASED) || !(gTacticalStatus.uiFlags & INCOMBAT ) )
|
||||||
@@ -376,18 +378,21 @@ INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bDir, UINT
|
|||||||
// ATE: ADJUST FOR RT - MAKE BREATH GO A LITTLE FASTER!
|
// ATE: ADJUST FOR RT - MAKE BREATH GO A LITTLE FASTER!
|
||||||
// silversurfer: now externalized to APBPConstants.ini
|
// silversurfer: now externalized to APBPConstants.ini
|
||||||
//iPoints = (INT32)( iPoints * TB_BREATH_DEDUCT_MODIFIER );
|
//iPoints = (INT32)( iPoints * TB_BREATH_DEDUCT_MODIFIER );
|
||||||
iPoints = (INT32)( iPoints * APBPConstants[BP_RT_BREATH_DEDUCT_MODIFIER] / 100 );
|
iPoints = iPoints * APBPConstants[BP_RT_BREATH_DEDUCT_MODIFIER] / 100.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
return( (INT16) iPoints);
|
// moving diagonally
|
||||||
|
if (bDir & 1)
|
||||||
|
iPoints *= 1.4f;
|
||||||
|
|
||||||
|
return( (INT16)iPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode )
|
INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode )
|
||||||
{
|
{
|
||||||
INT16 sTileCost, sPoints, sSwitchValue;
|
INT16 sTileCost, sSwitchValue;
|
||||||
|
FLOAT sPoints = 0;
|
||||||
sPoints = 0;
|
|
||||||
|
|
||||||
// get the tile cost for that tile based on WALKING
|
// get the tile cost for that tile based on WALKING
|
||||||
sTileCost = TerrainActionPoints( pSoldier, sGridNo, bDir, pSoldier->pathing.bLevel );
|
sTileCost = TerrainActionPoints( pSoldier, sGridNo, bDir, pSoldier->pathing.bLevel );
|
||||||
@@ -487,7 +492,7 @@ INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 u
|
|||||||
// STOMP traits - Athletics trait decreases movement cost
|
// STOMP traits - Athletics trait decreases movement cost
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, ATHLETICS_NT ))
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, ATHLETICS_NT ))
|
||||||
{
|
{
|
||||||
sPoints = max(1, (INT16)((sPoints * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100) + 0.5));
|
sPoints = max(1.0f, ( sPoints * (100 - (FLOAT)gSkillTraitValues.ubATAPsMovementReduction) / 100.0f ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flugente: riot shields lower movement speed
|
// Flugente: riot shields lower movement speed
|
||||||
@@ -513,7 +518,7 @@ INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 u
|
|||||||
|
|
||||||
// Flugente: swimming background
|
// Flugente: swimming background
|
||||||
if ( TERRAIN_IS_HIGH_WATER( ubTerrainID) )
|
if ( TERRAIN_IS_HIGH_WATER( ubTerrainID) )
|
||||||
sPoints = (sPoints * (100 + pSoldier->GetBackgroundValue(BG_SWIMMING))) / 100;
|
sPoints = sPoints * ( 100 + pSoldier->GetBackgroundValue(BG_SWIMMING) ) / 100.0f;
|
||||||
|
|
||||||
// Check if doors if not player's merc (they have to open them manually)
|
// Check if doors if not player's merc (they have to open them manually)
|
||||||
if ( sSwitchValue == TRAVELCOST_DOOR && pSoldier->bTeam != gbPlayerNum )
|
if ( sSwitchValue == TRAVELCOST_DOOR && pSoldier->bTeam != gbPlayerNum )
|
||||||
@@ -526,7 +531,7 @@ INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 u
|
|||||||
// STOMP traits - Stealthy trait decreases stealth AP modifier
|
// STOMP traits - Stealthy trait decreases stealth AP modifier
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, STEALTHY_NT ))
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, STEALTHY_NT ))
|
||||||
{
|
{
|
||||||
sPoints += (max(0, (INT16)((APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100) + 0.5)));
|
sPoints += max(0, (FLOAT)( APBPConstants[AP_STEALTH_MODIFIER] * (100 - gSkillTraitValues.ubSTStealthModeSpeedBonus) / 100.0f) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -592,7 +597,11 @@ INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 u
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return( sPoints );
|
// moving diagonally
|
||||||
|
if (bDir & 1)
|
||||||
|
sPoints *= 1.4f;
|
||||||
|
|
||||||
|
return( (INT16)(sPoints + 0.5f) );
|
||||||
}
|
}
|
||||||
|
|
||||||
INT16 EstimateActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode, INT8 bPathIndex, INT8 bPathLength )
|
INT16 EstimateActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode, INT8 bPathIndex, INT8 bPathLength )
|
||||||
@@ -1152,7 +1161,7 @@ void DeductPoints( SOLDIERTYPE *pSoldier, INT16 sAPCost, INT32 iBPCost, UINT8 ub
|
|||||||
else
|
else
|
||||||
ubPointsRegistered = max( 10, min( 100, ubPointsRegistered ) ); // 10% is minimum on hearing
|
ubPointsRegistered = max( 10, min( 100, ubPointsRegistered ) ); // 10% is minimum on hearing
|
||||||
ubPointsRegistered = min( 100, ubPointsRegistered ); // 100% is maximum ofc
|
ubPointsRegistered = min( 100, ubPointsRegistered ); // 100% is maximum ofc
|
||||||
ubPointsRegistered = (UINT8)((sAPCost * ubPointsRegistered / 100) + 0.5); // now calc how many APs we will award
|
ubPointsRegistered = (UINT8)(sAPCost * ubPointsRegistered / 100.0f + 0.5f); // now calc how many APs we will award
|
||||||
|
|
||||||
// increase the counter
|
// increase the counter
|
||||||
if ( ubPointsRegistered )
|
if ( ubPointsRegistered )
|
||||||
@@ -2388,7 +2397,7 @@ INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 bAimTime,
|
|||||||
if ( HAS_SKILL_TRAIT( pSoldier, HEAVY_WEAPONS_NT ) && gGameOptions.fNewTraitSystem )
|
if ( HAS_SKILL_TRAIT( pSoldier, HEAVY_WEAPONS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
{
|
{
|
||||||
// bAPCost = (INT16)((bAPCost * (100 - gSkillTraitValues.ubHWGrenadeLaunchersAPsReduction * NUM_SKILL_TRAITS( pSoldier, HEAVY_WEAPONS_NT ) ) / 100)+ 0.5);
|
// bAPCost = (INT16)((bAPCost * (100 - gSkillTraitValues.ubHWGrenadeLaunchersAPsReduction * NUM_SKILL_TRAITS( pSoldier, HEAVY_WEAPONS_NT ) ) / 100)+ 0.5);
|
||||||
bAPCost = (INT16)(bAPCost * GetAttackAPTraitMultiplier( pSoldier, pObjUsed, pSoldier->bWeaponMode ) + 0.5);
|
bAPCost = (INT16)(bAPCost * GetAttackAPTraitMultiplier( pSoldier, pObjUsed, pSoldier->bWeaponMode ) + 0.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( pSoldier->IsValidSecondHandShot( ) )
|
else if ( pSoldier->IsValidSecondHandShot( ) )
|
||||||
@@ -2398,8 +2407,8 @@ INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 bAimTime,
|
|||||||
// SANDRO - gunslinger check for firing speed
|
// SANDRO - gunslinger check for firing speed
|
||||||
// if ( HAS_SKILL_TRAIT( pSoldier, GUNSLINGER_NT ) && gGameOptions.fNewTraitSystem )
|
// if ( HAS_SKILL_TRAIT( pSoldier, GUNSLINGER_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
// {
|
// {
|
||||||
INT16 bcst1 = (INT16)(BaseAPsToShootOrStab( bFullAPs, bAimSkill, &(pSoldier->inv[HANDPOS]), pSoldier ) * GetAttackAPTraitMultiplier( pSoldier, pObjUsed, pSoldier->bWeaponMode ) + 0.5);
|
INT16 bcst1 = (INT16)(BaseAPsToShootOrStab( bFullAPs, bAimSkill, &(pSoldier->inv[HANDPOS]), pSoldier ) * GetAttackAPTraitMultiplier( pSoldier, pObjUsed, pSoldier->bWeaponMode ) + 0.5f);
|
||||||
INT16 bcst2 = (INT16)(BaseAPsToShootOrStab( bFullAPs, bAimSkill, &(pSoldier->inv[SECONDHANDPOS]), pSoldier ) * GetAttackAPTraitMultiplier( pSoldier, pSecondObjUsed, pSoldier->bWeaponMode ) + 0.5);
|
INT16 bcst2 = (INT16)(BaseAPsToShootOrStab( bFullAPs, bAimSkill, &(pSoldier->inv[SECONDHANDPOS]), pSoldier ) * GetAttackAPTraitMultiplier( pSoldier, pSecondObjUsed, pSoldier->bWeaponMode ) + 0.5f);
|
||||||
// if ( Weapon[ usItem ].ubWeaponType == GUN_PISTOL )
|
// if ( Weapon[ usItem ].ubWeaponType == GUN_PISTOL )
|
||||||
// bcst1 = (INT16)((bcst1 * ( 100 - gSkillTraitValues.ubGSFiringSpeedBonusPistols) / 100)+ 0.5);
|
// bcst1 = (INT16)((bcst1 * ( 100 - gSkillTraitValues.ubGSFiringSpeedBonusPistols) / 100)+ 0.5);
|
||||||
// if ( Weapon[ pSoldier->inv[SECONDHANDPOS].usItem ].ubWeaponType == GUN_PISTOL )
|
// if ( Weapon[ pSoldier->inv[SECONDHANDPOS].usItem ].ubWeaponType == GUN_PISTOL )
|
||||||
@@ -2429,7 +2438,7 @@ INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 bAimTime,
|
|||||||
// If we are using alternative weapon holding (from hip rifle/one-handed pistol), the shot can be faster if set in the ini
|
// If we are using alternative weapon holding (from hip rifle/one-handed pistol), the shot can be faster if set in the ini
|
||||||
if ( gGameExternalOptions.ubAltWeaponHoldingFireSpeedBonus > 0 && pSoldier->IsValidAlternativeFireMode( bAimTime, sGridNo ))
|
if ( gGameExternalOptions.ubAltWeaponHoldingFireSpeedBonus > 0 && pSoldier->IsValidAlternativeFireMode( bAimTime, sGridNo ))
|
||||||
{
|
{
|
||||||
bAPCost = (INT16)((bAPCost * (100 - gGameExternalOptions.ubAltWeaponHoldingFireSpeedBonus ) / 100)+ 0.5);
|
bAPCost = (INT16)(bAPCost * (100 - gGameExternalOptions.ubAltWeaponHoldingFireSpeedBonus ) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
// SANDRO - STOMP traits
|
// SANDRO - STOMP traits
|
||||||
@@ -2437,7 +2446,7 @@ INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 bAimTime,
|
|||||||
if ( gGameOptions.fNewTraitSystem )
|
if ( gGameOptions.fNewTraitSystem )
|
||||||
{
|
{
|
||||||
// silversurfer: new function to handle all modifiers
|
// silversurfer: new function to handle all modifiers
|
||||||
bAPCost = (INT16)(bAPCost * GetAttackAPTraitMultiplier( pSoldier, pObjUsed, pSoldier->bWeaponMode ) + 0.5);
|
bAPCost = (INT16)(bAPCost * GetAttackAPTraitMultiplier( pSoldier, pObjUsed, pSoldier->bWeaponMode ) + 0.5f);
|
||||||
|
|
||||||
/* // Decreased APs needed for LMG - Auto Weapons
|
/* // Decreased APs needed for LMG - Auto Weapons
|
||||||
if (Weapon[usUBItem].ubWeaponType == GUN_LMG && (pSoldier->bDoBurst || pSoldier->bDoAutofire) && ( HAS_SKILL_TRAIT( pSoldier, AUTO_WEAPONS_NT ) ) )
|
if (Weapon[usUBItem].ubWeaponType == GUN_LMG && (pSoldier->bDoBurst || pSoldier->bDoAutofire) && ( HAS_SKILL_TRAIT( pSoldier, AUTO_WEAPONS_NT ) ) )
|
||||||
@@ -2614,7 +2623,7 @@ INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost
|
|||||||
bAPCost += BaseAPsToShootOrStab(bFullAPs, bAimSkill, pObjUsed, pSoldier);
|
bAPCost += BaseAPsToShootOrStab(bFullAPs, bAimSkill, pObjUsed, pSoldier);
|
||||||
// Decreased APs needed for melee attacks - Melee (Blade only)
|
// Decreased APs needed for melee attacks - Melee (Blade only)
|
||||||
if(Item[usItem].usItemClass == IC_BLADE && (HAS_SKILL_TRAIT(pSoldier, MELEE_NT)))
|
if(Item[usItem].usItemClass == IC_BLADE && (HAS_SKILL_TRAIT(pSoldier, MELEE_NT)))
|
||||||
bAPCost = (INT16)((bAPCost * (100 - gSkillTraitValues.ubMEBladesAPsReduction) / 100) + 0.5);
|
bAPCost = (INT16)(bAPCost * (100 - gSkillTraitValues.ubMEBladesAPsReduction) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
// sevenfm: check enemy only if we have correct gridNo
|
// sevenfm: check enemy only if we have correct gridNo
|
||||||
if( !TileIsOutOfBounds(sGridNo) )
|
if( !TileIsOutOfBounds(sGridNo) )
|
||||||
@@ -2668,7 +2677,7 @@ INT16 ApsToPunch( SOLDIERTYPE *pSoldier )
|
|||||||
{
|
{
|
||||||
if (gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ))
|
if (gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ))
|
||||||
{
|
{
|
||||||
return ( max( 1, (INT16)((APBPConstants[AP_PUNCH] * (100 - gSkillTraitValues.ubMAPunchAPsReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT ))/ 100) + 0.5)) );
|
return ( max( 1, (INT16)(APBPConstants[AP_PUNCH] * (100 - gSkillTraitValues.ubMAPunchAPsReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f)) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -3046,10 +3055,10 @@ INT16 GetAPsToReloadGunWithAmmo( SOLDIERTYPE *pSoldier, OBJECTTYPE * pGun, OBJEC
|
|||||||
{
|
{
|
||||||
// if pistol or revolver
|
// if pistol or revolver
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, GUNSLINGER_NT ) && ( Weapon[ pGun->usItem ].ubWeaponType == GUN_PISTOL || Weapon[ pGun->usItem ].ubWeaponType == GUN_M_PISTOL ) )
|
if ( HAS_SKILL_TRAIT( pSoldier, GUNSLINGER_NT ) && ( Weapon[ pGun->usItem ].ubWeaponType == GUN_PISTOL || Weapon[ pGun->usItem ].ubWeaponType == GUN_M_PISTOL ) )
|
||||||
return(INT16)(( GetAPsToReload(pGun) * max(0,(100 - gSkillTraitValues.ubGSRealoadSpeedHandgunsBonus * NUM_SKILL_TRAITS( pSoldier, GUNSLINGER_NT ) - (HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) ? gSkillTraitValues.ubAMReloadSpeedMagazines : 0 )))/100 ) + 0.5);
|
return(INT16)( GetAPsToReload(pGun) * max(0,(100 - gSkillTraitValues.ubGSRealoadSpeedHandgunsBonus * NUM_SKILL_TRAITS( pSoldier, GUNSLINGER_NT ) - (HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) ? gSkillTraitValues.ubAMReloadSpeedMagazines : 0 ))) / 100.0f + 0.5f);
|
||||||
// other weapons for ambidextrous
|
// other weapons for ambidextrous
|
||||||
else if (HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ))
|
else if (HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ))
|
||||||
return(INT16)(( GetAPsToReload(pGun) * max(0,(100 - gSkillTraitValues.ubAMReloadSpeedMagazines ))/100) + 0.5);
|
return(INT16)( GetAPsToReload(pGun) * max(0,(100 - gSkillTraitValues.ubAMReloadSpeedMagazines )) / 100.0f + 0.5f );
|
||||||
// normal case
|
// normal case
|
||||||
else
|
else
|
||||||
return GetAPsToReload(pGun);
|
return GetAPsToReload(pGun);
|
||||||
@@ -3061,9 +3070,9 @@ INT16 GetAPsToReloadGunWithAmmo( SOLDIERTYPE *pSoldier, OBJECTTYPE * pGun, OBJEC
|
|||||||
{
|
{
|
||||||
// wrong size ammo item
|
// wrong size ammo item
|
||||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) ) // SANDRO - added Ambidextrous check
|
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) ) // SANDRO - added Ambidextrous check
|
||||||
return (INT16)((((GetAPsToReload(pGun) * APBPConstants[AP_WRONG_MAG])/10)*(100 - gSkillTraitValues.ubAMReloadSpeedLoose)/100) + 0.5);
|
return (INT16)((GetAPsToReload(pGun) * APBPConstants[AP_WRONG_MAG] / 10.0f) * (100 - gSkillTraitValues.ubAMReloadSpeedLoose) / 100.0f + 0.5f);
|
||||||
else
|
else
|
||||||
return (INT16)((GetAPsToReload(pGun) * APBPConstants[AP_WRONG_MAG])/10);
|
return (INT16)((GetAPsToReload(pGun) * APBPConstants[AP_WRONG_MAG] / 10.0f) + 0.5f);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -3156,10 +3165,10 @@ INT16 GetAPsToAutoReload( SOLDIERTYPE * pSoldier )
|
|||||||
{
|
{
|
||||||
// Sniper trait makes chambering a round faster
|
// Sniper trait makes chambering a round faster
|
||||||
if (( Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_SN_RIFLE || Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_RIFLE ) && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ))
|
if (( Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_SN_RIFLE || Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_RIFLE ) && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ))
|
||||||
return ( (INT16)(((sModifiedReloadAP * (100 - gSkillTraitValues.ubSNChamberRoundAPsReduction * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )))/100) + 0.5));
|
return ( (INT16)(sModifiedReloadAP * (100 - gSkillTraitValues.ubSNChamberRoundAPsReduction * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )) / 100.0f + 0.5f));
|
||||||
// Ranger trait makes pumping shotguns faster
|
// Ranger trait makes pumping shotguns faster
|
||||||
else if (( Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_SHOTGUN ) && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
|
else if (( Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_SHOTGUN ) && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
|
||||||
return ( (INT16)(((sModifiedReloadAP * (100 - gSkillTraitValues.ubRAPumpShotgunsAPsReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT )))/100) + 0.5));
|
return ( (INT16)(sModifiedReloadAP * (100 - gSkillTraitValues.ubRAPumpShotgunsAPsReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT )) / 100.0f + 0.5f));
|
||||||
else
|
else
|
||||||
return (sModifiedReloadAP);
|
return (sModifiedReloadAP);
|
||||||
}
|
}
|
||||||
@@ -3340,14 +3349,14 @@ INT16 GetAPsToLook( SOLDIERTYPE *pSoldier )
|
|||||||
// Now change to appropriate animation
|
// Now change to appropriate animation
|
||||||
case ANIM_STAND:
|
case ANIM_STAND:
|
||||||
if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_LOOK_STANDING] * (100 - gSkillTraitValues.ubMAApsTurnAroundReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5 )));
|
return( max( 1, (INT16)(APBPConstants[AP_LOOK_STANDING] * (100 - gSkillTraitValues.ubMAApsTurnAroundReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f ) ) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_LOOK_STANDING] );
|
return( APBPConstants[AP_LOOK_STANDING] );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ANIM_CROUCH:
|
case ANIM_CROUCH:
|
||||||
if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_LOOK_CROUCHED] * (100 - gSkillTraitValues.ubMAApsTurnAroundReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5 )));
|
return( max( 1, (INT16)(APBPConstants[AP_LOOK_CROUCHED] * (100 - gSkillTraitValues.ubMAApsTurnAroundReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f ) ) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_LOOK_CROUCHED] );
|
return( APBPConstants[AP_LOOK_CROUCHED] );
|
||||||
break;
|
break;
|
||||||
@@ -3357,7 +3366,7 @@ INT16 GetAPsToLook( SOLDIERTYPE *pSoldier )
|
|||||||
// crouched, turn, and then go back down. Hence you go up (APBPConstants[AP_PRONE]), turn (APBPConstants[AP_LOOK_PRONE]) and down (APBPConstants[AP_PRONE]).
|
// crouched, turn, and then go back down. Hence you go up (APBPConstants[AP_PRONE]), turn (APBPConstants[AP_LOOK_PRONE]) and down (APBPConstants[AP_PRONE]).
|
||||||
//dnl ch70 160913 because of backpack cost for going up is 2
|
//dnl ch70 160913 because of backpack cost for going up is 2
|
||||||
if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_LOOK_PRONE] * (100 - gSkillTraitValues.ubMAApsTurnAroundReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5)) + GetAPsProne(pSoldier, TRUE) + GetAPsProne(pSoldier, TRUE*2) );
|
return( max( 1, (INT16)(APBPConstants[AP_LOOK_PRONE] * (100 - gSkillTraitValues.ubMAApsTurnAroundReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f)) + GetAPsProne(pSoldier, TRUE) + GetAPsProne(pSoldier, TRUE*2) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_LOOK_PRONE] + GetAPsProne(pSoldier, TRUE) + GetAPsProne(pSoldier, TRUE*2) );
|
return( APBPConstants[AP_LOOK_PRONE] + GetAPsProne(pSoldier, TRUE) + GetAPsProne(pSoldier, TRUE*2) );
|
||||||
break;
|
break;
|
||||||
@@ -3549,7 +3558,7 @@ INT16 GetAPsToClimbRoof( SOLDIERTYPE *pSoldier, BOOLEAN fClimbDown )
|
|||||||
if ( !fClimbDown )
|
if ( !fClimbDown )
|
||||||
{
|
{
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
iAPsToClimb = max( 1, (INT16)((APBPConstants[AP_CLIMBROOF] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5)); // -25% per trait
|
iAPsToClimb = max( 1, (INT16)(APBPConstants[AP_CLIMBROOF] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f)); // -25% per trait
|
||||||
else
|
else
|
||||||
iAPsToClimb = APBPConstants[AP_CLIMBROOF];
|
iAPsToClimb = APBPConstants[AP_CLIMBROOF];
|
||||||
|
|
||||||
@@ -3559,7 +3568,7 @@ INT16 GetAPsToClimbRoof( SOLDIERTYPE *pSoldier, BOOLEAN fClimbDown )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
iAPsToClimb = max( 1, (INT16)((APBPConstants[AP_CLIMBOFFROOF] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5)); // -25% per trait
|
iAPsToClimb = max( 1, (INT16)(APBPConstants[AP_CLIMBOFFROOF] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f)); // -25% per trait
|
||||||
else
|
else
|
||||||
iAPsToClimb = APBPConstants[AP_CLIMBOFFROOF];
|
iAPsToClimb = APBPConstants[AP_CLIMBOFFROOF];
|
||||||
|
|
||||||
@@ -3583,7 +3592,7 @@ INT16 GetAPsToJumpWall( SOLDIERTYPE *pSoldier, BOOLEAN fClimbDown )
|
|||||||
if ( !fClimbDown )
|
if ( !fClimbDown )
|
||||||
{
|
{
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
iAPsToClimb = max( 1, (INT16)((APBPConstants[AP_JUMPWALL] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5)); // -25% per trait
|
iAPsToClimb = max( 1, (INT16)(APBPConstants[AP_JUMPWALL] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f)); // -25% per trait
|
||||||
else
|
else
|
||||||
iAPsToClimb = APBPConstants[AP_JUMPWALL];
|
iAPsToClimb = APBPConstants[AP_JUMPWALL];
|
||||||
|
|
||||||
@@ -3593,7 +3602,7 @@ INT16 GetAPsToJumpWall( SOLDIERTYPE *pSoldier, BOOLEAN fClimbDown )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
iAPsToClimb = max( 1, (INT16)((APBPConstants[AP_JUMPOFFWALL] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5)); // -25% per trait
|
iAPsToClimb = max( 1, (INT16)(APBPConstants[AP_JUMPOFFWALL] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f)); // -25% per trait
|
||||||
else
|
else
|
||||||
iAPsToClimb = APBPConstants[AP_JUMPOFFWALL];
|
iAPsToClimb = APBPConstants[AP_JUMPOFFWALL];
|
||||||
|
|
||||||
@@ -3615,7 +3624,7 @@ INT16 GetAPsToJumpThroughWindows( SOLDIERTYPE *pSoldier, BOOLEAN fWithBackpack )
|
|||||||
if ( !fWithBackpack )
|
if ( !fWithBackpack )
|
||||||
{
|
{
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ))
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ))
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_JUMPWINDOW] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5 ))); // -25% per trait
|
return( max( 1, (INT16)(APBPConstants[AP_JUMPWINDOW] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f ) ) ); // -25% per trait
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_JUMPWINDOW] );
|
return( APBPConstants[AP_JUMPWINDOW] );
|
||||||
|
|
||||||
@@ -3623,7 +3632,7 @@ INT16 GetAPsToJumpThroughWindows( SOLDIERTYPE *pSoldier, BOOLEAN fWithBackpack )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ))
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ))
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_JUMPWINDOW] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5 ))); // -25% per trait
|
return( max( 1, (INT16)(APBPConstants[AP_JUMPWINDOW] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f ) ) ); // -25% per trait
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_JUMPWINDOW] );
|
return( APBPConstants[AP_JUMPWINDOW] );
|
||||||
}
|
}
|
||||||
@@ -3657,7 +3666,7 @@ INT16 GetAPsToJumpFence( SOLDIERTYPE *pSoldier, BOOLEAN fWithBackpack )
|
|||||||
if ( !fWithBackpack )
|
if ( !fWithBackpack )
|
||||||
{
|
{
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ))
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ))
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_JUMPFENCE] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5 ))); // -25% per trait
|
return( max( 1, (INT16)(APBPConstants[AP_JUMPFENCE] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f ) ) ); // -25% per trait
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_JUMPFENCE] );
|
return( APBPConstants[AP_JUMPFENCE] );
|
||||||
|
|
||||||
@@ -3665,7 +3674,7 @@ INT16 GetAPsToJumpFence( SOLDIERTYPE *pSoldier, BOOLEAN fWithBackpack )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ))
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ))
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_JUMPFENCEBPACK] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5 ))); // -25% per trait
|
return( max( 1, (INT16)(APBPConstants[AP_JUMPFENCEBPACK] * ( 100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f ) ) ); // -25% per trait
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_JUMPFENCEBPACK] );
|
return( APBPConstants[AP_JUMPFENCEBPACK] );
|
||||||
}
|
}
|
||||||
@@ -3908,7 +3917,7 @@ INT16 GetAPsToDropBomb( SOLDIERTYPE *pSoldier )
|
|||||||
{
|
{
|
||||||
// SANDRO - STOMP traits - Ambidextrous bonus
|
// SANDRO - STOMP traits - Ambidextrous bonus
|
||||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_DROP_BOMB] * (100 - gSkillTraitValues.ubAMHandleBombsAPsReduction)/100 ) + 0.5)) );
|
return( max( 1, (INT16)(APBPConstants[AP_DROP_BOMB] * (100 - gSkillTraitValues.ubAMHandleBombsAPsReduction) / 100.0f + 0.5f)) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_DROP_BOMB] );
|
return( APBPConstants[AP_DROP_BOMB] );
|
||||||
}
|
}
|
||||||
@@ -3917,7 +3926,7 @@ INT16 GetAPsToPlantMine( SOLDIERTYPE *pSoldier )
|
|||||||
{
|
{
|
||||||
// SANDRO - STOMP traits - Ambidextrous bonus
|
// SANDRO - STOMP traits - Ambidextrous bonus
|
||||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_BURY_MINE] * (100 - gSkillTraitValues.ubAMHandleBombsAPsReduction)/100 ) + 0.5)) );
|
return( max( 1, (INT16)(APBPConstants[AP_BURY_MINE] * (100 - gSkillTraitValues.ubAMHandleBombsAPsReduction) / 100.0f + 0.5f)) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_BURY_MINE] );
|
return( APBPConstants[AP_BURY_MINE] );
|
||||||
}
|
}
|
||||||
@@ -3965,7 +3974,7 @@ INT16 GetAPsToStealItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pTargetSoldier, INT
|
|||||||
}
|
}
|
||||||
else if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && ( gGameOptions.fNewTraitSystem ))
|
else if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && ( gGameOptions.fNewTraitSystem ))
|
||||||
{
|
{
|
||||||
sAPCost += max( 1, (INT16)((APBPConstants[AP_STEAL_ITEM] * (100 - gSkillTraitValues.ubMAReducedAPsToSteal * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT ))/ 100) + 0.5));
|
sAPCost += max( 1, (INT16)(APBPConstants[AP_STEAL_ITEM] * (100 - gSkillTraitValues.ubMAReducedAPsToSteal * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT ))/ 100.0f + 0.5f));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -4104,7 +4113,7 @@ INT16 GetAPsToJumpOver( SOLDIERTYPE *pSoldier )
|
|||||||
{
|
{
|
||||||
// -25% APs needed to for MA traits
|
// -25% APs needed to for MA traits
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
return( GetAPsToChangeStance( pSoldier, ANIM_STAND ) + max( 1, (INT16)((APBPConstants[AP_JUMP_OVER] * (100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT ))/100) + 0.5)));
|
return( GetAPsToChangeStance( pSoldier, ANIM_STAND ) + max( 1, (INT16)(APBPConstants[AP_JUMP_OVER] * (100 - gSkillTraitValues.ubMAAPsClimbOrJumpReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f) ) );
|
||||||
else
|
else
|
||||||
return( GetAPsToChangeStance( pSoldier, ANIM_STAND ) + APBPConstants[AP_JUMP_OVER] );
|
return( GetAPsToChangeStance( pSoldier, ANIM_STAND ) + APBPConstants[AP_JUMP_OVER] );
|
||||||
}
|
}
|
||||||
@@ -4226,7 +4235,7 @@ INT16 GetAPsCrouch( SOLDIERTYPE *pSoldier, BOOLEAN fBackpackCheck )
|
|||||||
|
|
||||||
// -x% APs needed to change stance for MA trait
|
// -x% APs needed to change stance for MA trait
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && ( gGameOptions.fNewTraitSystem ))
|
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && ( gGameOptions.fNewTraitSystem ))
|
||||||
iFinalAPsToCrouch = (INT16)((iFinalAPsToCrouch * ( 100 - gSkillTraitValues.ubMAAPsChangeStanceReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5 );
|
iFinalAPsToCrouch = (INT16)(iFinalAPsToCrouch * ( 100 - gSkillTraitValues.ubMAAPsChangeStanceReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f );
|
||||||
|
|
||||||
if (iFinalAPsToCrouch < 1 )
|
if (iFinalAPsToCrouch < 1 )
|
||||||
iFinalAPsToCrouch = 1;
|
iFinalAPsToCrouch = 1;
|
||||||
@@ -4246,7 +4255,7 @@ INT16 GetAPsProne( SOLDIERTYPE *pSoldier, BOOLEAN fBackpackCheck )
|
|||||||
|
|
||||||
// -x% APs needed to change stance for MA trait
|
// -x% APs needed to change stance for MA trait
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && ( gGameOptions.fNewTraitSystem ))
|
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && ( gGameOptions.fNewTraitSystem ))
|
||||||
iFinalAPsToLieDown = (INT16)((iFinalAPsToLieDown * ( 100 - gSkillTraitValues.ubMAAPsChangeStanceReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5 );
|
iFinalAPsToLieDown = (INT16)(iFinalAPsToLieDown * ( 100 - gSkillTraitValues.ubMAAPsChangeStanceReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f );
|
||||||
|
|
||||||
if (iFinalAPsToLieDown < 1 )
|
if (iFinalAPsToLieDown < 1 )
|
||||||
iFinalAPsToLieDown = 1;
|
iFinalAPsToLieDown = 1;
|
||||||
@@ -4267,7 +4276,7 @@ INT16 GetAPsStartRun( SOLDIERTYPE *pSoldier )
|
|||||||
|
|
||||||
// Athletics trait
|
// Athletics trait
|
||||||
if( HAS_SKILL_TRAIT( pSoldier, ATHLETICS_NT ) && gGameOptions.fNewTraitSystem )
|
if( HAS_SKILL_TRAIT( pSoldier, ATHLETICS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
val = max( 1, (INT16)((val * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100) + 0.5) );
|
val = max( 1, (INT16)(val * (100 - gSkillTraitValues.ubATAPsMovementReduction) / 100.0f + 0.5f) );
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@@ -4276,7 +4285,7 @@ INT16 GetAPsStartRun( SOLDIERTYPE *pSoldier )
|
|||||||
INT16 GetAPsToOpenDoor( SOLDIERTYPE *pSoldier )
|
INT16 GetAPsToOpenDoor( SOLDIERTYPE *pSoldier )
|
||||||
{
|
{
|
||||||
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_OPEN_DOOR] * (100 - gSkillTraitValues.ubAMHandleDoorsAPsReduction)/100) + 0.5 )) );
|
return( max( 1, (INT16)(APBPConstants[AP_OPEN_DOOR] * (100 - gSkillTraitValues.ubAMHandleDoorsAPsReduction) / 100.0f + 0.5f )) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_OPEN_DOOR] );
|
return( APBPConstants[AP_OPEN_DOOR] );
|
||||||
}
|
}
|
||||||
@@ -4285,7 +4294,7 @@ INT16 GetAPsToOpenDoor( SOLDIERTYPE *pSoldier )
|
|||||||
INT16 GetAPsToPicklock( SOLDIERTYPE *pSoldier )
|
INT16 GetAPsToPicklock( SOLDIERTYPE *pSoldier )
|
||||||
{
|
{
|
||||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_PICKLOCK] * (100 - gSkillTraitValues.ubAMHandleDoorsAPsReduction)/100) + 0.5 )) );
|
return( max( 1, (INT16)(APBPConstants[AP_PICKLOCK] * (100 - gSkillTraitValues.ubAMHandleDoorsAPsReduction) / 100.0f + 0.5f )) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_PICKLOCK] );
|
return( APBPConstants[AP_PICKLOCK] );
|
||||||
}
|
}
|
||||||
@@ -4294,7 +4303,7 @@ INT16 GetAPsToPicklock( SOLDIERTYPE *pSoldier )
|
|||||||
INT16 GetAPsToBombDoor( SOLDIERTYPE *pSoldier )
|
INT16 GetAPsToBombDoor( SOLDIERTYPE *pSoldier )
|
||||||
{
|
{
|
||||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_EXPLODE_DOOR] * (100 - gSkillTraitValues.ubAMHandleDoorsAPsReduction)/100) + 0.5 )) );
|
return( max( 1, (INT16)(APBPConstants[AP_EXPLODE_DOOR] * (100 - gSkillTraitValues.ubAMHandleDoorsAPsReduction) / 100.0f + 0.5f )) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_EXPLODE_DOOR] );
|
return( APBPConstants[AP_EXPLODE_DOOR] );
|
||||||
}
|
}
|
||||||
@@ -4303,7 +4312,7 @@ INT16 GetAPsToBombDoor( SOLDIERTYPE *pSoldier )
|
|||||||
INT16 GetAPsToUntrapDoor( SOLDIERTYPE *pSoldier )
|
INT16 GetAPsToUntrapDoor( SOLDIERTYPE *pSoldier )
|
||||||
{
|
{
|
||||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_UNTRAP_DOOR] * (100 - gSkillTraitValues.ubAMHandleDoorsAPsReduction)/100) + 0.5 )) );
|
return( max( 1, (INT16)(APBPConstants[AP_UNTRAP_DOOR] * (100 - gSkillTraitValues.ubAMHandleDoorsAPsReduction) / 100.0f + 0.5f )) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_UNTRAP_DOOR] );
|
return( APBPConstants[AP_UNTRAP_DOOR] );
|
||||||
}
|
}
|
||||||
@@ -4312,7 +4321,7 @@ INT16 GetAPsToUntrapDoor( SOLDIERTYPE *pSoldier )
|
|||||||
INT16 GetBasicAPsToPickupItem( SOLDIERTYPE *pSoldier )
|
INT16 GetBasicAPsToPickupItem( SOLDIERTYPE *pSoldier )
|
||||||
{
|
{
|
||||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_PICKUP_ITEM] * (100 - gSkillTraitValues.ubAMPickItemsAPsReduction)/100) + 0.5 )) );
|
return( max( 1, (INT16)(APBPConstants[AP_PICKUP_ITEM] * (100 - gSkillTraitValues.ubAMPickItemsAPsReduction) / 100.0f + 0.5f )) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_PICKUP_ITEM] );
|
return( APBPConstants[AP_PICKUP_ITEM] );
|
||||||
}
|
}
|
||||||
@@ -4321,7 +4330,7 @@ INT16 GetBasicAPsToPickupItem( SOLDIERTYPE *pSoldier )
|
|||||||
INT16 GetAPsToDisarmMine( SOLDIERTYPE *pSoldier )
|
INT16 GetAPsToDisarmMine( SOLDIERTYPE *pSoldier )
|
||||||
{
|
{
|
||||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, AMBIDEXTROUS_NT ) )
|
||||||
return( max( 1, (INT16)((APBPConstants[AP_DISARM_MINE] * (100 - gSkillTraitValues.ubAMHandleBombsAPsReduction)/100) + 0.5 )) );
|
return( max( 1, (INT16)(APBPConstants[AP_DISARM_MINE] * (100 - gSkillTraitValues.ubAMHandleBombsAPsReduction) / 100.0f + 0.5f )) );
|
||||||
else
|
else
|
||||||
return( APBPConstants[AP_DISARM_MINE] );
|
return( APBPConstants[AP_DISARM_MINE] );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7560,7 +7560,7 @@ void EVENT_InternalSetSoldierDesiredDirection( SOLDIERTYPE *pSoldier, UINT8 ubNe
|
|||||||
}
|
}
|
||||||
// martial artists can turn faster
|
// martial artists can turn faster
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && gGameOptions.fNewTraitSystem )
|
||||||
sAPCost = max( 1, (INT16)((sAPCost * (100 - gSkillTraitValues.ubMAApsTurnAroundReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100) + 0.5) );
|
sAPCost = max( 1, (INT16)(sAPCost * (100 - gSkillTraitValues.ubMAApsTurnAroundReduction * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f) );
|
||||||
|
|
||||||
// SANDRO: get BP cost for weapon manipulating
|
// SANDRO: get BP cost for weapon manipulating
|
||||||
if ( gGameExternalOptions.ubEnergyCostForWeaponWeight )
|
if ( gGameExternalOptions.ubEnergyCostForWeaponWeight )
|
||||||
|
|||||||
@@ -3668,7 +3668,7 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, BOOLEAN fStea
|
|||||||
{
|
{
|
||||||
if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && ( gGameOptions.fNewTraitSystem ))
|
if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && ( gGameOptions.fNewTraitSystem ))
|
||||||
{
|
{
|
||||||
DeductPoints( pSoldier, max( 1, (INT16)((APBPConstants[AP_STEAL_ITEM] * (100 - gSkillTraitValues.ubMAReducedAPsToSteal * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT ))/ 100) + 0.5)), 200, AFTERACTION_INTERRUPT );
|
DeductPoints( pSoldier, max( 1, (INT16)(APBPConstants[AP_STEAL_ITEM] * (100 - gSkillTraitValues.ubMAReducedAPsToSteal * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f)), 200, AFTERACTION_INTERRUPT );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -3685,7 +3685,7 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, BOOLEAN fStea
|
|||||||
{
|
{
|
||||||
if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && ( gGameOptions.fNewTraitSystem ))
|
if (HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) && ( gGameOptions.fNewTraitSystem ))
|
||||||
{
|
{
|
||||||
DeductPoints( pSoldier, max( 1, (INT16)((APBPConstants[AP_STEAL_ITEM] * (100 - gSkillTraitValues.ubMAReducedAPsToSteal * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT ))/ 100) + 0.5)), 0, AFTERACTION_INTERRUPT );
|
DeductPoints( pSoldier, max( 1, (INT16)(APBPConstants[AP_STEAL_ITEM] * (100 - gSkillTraitValues.ubMAReducedAPsToSteal * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT )) / 100.0f + 0.5f)), 0, AFTERACTION_INTERRUPT );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2285,7 +2285,7 @@ INT32 EstimateStabDamage( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent,
|
|||||||
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) )
|
if ( HAS_SKILL_TRAIT( pSoldier, MARTIAL_ARTS_NT ) )
|
||||||
{
|
{
|
||||||
// also add breath damage bonus into consideration
|
// also add breath damage bonus into consideration
|
||||||
iImpact = (INT32)((iImpact * ( 100 + (gSkillTraitValues.ubMABonusDamageHandToHand + gSkillTraitValues.ubMABonusBreathDamageHandToHand) * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT ) ) / 100) + 0.5);
|
iImpact = (INT32)(iImpact * ( 100 + (gSkillTraitValues.ubMABonusDamageHandToHand + gSkillTraitValues.ubMABonusBreathDamageHandToHand) * NUM_SKILL_TRAITS( pSoldier, MARTIAL_ARTS_NT ) ) / 100.0f + 0.5f);
|
||||||
|
|
||||||
|
|
||||||
// The Spinning kicks or aimed punch bonus - SANDRO
|
// The Spinning kicks or aimed punch bonus - SANDRO
|
||||||
@@ -2300,7 +2300,7 @@ INT32 EstimateStabDamage( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent,
|
|||||||
// +30% damage of blunt weapons for melee character
|
// +30% damage of blunt weapons for melee character
|
||||||
if (HAS_SKILL_TRAIT( pSoldier, MELEE_NT ))
|
if (HAS_SKILL_TRAIT( pSoldier, MELEE_NT ))
|
||||||
{
|
{
|
||||||
iImpact = (INT32)((iImpact * (100 + gSkillTraitValues.ubMEDamageBonusBlunt)/100) + 0.5);
|
iImpact = (INT32)(iImpact * (100 + gSkillTraitValues.ubMEDamageBonusBlunt) / 100.0f + 0.5f);
|
||||||
|
|
||||||
//if (pSoldier->aiData.bAimTime > 0)
|
//if (pSoldier->aiData.bAimTime > 0)
|
||||||
//{
|
//{
|
||||||
@@ -2313,11 +2313,11 @@ INT32 EstimateStabDamage( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent,
|
|||||||
{
|
{
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, MARTIALARTS_OT ) )
|
if ( HAS_SKILL_TRAIT( pSoldier, MARTIALARTS_OT ) )
|
||||||
{
|
{
|
||||||
iImpact = (INT32)((iImpact * (100 + gbSkillTraitBonus[MARTIALARTS_OT] * NUM_SKILL_TRAITS( pSoldier, MARTIALARTS_OT ) ) / 100) + 0.5);
|
iImpact = (INT32)(iImpact * (100 + gbSkillTraitBonus[MARTIALARTS_OT] * NUM_SKILL_TRAITS( pSoldier, MARTIALARTS_OT ) ) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
if ( HAS_SKILL_TRAIT( pSoldier, HANDTOHAND_OT ) )
|
if ( HAS_SKILL_TRAIT( pSoldier, HANDTOHAND_OT ) )
|
||||||
{
|
{
|
||||||
iImpact = (INT32)((iImpact * (100 + gbSkillTraitBonus[HANDTOHAND_OT] * NUM_SKILL_TRAITS( pSoldier, HANDTOHAND_OT ) ) / 100) + 0.5);
|
iImpact = (INT32)(iImpact * (100 + gbSkillTraitBonus[HANDTOHAND_OT] * NUM_SKILL_TRAITS( pSoldier, HANDTOHAND_OT ) ) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// SANDRO - Enhanced Close Combat System - aiming at body parts makes difference
|
// SANDRO - Enhanced Close Combat System - aiming at body parts makes difference
|
||||||
@@ -2404,10 +2404,10 @@ INT8 TryToReload( SOLDIERTYPE * pSoldier )
|
|||||||
{
|
{
|
||||||
// Sniper trait makes chambering a round faster
|
// Sniper trait makes chambering a round faster
|
||||||
if (( Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_SN_RIFLE || Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_RIFLE ) && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ))
|
if (( Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_SN_RIFLE || Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_RIFLE ) && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ))
|
||||||
DeductPoints(pSoldier, (INT16)(((sModifiedReloadAP * (100 - gSkillTraitValues.ubSNChamberRoundAPsReduction * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )))/100) + 0.5), 0);
|
DeductPoints(pSoldier, (INT16)(sModifiedReloadAP * (100 - gSkillTraitValues.ubSNChamberRoundAPsReduction * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )) / 100.0f + 0.5f), 0);
|
||||||
// Ranger trait makes pumping shotguns faster
|
// Ranger trait makes pumping shotguns faster
|
||||||
else if (( Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_SHOTGUN ) && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
|
else if (( Weapon[Item[(pObj)->usItem].ubClassIndex].ubWeaponType == GUN_SHOTGUN ) && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
|
||||||
DeductPoints(pSoldier, (INT16)(((sModifiedReloadAP * (100 - gSkillTraitValues.ubRAPumpShotgunsAPsReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT )))/100) + 0.5), 0);
|
DeductPoints(pSoldier, (INT16)(sModifiedReloadAP * (100 - gSkillTraitValues.ubRAPumpShotgunsAPsReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT )) / 100.0f + 0.5f), 0);
|
||||||
else
|
else
|
||||||
DeductPoints(pSoldier, sModifiedReloadAP, 0);
|
DeductPoints(pSoldier, sModifiedReloadAP, 0);
|
||||||
}
|
}
|
||||||
@@ -2457,10 +2457,10 @@ INT8 TryToReload( SOLDIERTYPE * pSoldier )
|
|||||||
{
|
{
|
||||||
// Sniper trait makes chambering a round faster
|
// Sniper trait makes chambering a round faster
|
||||||
if (( Weapon[Item[(pObj2)->usItem].ubClassIndex].ubWeaponType == GUN_SN_RIFLE || Weapon[Item[(pObj2)->usItem].ubClassIndex].ubWeaponType == GUN_RIFLE ) && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ))
|
if (( Weapon[Item[(pObj2)->usItem].ubClassIndex].ubWeaponType == GUN_SN_RIFLE || Weapon[Item[(pObj2)->usItem].ubClassIndex].ubWeaponType == GUN_RIFLE ) && HAS_SKILL_TRAIT( pSoldier, SNIPER_NT ))
|
||||||
DeductPoints(pSoldier, (INT16)(((sModifiedReloadAP * (100 - gSkillTraitValues.ubSNChamberRoundAPsReduction * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )))/100) + 0.5), 0);
|
DeductPoints(pSoldier, (INT16)(sModifiedReloadAP * (100 - gSkillTraitValues.ubSNChamberRoundAPsReduction * NUM_SKILL_TRAITS( pSoldier, SNIPER_NT )) / 100.0f + 0.5f), 0);
|
||||||
// Ranger trait makes pumping shotguns faster
|
// Ranger trait makes pumping shotguns faster
|
||||||
else if (( Weapon[Item[(pObj2)->usItem].ubClassIndex].ubWeaponType == GUN_SHOTGUN ) && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
|
else if (( Weapon[Item[(pObj2)->usItem].ubClassIndex].ubWeaponType == GUN_SHOTGUN ) && HAS_SKILL_TRAIT( pSoldier, RANGER_NT ))
|
||||||
DeductPoints(pSoldier, (INT16)(((sModifiedReloadAP * (100 - gSkillTraitValues.ubRAPumpShotgunsAPsReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT )))/100) + 0.5), 0);
|
DeductPoints(pSoldier, (INT16)(sModifiedReloadAP * (100 - gSkillTraitValues.ubRAPumpShotgunsAPsReduction * NUM_SKILL_TRAITS( pSoldier, RANGER_NT )) / 100.0f + 0.5f), 0);
|
||||||
else
|
else
|
||||||
DeductPoints(pSoldier, sModifiedReloadAP, 0);
|
DeductPoints(pSoldier, sModifiedReloadAP, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1632,13 +1632,13 @@ BOOLEAN DamageSoldierFromBlast( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo
|
|||||||
Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL && Item[usItem].usItemClass == IC_BOMB &&
|
Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL && Item[usItem].usItemClass == IC_BOMB &&
|
||||||
(!Item[usItem].attachment || Item[usItem].mine ))
|
(!Item[usItem].attachment || Item[usItem].mine ))
|
||||||
{
|
{
|
||||||
sNewWoundAmt = (INT16)(((sNewWoundAmt * (100 + gSkillTraitValues.ubDEDamageOfBombsAndMines)) / 100) + 0.5);
|
sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubDEDamageOfBombsAndMines) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
// Heavy Weapons trait bonus damage to tanks
|
// Heavy Weapons trait bonus damage to tanks
|
||||||
if ( HAS_SKILL_TRAIT( MercPtrs[ubOwner], HEAVY_WEAPONS_NT ) && ARMED_VEHICLE( pSoldier ) &&
|
if ( HAS_SKILL_TRAIT( MercPtrs[ubOwner], HEAVY_WEAPONS_NT ) && ARMED_VEHICLE( pSoldier ) &&
|
||||||
Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL )
|
Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL )
|
||||||
{
|
{
|
||||||
sNewWoundAmt = (INT16)(((sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageTanksBonusPercent * NUM_SKILL_TRAITS( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT ))) / 100) + 0.5); // +30%
|
sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageTanksBonusPercent * NUM_SKILL_TRAITS( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT )) / 100.0f + 0.5f); // +30%
|
||||||
}
|
}
|
||||||
// Heavy Weapons trait bonus damage with rocket, grenade launchers and mortar
|
// Heavy Weapons trait bonus damage with rocket, grenade launchers and mortar
|
||||||
else if ( HAS_SKILL_TRAIT( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT ) &&
|
else if ( HAS_SKILL_TRAIT( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT ) &&
|
||||||
@@ -1647,7 +1647,7 @@ BOOLEAN DamageSoldierFromBlast( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo
|
|||||||
(Item[usItem].usItemClass == IC_GRENADE && (Item[usItem].glgrenade || Item[usItem].electronic) ) || // rockets for rocketlaunchers (I haven't found any other way)
|
(Item[usItem].usItemClass == IC_GRENADE && (Item[usItem].glgrenade || Item[usItem].electronic) ) || // rockets for rocketlaunchers (I haven't found any other way)
|
||||||
(Item[usItem].usItemClass == IC_LAUNCHER ) || Item[usItem].rocketlauncher || Item[usItem].singleshotrocketlauncher ) )
|
(Item[usItem].usItemClass == IC_LAUNCHER ) || Item[usItem].rocketlauncher || Item[usItem].singleshotrocketlauncher ) )
|
||||||
{
|
{
|
||||||
sNewWoundAmt = (INT16)(((sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageBonusPercentForHW * NUM_SKILL_TRAITS( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT ))) / 100) + 0.5); // +15%
|
sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageBonusPercentForHW * NUM_SKILL_TRAITS( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT )) / 100.0f + 0.5f); // +15%
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user