The effects of lack of food are now displayed in strategic when hovering over the life bar of a merc.

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7858 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2015-05-12 18:28:36 +00:00
parent 230c5f5d88
commit 33e5443cb7
14 changed files with 233 additions and 83 deletions
+15 -41
View File
@@ -2017,53 +2017,27 @@ void UpdateCharRegionHelpText( void )
{
// person (health/energy/morale)
GetMoraleString( pSoldier, pMoraleStr );
if ( gGameOptions.fFoodSystem )
if ( pSoldier->bPoisonSum )
{
if ( pSoldier->bPoisonSum )
{
INT8 bPoisonBandaged = pSoldier->bPoisonSum - pSoldier->bPoisonBleeding - pSoldier->bPoisonLife;
swprintf( sString, L"%s: %d/%d, %s: %d/%d/%d - %d, %s: %d/%d, %s: %s, %s: %d%s, %s: %d%s",
pMapScreenStatusStrings[ 0 ], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[ 5 ], pSoldier->bPoisonBleeding, bPoisonBandaged, pSoldier->bPoisonLife, pSoldier->bPoisonSum,
pMapScreenStatusStrings[ 1 ], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[ 2 ], pMoraleStr,
pMapScreenStatusStrings[ 6 ], (INT32)(100*(pSoldier->bDrinkLevel - FOOD_MIN) / FOOD_HALF_RANGE), sSpecialCharacters[0],
pMapScreenStatusStrings[ 7 ], (INT32)(100*(pSoldier->bFoodLevel - FOOD_MIN) / FOOD_HALF_RANGE), sSpecialCharacters[0] );
}
else
{
swprintf( sString, L"%s: %d/%d, %s: %d/%d, %s: %s, %s: %d%s, %s: %d%s",
pMapScreenStatusStrings[ 0 ], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[ 1 ], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[ 2 ], pMoraleStr,
pMapScreenStatusStrings[ 6 ], (INT32)(100*(pSoldier->bDrinkLevel - FOOD_MIN) / FOOD_HALF_RANGE), sSpecialCharacters[0],
pMapScreenStatusStrings[ 7 ], (INT32)(100*(pSoldier->bFoodLevel - FOOD_MIN) / FOOD_HALF_RANGE), sSpecialCharacters[0] );
}
INT8 bPoisonBandaged = pSoldier->bPoisonSum - pSoldier->bPoisonBleeding - pSoldier->bPoisonLife;
swprintf( sString, L"%s: %d/%d, %s: %d/%d/%d - %d, %s: %d/%d, %s: %s",
pMapScreenStatusStrings[ 0 ], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[ 5 ], pSoldier->bPoisonBleeding, bPoisonBandaged, pSoldier->bPoisonLife, pSoldier->bPoisonSum,
pMapScreenStatusStrings[ 1 ], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[ 2 ], pMoraleStr );
}
else
{
if ( pSoldier->bPoisonSum )
{
INT8 bPoisonBandaged = pSoldier->bPoisonSum - pSoldier->bPoisonBleeding - pSoldier->bPoisonLife;
swprintf( sString, L"%s: %d/%d, %s: %d/%d/%d - %d, %s: %d/%d, %s: %s",
pMapScreenStatusStrings[ 0 ], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[ 5 ], pSoldier->bPoisonBleeding, bPoisonBandaged, pSoldier->bPoisonLife, pSoldier->bPoisonSum,
pMapScreenStatusStrings[ 1 ], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[ 2 ], pMoraleStr );
}
else
{
swprintf( sString, L"%s: %d/%d, %s: %d/%d, %s: %s",
pMapScreenStatusStrings[ 0 ], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[ 1 ], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[ 2 ], pMoraleStr );
}
swprintf( sString, L"%s: %d/%d, %s: %d/%d, %s: %s",
pMapScreenStatusStrings[ 0 ], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[ 1 ], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[ 2 ], pMoraleStr );
}
pSoldier->PrintFoodDesc( sString, TRUE );
{
pSoldier->PrintDiseaseDesc( sString, TRUE );
}
pSoldier->PrintDiseaseDesc( sString, TRUE );
}
}
else
+2 -2
View File
@@ -295,10 +295,10 @@ void GetFoodSituation( SOLDIERTYPE *pSoldier, UINT8* pFoodSituation, UINT8* pWat
for ( UINT8 i = FOOD_STUFFED; i < NUM_FOOD_MORALE_TYPES; ++i )
{
if ( pSoldier->bFoodLevel < FoodMoraleMods[i].bThreshold )
if ( pSoldier->bFoodLevel <= FoodMoraleMods[i].bThreshold )
*pFoodSituation = i;
if ( pSoldier->bDrinkLevel < FoodMoraleMods[i].bThreshold )
if ( pSoldier->bDrinkLevel <= FoodMoraleMods[i].bThreshold )
*pWaterSituation = i;
}
}
+14 -40
View File
@@ -14486,52 +14486,26 @@ void UpdateMercBodyRegionHelpText( )
// person (health/energy/morale)
GetMoraleString( pSoldier, pMoraleStr );
if ( gGameOptions.fFoodSystem )
if ( pSoldier->bPoisonSum )
{
if ( pSoldier->bPoisonSum )
{
INT8 bPoisonBandaged = pSoldier->bPoisonSum - pSoldier->bPoisonBleeding - pSoldier->bPoisonLife;
swprintf( sString, L"%s: %d/%d, %s: %d/%d/%d - %d, %s: %d/%d, %s: %s, %s: %d%s, %s: %d%s",
pMapScreenStatusStrings[0], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[5], pSoldier->bPoisonBleeding, bPoisonBandaged, pSoldier->bPoisonLife, pSoldier->bPoisonSum,
pMapScreenStatusStrings[1], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[2], pMoraleStr,
pMapScreenStatusStrings[6], (INT32)(100 * (pSoldier->bDrinkLevel - FOOD_MIN) / FOOD_HALF_RANGE), sSpecialCharacters[0],
pMapScreenStatusStrings[7], (INT32)(100 * (pSoldier->bFoodLevel - FOOD_MIN) / FOOD_HALF_RANGE), sSpecialCharacters[0] );
}
else
{
swprintf( sString, L"%s: %d/%d, %s: %d/%d, %s: %s, %s: %d%s, %s: %d%s",
pMapScreenStatusStrings[0], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[1], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[2], pMoraleStr,
pMapScreenStatusStrings[6], (INT32)(100 * (pSoldier->bDrinkLevel - FOOD_MIN) / FOOD_HALF_RANGE), sSpecialCharacters[0],
pMapScreenStatusStrings[7], (INT32)(100 * (pSoldier->bFoodLevel - FOOD_MIN) / FOOD_HALF_RANGE), sSpecialCharacters[0] );
}
INT8 bPoisonBandaged = pSoldier->bPoisonSum - pSoldier->bPoisonBleeding - pSoldier->bPoisonLife;
swprintf( sString, L"%s: %d/%d, %s: %d/%d/%d - %d, %s: %d/%d, %s: %s",
pMapScreenStatusStrings[0], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[5], pSoldier->bPoisonBleeding, bPoisonBandaged, pSoldier->bPoisonLife, pSoldier->bPoisonSum,
pMapScreenStatusStrings[1], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[2], pMoraleStr );
}
else
{
if ( pSoldier->bPoisonSum )
{
INT8 bPoisonBandaged = pSoldier->bPoisonSum - pSoldier->bPoisonBleeding - pSoldier->bPoisonLife;
swprintf( sString, L"%s: %d/%d, %s: %d/%d/%d - %d, %s: %d/%d, %s: %s",
pMapScreenStatusStrings[0], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[5], pSoldier->bPoisonBleeding, bPoisonBandaged, pSoldier->bPoisonLife, pSoldier->bPoisonSum,
pMapScreenStatusStrings[1], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[2], pMoraleStr );
}
else
{
swprintf( sString, L"%s: %d/%d, %s: %d/%d, %s: %s",
pMapScreenStatusStrings[0], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[1], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[2], pMoraleStr );
}
swprintf( sString, L"%s: %d/%d, %s: %d/%d, %s: %s",
pMapScreenStatusStrings[0], pSoldier->stats.bLife, pSoldier->stats.bLifeMax,
pMapScreenStatusStrings[1], pSoldier->bBreath, pSoldier->bBreathMax,
pMapScreenStatusStrings[2], pMoraleStr );
}
{
pSoldier->PrintDiseaseDesc( sString, TRUE );
}
pSoldier->PrintFoodDesc( sString, TRUE );
pSoldier->PrintDiseaseDesc( sString, TRUE );
}
}
}
+104
View File
@@ -18904,6 +18904,110 @@ void SOLDIERTYPE::PrintDiseaseDesc( CHAR16* apStr, BOOLEAN fFullDesc )
}
}
void SOLDIERTYPE::PrintFoodDesc( CHAR16* apStr, BOOLEAN fFullDesc )
{
if ( !gGameOptions.fFoodSystem )
return;
// only for living mercs with a profile with a valid infection method
if ( this->flags.uiStatusFlags & SOLDIER_VEHICLE || this->ubProfile == NO_PROFILE )
return;
CHAR16 atStr[500];
swprintf( atStr, L"" );
UINT8 foodsituation;
UINT8 watersituation;
GetFoodSituation( this, &foodsituation, &watersituation );
INT8 bMoraleModifier_Food = FoodMoraleMods[foodsituation].bMoraleModifier;
INT8 bMoraleModifier_Water = FoodMoraleMods[watersituation].bMoraleModifier;
INT8 bSleepModifier_Food = FoodMoraleMods[foodsituation].bSleepModifier;
INT8 bSleepModifier_Water = FoodMoraleMods[watersituation].bSleepModifier;
INT8 bBreathRegenModifier_Food = FoodMoraleMods[foodsituation].bBreathRegenModifier;
INT8 bBreathRegenModifier_Water = FoodMoraleMods[watersituation].bBreathRegenModifier;
INT8 bAssignmentEfficiencyModifier_Food = FoodMoraleMods[foodsituation].bAssignmentEfficiencyModifier;
INT8 bAssignmentEfficiencyModifier_Water = FoodMoraleMods[watersituation].bAssignmentEfficiencyModifier;
UINT8 ubStatDamageChance_Food = FoodMoraleMods[foodsituation].ubStatDamageChance;
UINT8 ubStatDamageChance_Water = FoodMoraleMods[watersituation].ubStatDamageChance;
swprintf( atStr, szFoodText[0], (INT32)(100 * (this->bDrinkLevel - FOOD_MIN) / FOOD_HALF_RANGE) );
wcscat( apStr, atStr );
if ( watersituation != FOOD_NORMAL )
{
if ( bMoraleModifier_Water )
{
swprintf( atStr, szFoodText[2], bMoraleModifier_Water > 0 ? L"+" : L"", bMoraleModifier_Water );
wcscat( apStr, atStr );
}
if ( bSleepModifier_Water )
{
swprintf( atStr, szFoodText[3], bSleepModifier_Water > 0 ? L"+" : L"", bSleepModifier_Water );
wcscat( apStr, atStr );
}
if ( bBreathRegenModifier_Water )
{
swprintf( atStr, szFoodText[4], bBreathRegenModifier_Water > 0 ? L"+" : L"", bBreathRegenModifier_Water );
wcscat( apStr, atStr );
}
if ( bAssignmentEfficiencyModifier_Water )
{
swprintf( atStr, szFoodText[5], bAssignmentEfficiencyModifier_Water > 0 ? L"+" : L"", bAssignmentEfficiencyModifier_Water );
wcscat( apStr, atStr );
}
if ( ubStatDamageChance_Water )
{
swprintf( atStr, szFoodText[6], ubStatDamageChance_Water > 0 ? L"+" : L"", ubStatDamageChance_Water );
wcscat( apStr, atStr );
}
}
swprintf( atStr, szFoodText[1], (INT32)(100 * (this->bFoodLevel - FOOD_MIN) / FOOD_HALF_RANGE) );
wcscat( apStr, atStr );
if ( foodsituation != FOOD_NORMAL )
{
if ( bMoraleModifier_Food )
{
swprintf( atStr, szFoodText[2], bMoraleModifier_Food > 0 ? L"+" : L"", bMoraleModifier_Food );
wcscat( apStr, atStr );
}
if ( bSleepModifier_Food )
{
swprintf( atStr, szFoodText[3], bSleepModifier_Food > 0 ? L"+" : L"", bSleepModifier_Food );
wcscat( apStr, atStr );
}
if ( bBreathRegenModifier_Food )
{
swprintf( atStr, szFoodText[4], bBreathRegenModifier_Food > 0 ? L"+" : L"", bBreathRegenModifier_Food );
wcscat( apStr, atStr );
}
if ( bAssignmentEfficiencyModifier_Food )
{
swprintf( atStr, szFoodText[5], bAssignmentEfficiencyModifier_Food > 0 ? L"+" : L"", bAssignmentEfficiencyModifier_Food );
wcscat( apStr, atStr );
}
if ( ubStatDamageChance_Food )
{
swprintf( atStr, szFoodText[6], ubStatDamageChance_Food > 0 ? L"+" : L"", ubStatDamageChance_Food );
wcscat( apStr, atStr );
}
}
}
// get percentage protection from infections via contact
FLOAT SOLDIERTYPE::GetDiseaseContactProtection( )
{
+1
View File
@@ -1879,6 +1879,7 @@ public:
BOOLEAN HasDisease(BOOLEAN fDiagnosedOnly, BOOLEAN fHealableOnly, BOOLEAN fSymbolOnly = FALSE);
FLOAT GetDiseaseMagnitude( UINT8 aDisease ); // get the magnitude os a disease we might have, used to determine wether there are any effects
void PrintDiseaseDesc( CHAR16* apStr, BOOLEAN fFullDesc = FALSE );
void PrintFoodDesc( CHAR16* apStr, BOOLEAN fFullDesc = FALSE );
FLOAT GetDiseaseContactProtection(); // get percentage protection from infections via contact
INT16 GetDiseaseResistance();
+1
View File
@@ -2905,6 +2905,7 @@ enum
};
extern STR16 szDiseaseText[];
extern STR16 szFoodText[];
extern STR16 szIMPGearWebSiteText[];
extern STR16 szIMPGearDropDownText[];
+12
View File
@@ -10086,6 +10086,18 @@ STR16 szDiseaseText[] =
L"Cancel",
};
STR16 szFoodText[] =
{
L"\n\n|W|a|t|e|r: %d%%\n",
L"\n\n|F|o|o|d: %d%%\n",
L"max morale altered by %s%d\n",
L" %s%d need for sleep\n",
L" %s%d%% breath regeneration\n",
L" %s%d%% assignment efficiency\n",
L" %s%d%% chance to lose stats\n",
};
STR16 szIMPGearWebSiteText[] = // TODO.Translate
{
// IMP Gear Entrance
+12
View File
@@ -10097,6 +10097,18 @@ STR16 szDiseaseText[] =
L"Cancel",
};
STR16 szFoodText[] =
{
L"\n\n|W|a|t|e|r: %d%%\n",
L"\n\n|F|o|o|d: %d%%\n",
L"max morale altered by %s%d\n",
L" %s%d need for sleep\n",
L" %s%d%% breath regeneration\n",
L" %s%d%% assignment efficiency\n",
L" %s%d%% chance to lose stats\n",
};
STR16 szIMPGearWebSiteText[] = // TODO.Translate
{
// IMP Gear Entrance
+12
View File
@@ -10135,6 +10135,18 @@ STR16 szDiseaseText[] =
L"Cancel",
};
STR16 szFoodText[] =
{
L"\n\n|W|a|t|e|r: %d%%\n",
L"\n\n|F|o|o|d: %d%%\n",
L"max morale altered by %s%d\n",
L" %s%d need for sleep\n",
L" %s%d%% breath regeneration\n",
L" %s%d%% assignment efficiency\n",
L" %s%d%% chance to lose stats\n",
};
STR16 szIMPGearWebSiteText[] =
{
// IMP Gear Entrance
+12
View File
@@ -10083,6 +10083,18 @@ STR16 szDiseaseText[] =
L"Cancel",
};
STR16 szFoodText[] =
{
L"\n\n|W|a|t|e|r: %d%%\n",
L"\n\n|F|o|o|d: %d%%\n",
L"max morale altered by %s%d\n",
L" %s%d need for sleep\n",
L" %s%d%% breath regeneration\n",
L" %s%d%% assignment efficiency\n",
L" %s%d%% chance to lose stats\n",
};
STR16 szIMPGearWebSiteText[] = // TODO.Translate
{
// IMP Gear Entrance
+12
View File
@@ -9914,6 +9914,18 @@ STR16 szDiseaseText[] =
L"Cancel",
};
STR16 szFoodText[] =
{
L"\n\n|W|a|t|e|r: %d%%\n",
L"\n\n|F|o|o|d: %d%%\n",
L"max morale altered by %s%d\n",
L" %s%d need for sleep\n",
L" %s%d%% breath regeneration\n",
L" %s%d%% assignment efficiency\n",
L" %s%d%% chance to lose stats\n",
};
STR16 szIMPGearWebSiteText[] = // TODO.Translate
{
// IMP Gear Entrance
+12
View File
@@ -10092,6 +10092,18 @@ STR16 szDiseaseText[] =
L"Cancel",
};
STR16 szFoodText[] =
{
L"\n\n|W|a|t|e|r: %d%%\n",
L"\n\n|F|o|o|d: %d%%\n",
L"max morale altered by %s%d\n",
L" %s%d need for sleep\n",
L" %s%d%% breath regeneration\n",
L" %s%d%% assignment efficiency\n",
L" %s%d%% chance to lose stats\n",
};
STR16 szIMPGearWebSiteText[] = // TODO.Translate
{
// IMP Gear Entrance
+12
View File
@@ -10109,6 +10109,18 @@ STR16 szDiseaseText[] =
L"Cancel",
};
STR16 szFoodText[] =
{
L"\n\n|W|a|t|e|r: %d%%\n",
L"\n\n|F|o|o|d: %d%%\n",
L"max morale altered by %s%d\n",
L" %s%d need for sleep\n",
L" %s%d%% breath regeneration\n",
L" %s%d%% assignment efficiency\n",
L" %s%d%% chance to lose stats\n",
};
STR16 szIMPGearWebSiteText[] = // TODO.Translate
{
// IMP Gear Entrance
+12
View File
@@ -10082,6 +10082,18 @@ STR16 szDiseaseText[] =
L"Cancel",
};
STR16 szFoodText[] =
{
L"\n\n|W|a|t|e|r: %d%%\n",
L"\n\n|F|o|o|d: %d%%\n",
L"max morale altered by %s%d\n",
L" %s%d need for sleep\n",
L" %s%d%% breath regeneration\n",
L" %s%d%% assignment efficiency\n",
L" %s%d%% chance to lose stats\n",
};
STR16 szIMPGearWebSiteText[] = // TODO.Translate
{
// IMP Gear Entrance