diff --git a/Tactical/DisplayCover.cpp b/Tactical/DisplayCover.cpp index ba1a87df..c96f2c51 100644 --- a/Tactical/DisplayCover.cpp +++ b/Tactical/DisplayCover.cpp @@ -41,15 +41,6 @@ class SOLDIERTYPE; //******* Local Defines ************************************************** -enum COVER_VALUES -{ - INVALID_COVER=-1, - NO_COVER=0, - MIN_COVER=1, - MED_COVER=2, - MAX_COVER=3 -}; - // Flugente: mines display - stuff needs to be here enum MINES_VALUES { @@ -136,8 +127,6 @@ void RemoveMinesObjectsFromViewArea(); // added by Flugente, has to be declared void RemoveTraitObjectsFromViewArea(); void CalculateCover(); -void CalculateCoverForSoldier( SOLDIERTYPE* pForSoldier, const INT32& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover ); -void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT32& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover, SOLDIERTYPE* pToSoldier=NULL ); void GetGridNoForViewPort( const INT32& ubX, const INT32& ubY, INT32& sGridNo ); diff --git a/Tactical/DisplayCover.h b/Tactical/DisplayCover.h index 43f4b0ff..ce0bb4f5 100644 --- a/Tactical/DisplayCover.h +++ b/Tactical/DisplayCover.h @@ -19,12 +19,24 @@ void SwitchCoverDrawMode(); void RemoveVisibleGridNoAtSelectedGridNo(); void DisplayGridNoVisibleToSoldierGrid( ); +void CalculateCoverForSoldier( SOLDIERTYPE* pForSoldier, const INT32& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover ); +void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT32& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover, SOLDIERTYPE* pToSoldier = NULL ); + #define DC_MAX_COVER_RANGE 43 //31 #define DC__SOLDIER_VISIBLE_RANGE 43 //31 #define DC__MIN_SIZE 4 #define DC__MAX_SIZE 21 //11 +enum COVER_VALUES +{ + INVALID_COVER = -1, + NO_COVER = 0, + MIN_COVER = 1, + MED_COVER = 2, + MAX_COVER = 3 +}; + // Flugente: mines display - stuff needs to be here // Sevenfm: moved here from DisplayCover.cpp enum MINES_DRAW_MODE { diff --git a/Tactical/Interface.cpp b/Tactical/Interface.cpp index 4757aaa4..829db9d1 100644 --- a/Tactical/Interface.cpp +++ b/Tactical/Interface.cpp @@ -64,7 +64,7 @@ #include "environment.h" // sevenfm: needed for _KeyDown(SHIFT) #include "english.h" - + #include "DisplayCover.h" #endif #include "InterfaceItemImages.h" @@ -299,9 +299,6 @@ void DoorMenuBackregionCallback( MOUSE_REGION * pRegion, INT32 iReason ); UINT32 CalcUIMessageDuration( STR16 wString ); -// sevenfm: this function is needed to show cover in health bar -extern void CalculateCoverForSoldier( SOLDIERTYPE* pForSoldier, const INT32& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover ); - extern FLOAT Distance2D( FLOAT dDeltaX, FLOAT dDeltaY ); // Flugente: toggle display of enemy role indicators diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 0df36754..6931d841 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -58,6 +58,7 @@ #include "opplist.h" #include "Sys Globals.h"//dnl ch74 201013 #include "CampaignStats.h" // added by Flugente + #include "DisplayCover.h" // added by Flugente #endif #ifdef JA2UB @@ -9572,30 +9573,36 @@ BOOLEAN ApplyClothes( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fUseAPs // first, remove the covert flags, and then reapply the correct ones, in case we switch between civilian and military clothes pSoldier->usSoldierFlagMask &= ~(SOLDIER_COVERT_CIV|SOLDIER_COVERT_SOLDIER); - // we now have to determine wether we are currently wearing civilian or military clothes - for ( UINT8 i = UNIFORM_ENEMY_ADMIN; i <= UNIFORM_ENEMY_ELITE; ++i ) + // we can onyl dsiguise sucessfully if we are not seen + INT8 bCover = MAX_COVER; + CalculateCoverForSoldier( pSoldier, pSoldier->sGridNo, pSoldier->pathing.bLevel, bCover ); + if ( bCover == MAX_COVER ) { - // both parts have to fit. We cant mix different uniforms and get soldier disguise - if ( COMPARE_PALETTEREP_ID(pSoldier->VestPal, gUniformColors[ i ].vest) && COMPARE_PALETTEREP_ID(pSoldier->PantsPal, gUniformColors[ i ].pants) ) + // we now have to determine wether we are currently wearing civilian or military clothes + for ( UINT8 i = UNIFORM_ENEMY_ADMIN; i <= UNIFORM_ENEMY_ELITE; ++i ) { - pSoldier->usSoldierFlagMask |= SOLDIER_COVERT_SOLDIER; + // both parts have to fit. We cant mix different uniforms and get soldier disguise + if ( COMPARE_PALETTEREP_ID(pSoldier->VestPal, gUniformColors[ i ].vest) && COMPARE_PALETTEREP_ID(pSoldier->PantsPal, gUniformColors[ i ].pants) ) + { + pSoldier->usSoldierFlagMask |= SOLDIER_COVERT_SOLDIER; + + if ( pSoldier->bTeam == OUR_TEAM ) + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_DISGUISED_AS_SOLDIER], pSoldier->GetName() ); + + break; + } + } + + // if not dressed as a soldier, we must be dressed as a civilian + if ( !(pSoldier->usSoldierFlagMask & SOLDIER_COVERT_SOLDIER) ) + { + pSoldier->usSoldierFlagMask |= SOLDIER_COVERT_CIV; if ( pSoldier->bTeam == OUR_TEAM ) - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_DISGUISED_AS_SOLDIER], pSoldier->GetName() ); - - break; + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_DISGUISED_AS_CIVILIAN], pSoldier->GetName() ); } } - // if not dressed as a soldier, we must be dressed as a civilian - if ( !(pSoldier->usSoldierFlagMask & SOLDIER_COVERT_SOLDIER) ) - { - pSoldier->usSoldierFlagMask |= SOLDIER_COVERT_CIV; - - if ( pSoldier->bTeam == OUR_TEAM ) - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_DISGUISED_AS_CIVILIAN], pSoldier->GetName() ); - } - // reevaluate sight - otherwise we could hide by changing clothes in plain sight! OtherTeamsLookForMan(pSoldier); }