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",