From 2cef09b50b1cb4dbdb227094c6038cae34e6a632 Mon Sep 17 00:00:00 2001 From: Flugente Date: Tue, 24 Jul 2012 22:26:13 +0000 Subject: [PATCH] fixed bugs when handling items that are both food and drug git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5419 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Drugs And Alcohol.cpp | 6 +++++- Tactical/Food.cpp | 12 ++++++++++-- Tactical/Interface Panels.cpp | 4 ++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Tactical/Drugs And Alcohol.cpp b/Tactical/Drugs And Alcohol.cpp index 743c64f8..7cdb6d92 100644 --- a/Tactical/Drugs And Alcohol.cpp +++ b/Tactical/Drugs And Alcohol.cpp @@ -13,6 +13,7 @@ #include "Random.h" #include "Text.h" #include "Interface.h" +#include "Food.h" // added by Flugente #endif //forward declarations of common classes to eliminate includes @@ -71,7 +72,7 @@ BOOLEAN ApplyDrugs( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject ) UINT32 foodtype = Item[pObject->usItem].foodtype; // if not a food item, nothing to see here - if ( foodtype > 0 ) + if ( gGameOptions.fFoodSystem && foodtype > 0 ) consumeitem = FALSE; // set flag: we are on drugs @@ -254,6 +255,9 @@ BOOLEAN ApplyDrugs( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject ) // Dirty panel fInterfacePanelDirty = DIRTYLEVEL2; + if ( !consumeitem ) + ApplyFood( pSoldier, pObject ); + return( TRUE ); } diff --git a/Tactical/Food.cpp b/Tactical/Food.cpp index 784dd290..38e82492 100644 --- a/Tactical/Food.cpp +++ b/Tactical/Food.cpp @@ -502,7 +502,11 @@ void HourlyFoodAutoDigestion( SOLDIERTYPE *pSoldier ) { while ( (*pObj)[0]->data.objectStatus > 1 ) { - ApplyFood( pSoldier, pObj ); + // if food is also a drug, ApplyDrugs will also call ApplyFood + if ( Item[pObj->usItem].drugtype > 0 ) + ApplyDrugs( pSoldier, pObj ); + else + ApplyFood( pSoldier, pObj ); // if we're full, finish if ( pSoldier->bFoodLevel > FoodMoraleMods[FOOD_MERC_START_CONSUME].bThreshold && pSoldier->bDrinkLevel > FoodMoraleMods[FOOD_MERC_START_CONSUME].bThreshold ) @@ -530,7 +534,11 @@ void HourlyFoodAutoDigestion( SOLDIERTYPE *pSoldier ) { while ( (*pObj)[0]->data.objectStatus > 1 ) { - ApplyFood( pSoldier, pObj ); + // if food is also a drug, ApplyDrugs will also call ApplyFood + if ( Item[pObj->usItem].drugtype > 0 ) + ApplyDrugs( pSoldier, pObj ); + else + ApplyFood( pSoldier, pObj ); // if we're full, finish if ( pSoldier->bFoodLevel > FoodMoraleMods[FOOD_MERC_START_CONSUME].bThreshold && pSoldier->bDrinkLevel > FoodMoraleMods[FOOD_MERC_START_CONSUME].bThreshold ) diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index 90ccc312..b02aaeed 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -3315,7 +3315,7 @@ void SMInvClickCamoCallback( MOUSE_REGION * pRegion, INT32 iReason ) gpSMCurrentMerc->DoMercBattleSound( BATTLE_SOUND_COOL1 ); } } - else if ( gGameOptions.fFoodSystem && ApplyDrugs( gpSMCurrentMerc, gpItemPointer ) ) + else if ( ApplyDrugs( gpSMCurrentMerc, gpItemPointer ) ) { // Dirty fInterfacePanelDirty = DIRTYLEVEL2; @@ -3342,7 +3342,7 @@ void SMInvClickCamoCallback( MOUSE_REGION * pRegion, INT32 iReason ) gpSMCurrentMerc->DoMercBattleSound( BATTLE_SOUND_COOL1 ); } - else if ( ApplyFood( gpSMCurrentMerc, gpItemPointer ) ) + else if ( gGameOptions.fFoodSystem && ApplyFood( gpSMCurrentMerc, gpItemPointer ) ) { // Dirty fInterfacePanelDirty = DIRTYLEVEL2;