diff --git a/GameSettings.cpp b/GameSettings.cpp index 6adeece98..8641188b7 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -535,6 +535,8 @@ void LoadGameExternalOptions() // Kaiden: Vehicle Inventory change - Added INI file Option VEHICLE_INVENTORY gGameExternalOptions.fVehicleInventory = iniReader.ReadBoolean("JA2 Gameplay Settings", "VEHICLE_INVENTORY", TRUE); + gGameExternalOptions.fEnableArmorCoverage = iniReader.ReadBoolean("JA2 Tactical Settings", "ENABLE_ARMOR_COVERAGE", FALSE); // ShadoWarrior for Captain J's armor coverage + // ShadoWarrior: Tooltip changes (start) gGameExternalOptions.ubSoldierTooltipDetailLevel = iniReader.ReadInteger("JA2 Tactical Settings", "SOLDIER_TOOLTIP_DETAIL_LEVEL", 1); diff --git a/GameSettings.h b/GameSettings.h index c5a615ebf..467535435 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -348,6 +348,8 @@ typedef struct BOOLEAN fEnableAllWeaponCaches; BOOLEAN fEnableAllTerrorists; + BOOLEAN fEnableArmorCoverage; // ShadoWarrior for Captain J's armor coverage + // ShadoWarrior: Tooltip changes (start) UINT8 ubSoldierTooltipDetailLevel; diff --git a/GameVersion.cpp b/GameVersion.cpp index a9a80df3a..9be15a91b 100644 --- a/GameVersion.cpp +++ b/GameVersion.cpp @@ -23,7 +23,7 @@ INT16 zVersionLabel[256] = { L"Beta v. 0.98" }; #else //RELEASE BUILD VERSION - INT16 zVersionLabel[256] = { L"Release v1.13.564" }; + INT16 zVersionLabel[256] = { L"Release v1.13.568" }; #endif diff --git a/JA2.suo b/JA2.suo index b7aab64ee..50a5ed8c8 100644 Binary files a/JA2.suo and b/JA2.suo differ diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index eb52f3a76..073fafc67 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -991,6 +991,7 @@ INT32 ArmourPercent( SOLDIERTYPE * pSoldier ) } else { + iVest = 65 * iVest / ( Armour[ Item[ SPECTRA_VEST_18 ].ubClassIndex ].ubProtection + Armour[ Item[ CERAMIC_PLATES ].ubClassIndex ].ubProtection ); } } else @@ -1003,6 +1004,7 @@ INT32 ArmourPercent( SOLDIERTYPE * pSoldier ) iHelmet = EffectiveArmour( &(pSoldier->inv[HELMETPOS]) ); iDivideValue = ( Armour[ Item[ SPECTRA_HELMET_18 ].ubClassIndex ].ubProtection * Armour[ Item[ SPECTRA_HELMET_18 ].ubClassIndex ].ubCoverage ); + // WANNE: Just to be on the save side if (iDivideValue > 0) { // convert to % of best; ignoring bug-treated stuff @@ -1010,6 +1012,7 @@ INT32 ArmourPercent( SOLDIERTYPE * pSoldier ) } else { + iHelmet = 15 * iHelmet / Armour[ Item[ SPECTRA_HELMET_18 ].ubClassIndex ].ubProtection; } } else @@ -1022,6 +1025,7 @@ INT32 ArmourPercent( SOLDIERTYPE * pSoldier ) iLeg = EffectiveArmour( &(pSoldier->inv[LEGPOS]) ); iDivideValue = ( Armour[ Item[ SPECTRA_LEGGINGS_18 ].ubClassIndex ].ubProtection * Armour[ Item[ SPECTRA_LEGGINGS_18 ].ubClassIndex ].ubCoverage ); + // WANNE: Just to be on the save side if (iDivideValue > 0) { // convert to % of best; ignoring bug-treated stuff @@ -1029,6 +1033,7 @@ INT32 ArmourPercent( SOLDIERTYPE * pSoldier ) } else { + iLeg = 25 * iLeg / Armour[ Item[ SPECTRA_LEGGINGS_18 ].ubClassIndex ].ubProtection; } } else diff --git a/Tactical/Weapons.h b/Tactical/Weapons.h index 8b9de72ff..13bd4d6e7 100644 --- a/Tactical/Weapons.h +++ b/Tactical/Weapons.h @@ -286,6 +286,7 @@ typedef struct { UINT8 ubArmourClass; UINT16 ubProtection; + UINT8 ubCoverage; // Captain J UINT8 ubDegradePercent; UINT32 uiIndex; } ARMOURTYPE; diff --git a/Tactical/XML_Armour.cpp b/Tactical/XML_Armour.cpp index f4c0fe586..5b95ee9e1 100644 --- a/Tactical/XML_Armour.cpp +++ b/Tactical/XML_Armour.cpp @@ -86,6 +86,7 @@ armourStartElementHandle(void *userData, const char *name, const char **atts) (strcmp(name, "uiIndex") == 0 || strcmp(name, "ubArmourClass") == 0 || strcmp(name, "ubProtection") == 0 || + strcmp(name, "ubCoverage") == 0 || strcmp(name, "ubDegradePercent") == 0 )) { pData->curElement = ELEMENT_PROPERTY; @@ -148,6 +149,14 @@ armourEndElementHandle(void *userData, const char *name) pData->curElement = ELEMENT; pData->curArmour.ubProtection = (UINT8) atol(pData->szCharData); } + else if(strcmp(name, "ubCoverage") == 0) + { + pData->curElement = ELEMENT; + if ( gGameExternalOptions.fEnableArmorCoverage ) + pData->curArmour.ubCoverage = (UINT8) atol(pData->szCharData); + else + pData->curArmour.ubCoverage = 100; + } else if(strcmp(name, "ubDegradePercent") == 0) { pData->curElement = ELEMENT; @@ -248,6 +257,7 @@ BOOLEAN WriteArmourStats() FilePrintf(hFile,"\t\t%d\r\n", cnt ); FilePrintf(hFile,"\t\t%d\r\n", Armour[cnt].ubArmourClass ); FilePrintf(hFile,"\t\t%d\r\n", Armour[cnt].ubProtection ); + FilePrintf(hFile,"\t\t%d\r\n", Armour[cnt].ubCoverage ); FilePrintf(hFile,"\t\t%d\r\n", Armour[cnt].ubDegradePercent ); FilePrintf(hFile,"\t\r\n"); diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index a228be8b0..0621f7043 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -288,8 +288,8 @@ UINT16 Message[][STRING_LENGTH] = L"Wenn Sie zu Skyriders Heli wollen, müssen Sie Söldner einem FAHRZEUG/HELIKOPTER ZUWEISEN.", L"%s hat nur Zeit, EINE Waffe zu laden", L"Spielzug Bloodcats", - L"automatisch", - L"nicht komplett automatisch", + L"Dauerfeuer", + L"kein Dauerfeuer", L"genau", L"ungenau", L"kein Einzelschuss",