From f39dc4bfcaa1e750497f7801f0a14935aef2c49e Mon Sep 17 00:00:00 2001 From: Flugente Date: Sun, 16 Mar 2014 18:54:35 +0000 Subject: [PATCH] Additional tile properteis update (by anv): - COVER_TOOLTIP_DISPLAY_DETAILED_TILE_PROPERTIES under [Tactical Cover System Settings] set to true will let "f" cover tooltip to present detailed information about tile. Only relevant (non-zero) info will be shown. - fixed bug causing trap level to be ignored and limited final maximum and minimum camo of given map grid between 0 and 100. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7073 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 4 ++ GameSettings.h | 4 ++ Tactical/DisplayCover.cpp | 83 ++++++++++++++++++++++++++++++++++-- Tactical/LOS.cpp | 36 +++++++++++----- Utils/_Ja25DutchText.cpp | 6 ++- Utils/_Ja25DutchText.h | 6 ++- Utils/_Ja25EnglishText.cpp | 6 ++- Utils/_Ja25EnglishText.h | 7 ++- Utils/_Ja25FrenchText.cpp | 6 ++- Utils/_Ja25FrenchText.h | 6 ++- Utils/_Ja25GermanText.cpp | 6 ++- Utils/_Ja25GermanText.h | 6 ++- Utils/_Ja25ItalianText.cpp | 6 ++- Utils/_Ja25ItalianText.h | 6 ++- Utils/_Ja25PolishText.cpp | 4 ++ Utils/_Ja25PolishText.h | 6 ++- Utils/_Ja25RussianText.h | 6 ++- Utils/_Ja25TaiwaneseText.cpp | 6 ++- 18 files changed, 184 insertions(+), 26 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index e469a819..9bb9d80f 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -1501,6 +1501,10 @@ void LoadGameExternalOptions() gGameExternalOptions.fAdditionalTileProperties = iniReader.ReadBoolean("Tactical Cover System Settings", "COVER_SYSTEM_ADDITIONAL_TILE_PROPERTIES", TRUE ); // static shadows decrease brightness gGameExternalOptions.fStaticShadowsDecreaseBrightness = iniReader.ReadBoolean("Tactical Cover System Settings", "COVER_SYSTEM_STATIC_SHADOWS_DECREASE_BRIGHTNESS", FALSE ); + // camo affinities will be used as caps not multipliers (suggested by mmm) - it will be possible to achieve perfect camo on mixed terrain using mixed camo types + gGameExternalOptions.fAlternateMultiTerrainCamoCalculation = iniReader.ReadBoolean("Tactical Cover System Settings", "COVER_SYSTEM_ALTERNATE_MULTI_TERRAIN_CAMO_CALCULATION", TRUE ); + // cover tooltip ("f") will display detailed properties and their values + gGameExternalOptions.fCoverTooltipDetailedTileProperties = iniReader.ReadBoolean("Tactical Cover System Settings","COVER_TOOLTIP_DISPLAY_DETAILED_TILE_PROPERTIES", TRUE); //################# Tactical Suppression Fire Settings ################## // These settings control the behavior of Suppression Fire, its severity, and its side-effects. diff --git a/GameSettings.h b/GameSettings.h index 6d9cee67..5d075432 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -851,6 +851,10 @@ typedef struct BOOLEAN fAdditionalTileProperties; // static shadows decrease brightness BOOLEAN fStaticShadowsDecreaseBrightness; + // camo affinities will be used as caps not multipliers (suggested by mmm) - it will be possible to achieve perfect camo on mixed terrain using mixed camo types + BOOLEAN fAlternateMultiTerrainCamoCalculation; + // cover tooltip ("f") will display detailed properties and their values + BOOLEAN fCoverTooltipDetailedTileProperties; // HEADROCK HAM B1: Global modifier for mine income (0 is automatically turned to 1 to avoid divide-by-zero.) INT16 usMineIncomePercentage; diff --git a/Tactical/DisplayCover.cpp b/Tactical/DisplayCover.cpp index 97541e5d..ba1a87df 100644 --- a/Tactical/DisplayCover.cpp +++ b/Tactical/DisplayCover.cpp @@ -710,9 +710,86 @@ void DisplayRangeToTarget( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) if(gGameExternalOptions.fAdditionalTileProperties) { - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, - gzDisplayCoverText[DC_MSG__COVER_INFORMATION], - ubCover, GetDetailedTerrainName(zGivenTileProperties), ubBrightness ); + if(!gGameExternalOptions.fCoverTooltipDetailedTileProperties) + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, + gzDisplayCoverText[DC_MSG__COVER_INFORMATION], + ubCover, GetDetailedTerrainName(zGivenTileProperties), ubBrightness ); + } + else + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, + gzDisplayCoverText[DC_MSG__COVER_INFORMATION_WITH_DETAILED_CAMO], + ubCover, ubBrightness ); + + UINT8 ubApplicableProperties = 0; + swprintf( zOutputString, L"" ); + if(zGivenTileProperties.bWoodCamoAffinity > 0) + { + swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__WOOD]); + swprintf( zOutputString + wcslen(zOutputString), L": %d/100", zGivenTileProperties.bWoodCamoAffinity); + ubApplicableProperties++; + } + if(zGivenTileProperties.bDesertCamoAffinity > 0) + { + if(ubApplicableProperties) + swprintf( zOutputString + wcslen(zOutputString), L", "); + swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__DESERT]); + swprintf( zOutputString + wcslen(zOutputString), L": %d/100", zGivenTileProperties.bDesertCamoAffinity); + ubApplicableProperties++; + } + if(zGivenTileProperties.bUrbanCamoAffinity > 0) + { + if(ubApplicableProperties) + swprintf( zOutputString + wcslen(zOutputString), L", "); + swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__URBAN]); + swprintf( zOutputString + wcslen(zOutputString), L": %d/100", zGivenTileProperties.bUrbanCamoAffinity); + ubApplicableProperties++; + } + if(zGivenTileProperties.bSnowCamoAffinity > 0) + { + if(ubApplicableProperties) + swprintf( zOutputString + wcslen(zOutputString), L", "); + swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__SNOW]); + swprintf( zOutputString + wcslen(zOutputString), L": %d/100", zGivenTileProperties.bSnowCamoAffinity); + ubApplicableProperties++; + } + if(zGivenTileProperties.bSoundModifier != 0) + { + if(ubApplicableProperties) + swprintf( zOutputString + wcslen(zOutputString), L", "); + swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__DETAILED_SOUND]); + if(zGivenTileProperties.bSoundModifier > 0) + swprintf( zOutputString + wcslen(zOutputString), L": +%d", zGivenTileProperties.bSoundModifier); + else + swprintf( zOutputString + wcslen(zOutputString), L": %d", zGivenTileProperties.bSoundModifier); + ubApplicableProperties++; + } + if(zGivenTileProperties.bStealthDifficultyModifer != 0) + { + if(ubApplicableProperties) + swprintf( zOutputString + wcslen(zOutputString), L", "); + swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__DETAILED_STEALTH]); + if(zGivenTileProperties.bStealthDifficultyModifer > 0) + swprintf( zOutputString + wcslen(zOutputString), L": +%d/100", zGivenTileProperties.bStealthDifficultyModifer); + else + swprintf( zOutputString + wcslen(zOutputString), L": %d/100", zGivenTileProperties.bStealthDifficultyModifer); + ubApplicableProperties++; + } + if(zGivenTileProperties.bTrapBonus != 0) + { + if(ubApplicableProperties) + swprintf( zOutputString + wcslen(zOutputString), L", "); + swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__DETAILED_TRAP_LEVEL]); + if(zGivenTileProperties.bTrapBonus > 0) + swprintf( zOutputString + wcslen(zOutputString), L": +%d", zGivenTileProperties.bTrapBonus); + else + swprintf( zOutputString + wcslen(zOutputString), L": %d", zGivenTileProperties.bTrapBonus); + ubApplicableProperties++; + } + if( wcslen(zOutputString) > 0 ) + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, zOutputString ); + } } else { diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index 397b8184..4c98844f 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -520,6 +520,7 @@ ADDITIONAL_TILE_PROPERTIES_VALUES GetAllAdditonalTilePropertiesForGrid( const IN INT16 iCamoStanceModifer = 0; INT16 iSoundModifier = 0; INT16 iStealthDifficultyModifer = 0; + INT16 iTrapBonus = 0; UINT8 ubTerrainID = 0; BOOLEAN fFoundBottom = FALSE; @@ -576,6 +577,8 @@ ADDITIONAL_TILE_PROPERTIES_VALUES GetAllAdditonalTilePropertiesForGrid( const IN iSoundModifier += gTileDatabase[ pNode->usIndex ].bSoundModifier; iStealthDifficultyModifer += gTileDatabase[ pNode->usIndex ].bStealthDifficultyModifer; + iTrapBonus += gTileDatabase[ pNode->usIndex ].bTrapBonus; + ubTerrainID = gTileDatabase[ pNode->usIndex ].ubTerrainID; // going from the top, if any tile has terrain type, we're ignoring all tiles below it if(ubTerrainID != NO_TERRAIN) @@ -586,15 +589,17 @@ ADDITIONAL_TILE_PROPERTIES_VALUES GetAllAdditonalTilePropertiesForGrid( const IN } - ubAllTileProperties.bWoodCamoAffinity = (INT8)iWoodCamoAffinity; - ubAllTileProperties.bDesertCamoAffinity = (INT8)iDesertCamoAffinity; - ubAllTileProperties.bUrbanCamoAffinity = (INT8)iUrbanCamoAffinity; - ubAllTileProperties.bSnowCamoAffinity = (INT8)iSnowCamoAffinity; + ubAllTileProperties.bWoodCamoAffinity = (INT8)max(0, min(100, iWoodCamoAffinity)); + ubAllTileProperties.bDesertCamoAffinity = (INT8)max(0, min(100, iDesertCamoAffinity)); + ubAllTileProperties.bUrbanCamoAffinity = (INT8)max(0, min(100, iUrbanCamoAffinity)); + ubAllTileProperties.bSnowCamoAffinity = (INT8)max(0, min(100, iSnowCamoAffinity)); ubAllTileProperties.bCamoStanceModifer = (INT8)iCamoStanceModifer; ubAllTileProperties.bSoundModifier = (INT8)iSoundModifier; ubAllTileProperties.bStealthDifficultyModifer = (INT8)iStealthDifficultyModifer; + ubAllTileProperties.bTrapBonus = (INT8)iTrapBonus; + return ubAllTileProperties; } @@ -662,13 +667,24 @@ INT8 GetDetailedSightAdjustmentCamouflageOnTerrain( SOLDIERTYPE* pSoldier, const effectiveness += (UINT8)(pSoldier->GetBackgroundValue(BG_PERC_CAMO)); scaler = effectiveness * scaler / 6; + if(gGameExternalOptions.fAlternateMultiTerrainCamoCalculation) + { + iResult += min( -GetJungleCamouflage(pSoldier) * scaler / 100, zGivenTileProperties.bWoodCamoAffinity); + iResult += min( -GetDesertCamouflage(pSoldier) * scaler / 100, zGivenTileProperties.bDesertCamoAffinity); + iResult += min( -GetUrbanCamouflage(pSoldier) * scaler / 100, zGivenTileProperties.bUrbanCamoAffinity); + iResult += min( -GetSnowCamouflage(pSoldier) * scaler / 100, zGivenTileProperties.bSnowCamoAffinity); + iResult = min( iResult, 100); + iResult = -iResult; + } + else + { + iResult += GetJungleCamouflage(pSoldier) * scaler / 100 * zGivenTileProperties.bWoodCamoAffinity / 100; + iResult += GetDesertCamouflage(pSoldier) * scaler / 100 * zGivenTileProperties.bDesertCamoAffinity / 100; + iResult += GetUrbanCamouflage(pSoldier) * scaler / 100 * zGivenTileProperties.bUrbanCamoAffinity / 100; + iResult += GetSnowCamouflage(pSoldier) * scaler / 100 * zGivenTileProperties.bSnowCamoAffinity / 100; + } - iResult += GetJungleCamouflage(pSoldier) * scaler / 100 * zGivenTileProperties.bWoodCamoAffinity / 100; - iResult += GetDesertCamouflage(pSoldier) * scaler / 100 * zGivenTileProperties.bDesertCamoAffinity / 100; - iResult += GetUrbanCamouflage(pSoldier) * scaler / 100 * zGivenTileProperties.bUrbanCamoAffinity / 100; - iResult += GetSnowCamouflage(pSoldier) * scaler / 100 * zGivenTileProperties.bSnowCamoAffinity / 100; - - return (INT8)min(100, max(0, iResult)); + return (INT8)max(-100, min(0, iResult)); } /** diff --git a/Utils/_Ja25DutchText.cpp b/Utils/_Ja25DutchText.cpp index 87a23724..6ce5cb5a 100644 --- a/Utils/_Ja25DutchText.cpp +++ b/Utils/_Ja25DutchText.cpp @@ -499,7 +499,11 @@ STR16 gzDisplayCoverText[]= L"Desert and Urban", L"Desert and Snow", L"Urban and Snow", - L"-" // yes empty for now + L"-", // yes empty for now + L"Cover: %d/100, Brightness: %d/100", + L"Footstep volume", + L"Stealth difficulty", + L"Trap level", }; diff --git a/Utils/_Ja25DutchText.h b/Utils/_Ja25DutchText.h index 125d17bf..2c54adcd 100644 --- a/Utils/_Ja25DutchText.h +++ b/Utils/_Ja25DutchText.h @@ -71,7 +71,11 @@ enum DC_TTI__DESERT_AND_URBAN, DC_TTI__DESERT_AND_SNOW, DC_TTI__URBAN_AND_SNOW, - DC_TTI__UNKNOWN + DC_TTI__UNKNOWN, + DC_MSG__COVER_INFORMATION_WITH_DETAILED_CAMO, + DC_TTI__DETAILED_SOUND, + DC_TTI__DETAILED_STEALTH, + DC_TTI__DETAILED_TRAP_LEVEL, }; extern STR16 gzDisplayCoverText[]; diff --git a/Utils/_Ja25EnglishText.cpp b/Utils/_Ja25EnglishText.cpp index aaac99d3..45ab2778 100644 --- a/Utils/_Ja25EnglishText.cpp +++ b/Utils/_Ja25EnglishText.cpp @@ -498,7 +498,11 @@ STR16 gzDisplayCoverText[]= L"Desert and Urban", L"Desert and Snow", L"Urban and Snow", - L"-" // yes empty for now + L"-", // yes empty for now + L"Cover: %d/100, Brightness: %d/100", + L"Footstep volume", + L"Stealth difficulty", + L"Trap level", }; #endif diff --git a/Utils/_Ja25EnglishText.h b/Utils/_Ja25EnglishText.h index 125d17bf..7e4e34db 100644 --- a/Utils/_Ja25EnglishText.h +++ b/Utils/_Ja25EnglishText.h @@ -71,7 +71,12 @@ enum DC_TTI__DESERT_AND_URBAN, DC_TTI__DESERT_AND_SNOW, DC_TTI__URBAN_AND_SNOW, - DC_TTI__UNKNOWN + DC_TTI__UNKNOWN, + DC_MSG__COVER_INFORMATION_WITH_DETAILED_CAMO, + DC_TTI__DETAILED_SOUND, + DC_TTI__DETAILED_STEALTH, + DC_TTI__DETAILED_TRAP_LEVEL, + }; extern STR16 gzDisplayCoverText[]; diff --git a/Utils/_Ja25FrenchText.cpp b/Utils/_Ja25FrenchText.cpp index 30807c36..608e431d 100644 --- a/Utils/_Ja25FrenchText.cpp +++ b/Utils/_Ja25FrenchText.cpp @@ -498,7 +498,11 @@ STR16 gzDisplayCoverText[]= L"Désert et urbain", L"Désert et neige", L"Urbain et neige", - L"-" // yes empty for now + L"-", // yes empty for now + L"Contraste : %d/100, Luminosit� : %d/100", + L"Footstep volume",// TODO.Translate + L"Stealth difficulty",// TODO.Translate + L"Trap level",// TODO.Translate }; diff --git a/Utils/_Ja25FrenchText.h b/Utils/_Ja25FrenchText.h index 125d17bf..2c54adcd 100644 --- a/Utils/_Ja25FrenchText.h +++ b/Utils/_Ja25FrenchText.h @@ -71,7 +71,11 @@ enum DC_TTI__DESERT_AND_URBAN, DC_TTI__DESERT_AND_SNOW, DC_TTI__URBAN_AND_SNOW, - DC_TTI__UNKNOWN + DC_TTI__UNKNOWN, + DC_MSG__COVER_INFORMATION_WITH_DETAILED_CAMO, + DC_TTI__DETAILED_SOUND, + DC_TTI__DETAILED_STEALTH, + DC_TTI__DETAILED_TRAP_LEVEL, }; extern STR16 gzDisplayCoverText[]; diff --git a/Utils/_Ja25GermanText.cpp b/Utils/_Ja25GermanText.cpp index 9476120e..81f3570f 100644 --- a/Utils/_Ja25GermanText.cpp +++ b/Utils/_Ja25GermanText.cpp @@ -496,7 +496,11 @@ STR16 gzDisplayCoverText[]= L"Wüste und Stadt", L"Wüste und Schnee", L"Stadt und Schnee", - L"-" // yes empty for now + L"-", // yes empty for now + L"Deckung: %d/100, Helligkeit: %d/100", + L"Footstep volume",// TODO.Translate + L"Stealth difficulty",// TODO.Translate + L"Trap level",// TODO.Translate }; diff --git a/Utils/_Ja25GermanText.h b/Utils/_Ja25GermanText.h index 7d52b710..3829ba32 100644 --- a/Utils/_Ja25GermanText.h +++ b/Utils/_Ja25GermanText.h @@ -71,7 +71,11 @@ enum DC_TTI__DESERT_AND_URBAN, DC_TTI__DESERT_AND_SNOW, DC_TTI__URBAN_AND_SNOW, - DC_TTI__UNKNOWN + DC_TTI__UNKNOWN, + DC_MSG__COVER_INFORMATION_WITH_DETAILED_CAMO, + DC_TTI__DETAILED_SOUND, + DC_TTI__DETAILED_STEALTH, + DC_TTI__DETAILED_TRAP_LEVEL, }; extern STR16 gzDisplayCoverText[]; diff --git a/Utils/_Ja25ItalianText.cpp b/Utils/_Ja25ItalianText.cpp index 45b89938..4deb214a 100644 --- a/Utils/_Ja25ItalianText.cpp +++ b/Utils/_Ja25ItalianText.cpp @@ -496,7 +496,11 @@ STR16 gzDisplayCoverText[]= L"Deserto e urbano", L"Deserto e neve", L"Urbano e neve", - L"-" // yes empty for now + L"-", // yes empty for now + L"Copertura: %d/100, Luminosit�: %d/100", + L"Footstep volume",// TODO.Translate + L"Stealth difficulty",// TODO.Translate + L"Trap level",// TODO.Translate }; diff --git a/Utils/_Ja25ItalianText.h b/Utils/_Ja25ItalianText.h index 125d17bf..2c54adcd 100644 --- a/Utils/_Ja25ItalianText.h +++ b/Utils/_Ja25ItalianText.h @@ -71,7 +71,11 @@ enum DC_TTI__DESERT_AND_URBAN, DC_TTI__DESERT_AND_SNOW, DC_TTI__URBAN_AND_SNOW, - DC_TTI__UNKNOWN + DC_TTI__UNKNOWN, + DC_MSG__COVER_INFORMATION_WITH_DETAILED_CAMO, + DC_TTI__DETAILED_SOUND, + DC_TTI__DETAILED_STEALTH, + DC_TTI__DETAILED_TRAP_LEVEL, }; extern STR16 gzDisplayCoverText[]; diff --git a/Utils/_Ja25PolishText.cpp b/Utils/_Ja25PolishText.cpp index 935cfc7a..c4c86a5e 100644 --- a/Utils/_Ja25PolishText.cpp +++ b/Utils/_Ja25PolishText.cpp @@ -500,6 +500,10 @@ STR16 gzDisplayCoverText[]= L"Pustynia i śnieg", L"Miasto i śnieg", L"-" // yes empty for now + L"Osłona: %d/100, Oświetlenie: %d/100", + L"Odgłos krok�w", + L"Trudność skradania", + L"Poziom pułapek", }; diff --git a/Utils/_Ja25PolishText.h b/Utils/_Ja25PolishText.h index 125d17bf..2c54adcd 100644 --- a/Utils/_Ja25PolishText.h +++ b/Utils/_Ja25PolishText.h @@ -71,7 +71,11 @@ enum DC_TTI__DESERT_AND_URBAN, DC_TTI__DESERT_AND_SNOW, DC_TTI__URBAN_AND_SNOW, - DC_TTI__UNKNOWN + DC_TTI__UNKNOWN, + DC_MSG__COVER_INFORMATION_WITH_DETAILED_CAMO, + DC_TTI__DETAILED_SOUND, + DC_TTI__DETAILED_STEALTH, + DC_TTI__DETAILED_TRAP_LEVEL, }; extern STR16 gzDisplayCoverText[]; diff --git a/Utils/_Ja25RussianText.h b/Utils/_Ja25RussianText.h index 125d17bf..2c54adcd 100644 --- a/Utils/_Ja25RussianText.h +++ b/Utils/_Ja25RussianText.h @@ -71,7 +71,11 @@ enum DC_TTI__DESERT_AND_URBAN, DC_TTI__DESERT_AND_SNOW, DC_TTI__URBAN_AND_SNOW, - DC_TTI__UNKNOWN + DC_TTI__UNKNOWN, + DC_MSG__COVER_INFORMATION_WITH_DETAILED_CAMO, + DC_TTI__DETAILED_SOUND, + DC_TTI__DETAILED_STEALTH, + DC_TTI__DETAILED_TRAP_LEVEL, }; extern STR16 gzDisplayCoverText[]; diff --git a/Utils/_Ja25TaiwaneseText.cpp b/Utils/_Ja25TaiwaneseText.cpp index a72d1a8b..fac33b46 100644 --- a/Utils/_Ja25TaiwaneseText.cpp +++ b/Utils/_Ja25TaiwaneseText.cpp @@ -500,7 +500,11 @@ STR16 gzDisplayCoverText[]= L"Desert and Urban", L"Desert and Snow", L"Urban and Snow", - L"-" // yes empty for now + L"-", // yes empty for now + L"Cover: %d/100, Brightness: %d/100", + L"Footstep volume", + L"Stealth difficulty", + L"Trap level", };