From c8bf95490a0c62c4843b8c63af44480483a0ebc3 Mon Sep 17 00:00:00 2001 From: Wanne Date: Tue, 2 Feb 2010 12:41:02 +0000 Subject: [PATCH] Cover Patch (by CptMoore) - Removed a line of code which fiddled with chance to hit calculation. - Cover Display now works correctly with multiple enemies. - Cover Display has no problems with stance anymore. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@3318 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/DisplayCover.cpp | 38 ++++++++++++++++++++++---------------- Tactical/LOS.cpp | 1 - 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Tactical/DisplayCover.cpp b/Tactical/DisplayCover.cpp index 3d2b6e9c2..9a715d31e 100644 --- a/Tactical/DisplayCover.cpp +++ b/Tactical/DisplayCover.cpp @@ -101,7 +101,7 @@ void RemoveCoverObjectsFromViewArea(); void CalculateCover(); void CalculateCoverForSoldier( SOLDIERTYPE* pForSoldier, const INT16& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover ); -void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT16& sTargetGridNo, const BOOLEAN& fRoof, const INT32& iSightAdjustment, INT8& bCover ); +void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT16& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover, SOLDIERTYPE* pToSoldier=NULL ); void GetGridNoForViewPort( const UINT8& ubX, const UINT8& ubY, INT16& sGridNo ); @@ -253,9 +253,9 @@ void AddCoverObjectsToViewArea() UINT8 ubX, ubY, ubZ; BOOLEAN fChanged = FALSE; - for ( ubX=gsMinCellX; ubX<=gsMaxCellX; ++ubX ) + for ( ubX=(UINT8)gsMinCellX; ubX<=gsMaxCellX; ++ubX ) { - for ( ubY=gsMinCellY; ubY<=gsMaxCellY; ++ubY ) + for ( ubY=(UINT8)gsMinCellY; ubY<=gsMaxCellY; ++ubY ) { for ( ubZ=0; ubZGetMaxDistanceVisible( sTargetGridNo, pSoldier->pathing.bLevel, CALC_FROM_WANTED_DIR ); - INT16 iSightAdjustment = GetSightAdjustment( pSoldier, sTargetGridNo, ANIM_PRONE ) - GetSightAdjustmentThroughStance( ANIM_PRONE ); - - CalculateCoverFromSoldier( pOpponent, sTargetGridNo, fRoof, iSightAdjustment, bCover ); + CalculateCoverFromSoldier( pOpponent, sTargetGridNo, fRoof, bCover, pSoldier ); // if we got no cover, just return, can't get any worse than that. Helldorados lets you count if (bCover == NO_COVER) @@ -488,20 +489,25 @@ void CalculateCoverForSoldier( SOLDIERTYPE* pSoldier, const INT16& sTargetGridNo } } -void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT16& sTargetGridNo, const BOOLEAN& fRoof, const INT32& iSightAdjustment, INT8& bCover ) +void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT16& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover, SOLDIERTYPE* pToSoldier ) { UINT16 usSightLimit = pFromSoldier->GetMaxDistanceVisible(sTargetGridNo, (INT8)fRoof, CALC_FROM_WANTED_DIR); - bCover = MAX_COVER; for ( int i = 0; i i) bCover = i; break; // we go from prone to stand, if soldier can see someone crouching, he can also see someone standing } } diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index 4b69028d9..bb1001517 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -2090,7 +2090,6 @@ INT32 SoldierToSoldierLineOfSightTest( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE // needed for gun hit calculation (can you even hit him) else if (iTileSightLimit == NO_DISTANCE_LIMIT) { iTileSightLimit = pStartSoldier->GetMaxDistanceVisible( pEndSoldier->sGridNo, pEndSoldier->pathing.bLevel, CALC_FROM_ALL_DIRS ); - iTileSightLimit += iTileSightLimit * GetSightAdjustment(pEndSoldier) / 100; iTileSightLimit += 255; // this shifts the limit for something special (we don't know yet) }