Merged New Inventory Project into main branch

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1871 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
lalien
2008-03-08 15:15:25 +00:00
parent e16d166277
commit 43ca24dda8
649 changed files with 93359 additions and 82507 deletions
+90 -85
View File
@@ -2,7 +2,7 @@
#include "Tactical All.h"
#else
#include "sgp.h"
#include "soldier control.h"
//#include "soldier control.h"
#include "soldier profile.h"
#include "drugs and alcohol.h"
#include "items.h"
@@ -15,6 +15,11 @@
#include "Interface.h"
#endif
//forward declarations of common classes to eliminate includes
class OBJECTTYPE;
class SOLDIERTYPE;
UINT8 ubDrugTravelRate[] = { 4, 2 };
UINT8 ubDrugWearoffRate[] = { 2, 2 };
UINT8 ubDrugEffect[] = { 15, 8 };
@@ -55,7 +60,7 @@ UINT8 GetDrugType( UINT16 usItem )
return( NO_DRUG );
}
BOOLEAN ApplyDrugs( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject )
{
UINT8 ubDrugType;
@@ -89,11 +94,11 @@ BOOLEAN ApplyDrugs( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject )
{
// Add effects
if ( ( pSoldier->bFutureDrugEffect[ ubDrugType ] + ubDrugEffect[ ubDrugType ] ) < 127 )
if ( ( pSoldier->drugs.bFutureDrugEffect[ ubDrugType ] + ubDrugEffect[ ubDrugType ] ) < 127 )
{
pSoldier->bFutureDrugEffect[ ubDrugType ] += ubDrugEffect[ ubDrugType ];
pSoldier->drugs.bFutureDrugEffect[ ubDrugType ] += ubDrugEffect[ ubDrugType ];
}
pSoldier->bDrugEffectRate[ ubDrugType ] = ubDrugTravelRate[ ubDrugType ];
pSoldier->drugs.bDrugEffectRate[ ubDrugType ] = ubDrugTravelRate[ ubDrugType ];
// Increment times used during lifetime...
// CAP!
@@ -106,17 +111,17 @@ BOOLEAN ApplyDrugs( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject )
}
// Reset once we sleep...
pSoldier->bTimesDrugUsedSinceSleep[ ubDrugType ]++;
pSoldier->drugs.bTimesDrugUsedSinceSleep[ ubDrugType ]++;
// Increment side effects..
if ( ( pSoldier->bDrugSideEffect[ ubDrugType ] + ubDrugSideEffect[ ubDrugType ] ) < 127 )
if ( ( pSoldier->drugs.bDrugSideEffect[ ubDrugType ] + ubDrugSideEffect[ ubDrugType ] ) < 127 )
{
pSoldier->bDrugSideEffect[ ubDrugType ] += ( ubDrugSideEffect[ ubDrugType ] );
pSoldier->drugs.bDrugSideEffect[ ubDrugType ] += ( ubDrugSideEffect[ ubDrugType ] );
}
// Stop side effects until were done....
pSoldier->bDrugSideEffectRate[ ubDrugType ] = 0;
pSoldier->drugs.bDrugSideEffectRate[ ubDrugType ] = 0;
if ( ubDrugType == DRUG_TYPE_ALCOHOL )
{
// ATE: use kit points...
@@ -138,37 +143,37 @@ BOOLEAN ApplyDrugs( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject )
else
{
// Remove the object....
DeleteObj( pObject );
pObject->RemoveObjectsFromStack(1);
// ATE: Make guy collapse from heart attack if too much stuff taken....
if ( pSoldier->bDrugSideEffectRate[ ubDrugType ] > ( ubDrugSideEffect[ ubDrugType ] * 3 ) )
if ( pSoldier->drugs.bDrugSideEffectRate[ ubDrugType ] > ( ubDrugSideEffect[ ubDrugType ] * 3 ) )
{
// Keel over...
DeductPoints( pSoldier, 0, 10000 );
// Permanently lower certain stats...
pSoldier->bWisdom -= 5;
pSoldier->bDexterity -= 5;
pSoldier->bStrength -= 5;
pSoldier->stats.bWisdom -= 5;
pSoldier->stats.bDexterity -= 5;
pSoldier->stats.bStrength -= 5;
if (pSoldier->bWisdom < 1)
pSoldier->bWisdom = 1;
if (pSoldier->bDexterity < 1)
pSoldier->bDexterity = 1;
if (pSoldier->bStrength < 1)
pSoldier->bStrength = 1;
if (pSoldier->stats.bWisdom < 1)
pSoldier->stats.bWisdom = 1;
if (pSoldier->stats.bDexterity < 1)
pSoldier->stats.bDexterity = 1;
if (pSoldier->stats.bStrength < 1)
pSoldier->stats.bStrength = 1;
// export stat changes to profile
gMercProfiles[ pSoldier->ubProfile ].bWisdom = pSoldier->bWisdom;
gMercProfiles[ pSoldier->ubProfile ].bDexterity = pSoldier->bDexterity;
gMercProfiles[ pSoldier->ubProfile ].bStrength = pSoldier->bStrength;
gMercProfiles[ pSoldier->ubProfile ].bWisdom = pSoldier->stats.bWisdom;
gMercProfiles[ pSoldier->ubProfile ].bDexterity = pSoldier->stats.bDexterity;
gMercProfiles[ pSoldier->ubProfile ].bStrength = pSoldier->stats.bStrength;
// make those stats RED for a while...
pSoldier->uiChangeWisdomTime = GetJA2Clock();
pSoldier->timeChanges.uiChangeWisdomTime = GetJA2Clock();
pSoldier->usValueGoneUp &= ~( WIS_INCREASE );
pSoldier->uiChangeDexterityTime = GetJA2Clock();
pSoldier->timeChanges.uiChangeDexterityTime = GetJA2Clock();
pSoldier->usValueGoneUp &= ~( DEX_INCREASE );
pSoldier->uiChangeStrengthTime = GetJA2Clock();
pSoldier->timeChanges.uiChangeStrengthTime = GetJA2Clock();
pSoldier->usValueGoneUp &= ~( STRENGTH_INCREASE );
}
}
@@ -178,17 +183,17 @@ BOOLEAN ApplyDrugs( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject )
if ( ubDrugType == DRUG_TYPE_REGENERATION )
{
// each use of a regen booster over 1, each day, reduces the effect
bRegenPointsGained = REGEN_POINTS_PER_BOOSTER * pObject->ItemData.Generic.bStatus[0] / 100;
bRegenPointsGained = REGEN_POINTS_PER_BOOSTER * (*pObject)[0]->data.objectStatus / 100;
// are there fractional %s left over?
if ( ( pObject->ItemData.Generic.bStatus[0] % (100 / REGEN_POINTS_PER_BOOSTER ) ) != 0 )
if ( ( (*pObject)[0]->data.objectStatus % (100 / REGEN_POINTS_PER_BOOSTER ) ) != 0 )
{
// chance of an extra point
if ( PreRandom( 100 / REGEN_POINTS_PER_BOOSTER ) < (UINT32) ( pObject->ItemData.Generic.bStatus[0] % (100 / REGEN_POINTS_PER_BOOSTER ) ) )
if ( PreRandom( 100 / REGEN_POINTS_PER_BOOSTER ) < (UINT32) ( (*pObject)[0]->data.objectStatus % (100 / REGEN_POINTS_PER_BOOSTER ) ) )
{
bRegenPointsGained++;
}
}
bRegenPointsGained -= pSoldier->bRegenBoostersUsedToday;
if (bRegenPointsGained > 0)
{
@@ -199,7 +204,7 @@ BOOLEAN ApplyDrugs( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject )
}
// remove object
DeleteObj( pObject );
pObject->RemoveObjectsFromStack(1);
}
if ( ubDrugType == DRUG_TYPE_ALCOHOL )
@@ -208,12 +213,12 @@ BOOLEAN ApplyDrugs( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject )
}
else
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_MERC_TOOK_DRUG ], pSoldier->name );
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_MERC_TOOK_DRUG ], pSoldier->name );
}
// Dirty panel
fInterfacePanelDirty = DIRTYLEVEL2;
// Dirty panel
fInterfacePanelDirty = DIRTYLEVEL2;
return( TRUE );
}
@@ -226,40 +231,40 @@ void HandleEndTurnDrugAdjustments( SOLDIERTYPE *pSoldier )
for ( cnt = 0; cnt < NUM_COMPLEX_DRUGS; cnt++ )
{
// If side effect aret is non-zero....
if ( pSoldier->bDrugSideEffectRate[ cnt ] > 0 )
{
if ( pSoldier->drugs.bDrugSideEffectRate[ cnt ] > 0 )
{
// Subtract some...
pSoldier->bDrugSideEffect[ cnt ] -= pSoldier->bDrugSideEffectRate[ cnt ];
pSoldier->drugs.bDrugSideEffect[ cnt ] -= pSoldier->drugs.bDrugSideEffectRate[ cnt ];
// If we're done, we're done!
if ( pSoldier->bDrugSideEffect[ cnt ] <= 0 )
if ( pSoldier->drugs.bDrugSideEffect[ cnt ] <= 0 )
{
pSoldier->bDrugSideEffect[ cnt ] = 0;
pSoldier->drugs.bDrugSideEffect[ cnt ] = 0;
fInterfacePanelDirty = DIRTYLEVEL1;
}
}
// IF drug rate is -ve, it's being worn off...
if ( pSoldier->bDrugEffectRate[ cnt ] < 0 )
if ( pSoldier->drugs.bDrugEffectRate[ cnt ] < 0 )
{
pSoldier->bDrugEffect[ cnt ] -= ( -1 * pSoldier->bDrugEffectRate[ cnt ] );
// Have we run out?
if ( pSoldier->bDrugEffect[ cnt ] <= 0 )
{
pSoldier->bDrugEffect[ cnt ] = 0;
pSoldier->drugs.bDrugEffect[ cnt ] -= ( -1 * pSoldier->drugs.bDrugEffectRate[ cnt ] );
// Dirty panel
fInterfacePanelDirty = DIRTYLEVEL2;
// Have we run out?
if ( pSoldier->drugs.bDrugEffect[ cnt ] <= 0 )
{
pSoldier->drugs.bDrugEffect[ cnt ] = 0;
// Dirty panel
fInterfacePanelDirty = DIRTYLEVEL2;
// Start the bad news!
pSoldier->bDrugSideEffectRate[ cnt ] = ubDrugSideEffectRate[ cnt ];
pSoldier->drugs.bDrugSideEffectRate[ cnt ] = ubDrugSideEffectRate[ cnt ];
// The drug rate is 0 now too
pSoldier->bDrugEffectRate[ cnt ] = 0;
pSoldier->drugs.bDrugEffectRate[ cnt ] = 0;
// Once for each 'level' of crash....
iNumLoops = ( pSoldier->bDrugSideEffect[ cnt ] / ubDrugSideEffect[ cnt ] ) + 1;
iNumLoops = ( pSoldier->drugs.bDrugSideEffect[ cnt ] / ubDrugSideEffect[ cnt ] ) + 1;
for ( cnt2 = 0; cnt2 < iNumLoops; cnt2++ )
{
@@ -270,28 +275,28 @@ void HandleEndTurnDrugAdjustments( SOLDIERTYPE *pSoldier )
}
else
{
HandleMoraleEvent( pSoldier, MORALE_DRUGS_CRASH, pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ );
HandleMoraleEvent( pSoldier, MORALE_DRUGS_CRASH, pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ );
}
}
}
}
// Add increase ineffect....
if ( pSoldier->bDrugEffectRate[ cnt ] > 0 )
{
if ( pSoldier->drugs.bDrugEffectRate[ cnt ] > 0 )
{
// Seap some in....
pSoldier->bFutureDrugEffect[ cnt ] -= pSoldier->bDrugEffectRate[ cnt ];
pSoldier->bDrugEffect[ cnt ] += pSoldier->bDrugEffectRate[ cnt ];
pSoldier->drugs.bFutureDrugEffect[ cnt ] -= pSoldier->drugs.bDrugEffectRate[ cnt ];
pSoldier->drugs.bDrugEffect[ cnt ] += pSoldier->drugs.bDrugEffectRate[ cnt ];
// Refresh morale w/ new drug value...
RefreshSoldierMorale( pSoldier );
// Check if we need to stop 'adding'
if ( pSoldier->bFutureDrugEffect[ cnt ] <= 0 )
if ( pSoldier->drugs.bFutureDrugEffect[ cnt ] <= 0 )
{
pSoldier->bFutureDrugEffect[ cnt ] = 0;
pSoldier->drugs.bFutureDrugEffect[ cnt ] = 0;
// Change rate to -ve..
pSoldier->bDrugEffectRate[ cnt ] = -ubDrugWearoffRate[ cnt ];
pSoldier->drugs.bDrugEffectRate[ cnt ] = -ubDrugWearoffRate[ cnt ];
}
}
}
@@ -301,16 +306,16 @@ void HandleEndTurnDrugAdjustments( SOLDIERTYPE *pSoldier )
// bBandaged = BANDAGED( pSoldier );
// increase life
pSoldier->bLife = __min( pSoldier->bLife + LIFE_GAIN_PER_REGEN_POINT, pSoldier->bLifeMax );
pSoldier->stats.bLife = __min( pSoldier->stats.bLife + LIFE_GAIN_PER_REGEN_POINT, pSoldier->stats.bLifeMax );
if ( pSoldier->bLife == pSoldier->bLifeMax )
if ( pSoldier->stats.bLife == pSoldier->stats.bLifeMax )
{
pSoldier->bBleeding = 0;
}
else if ( pSoldier->bBleeding + pSoldier->bLife > pSoldier->bLifeMax )
else if ( pSoldier->bBleeding + pSoldier->stats.bLife > pSoldier->stats.bLifeMax )
{
// got to reduce amount of bleeding
pSoldier->bBleeding = (pSoldier->bLifeMax - pSoldier->bLife);
pSoldier->bBleeding = (pSoldier->stats.bLifeMax - pSoldier->stats.bLife);
}
// decrement counter
@@ -318,40 +323,40 @@ void HandleEndTurnDrugAdjustments( SOLDIERTYPE *pSoldier )
}
}
INT8 GetDrugEffect( SOLDIERTYPE *pSoldier, UINT8 ubDrugType )
INT8 GetDrugEffect( SOLDIERTYPE *pSoldier, UINT8 ubDrugType )
{
return( pSoldier->bDrugEffect[ ubDrugType ] );
return( pSoldier->drugs.bDrugEffect[ ubDrugType ] );
}
INT8 GetDrugSideEffect( SOLDIERTYPE *pSoldier, UINT8 ubDrugType )
{
// If we have a o-positive effect
if ( pSoldier->bDrugEffect[ ubDrugType ] > 0 )
if ( pSoldier->drugs.bDrugEffect[ ubDrugType ] > 0 )
{
return( 0 );
}
else
{
return( pSoldier->bDrugSideEffect[ ubDrugType ] );
return( pSoldier->drugs.bDrugSideEffect[ ubDrugType ] );
}
}
void HandleAPEffectDueToDrugs( SOLDIERTYPE *pSoldier, UINT8 *pubPoints )
{
INT8 bDrunkLevel;
INT16 sPoints = (*pubPoints);
INT8 bDrunkLevel;
INT16 sPoints = (*pubPoints);
// Are we in a side effect or good effect?
if ( pSoldier->bDrugEffect[ DRUG_TYPE_ADRENALINE ] )
if ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ADRENALINE ] )
{
// Adjust!
sPoints += pSoldier->bDrugEffect[ DRUG_TYPE_ADRENALINE ];
sPoints += pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ADRENALINE ];
}
else if ( pSoldier->bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] )
else if ( pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] )
{
// Adjust!
sPoints -= pSoldier->bDrugSideEffect[ DRUG_TYPE_ADRENALINE ];
sPoints -= pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ADRENALINE ];
if ( sPoints < AP_MINIMUM )
{
@@ -372,7 +377,7 @@ void HandleAPEffectDueToDrugs( SOLDIERTYPE *pSoldier, UINT8 *pubPoints )
}
}
(*pubPoints) = (UINT8)sPoints;
(*pubPoints) = (UINT8)sPoints;
}
@@ -381,15 +386,15 @@ void HandleBPEffectDueToDrugs( SOLDIERTYPE *pSoldier, INT16 *psPointReduction )
INT8 bDrunkLevel;
// Are we in a side effect or good effect?
if ( pSoldier->bDrugEffect[ DRUG_TYPE_ADRENALINE ] )
if ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ADRENALINE ] )
{
// Adjust!
(*psPointReduction) -= ( pSoldier->bDrugEffect[ DRUG_TYPE_ADRENALINE ] * BP_RATIO_RED_PTS_TO_NORMAL );
(*psPointReduction) -= ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ADRENALINE ] * BP_RATIO_RED_PTS_TO_NORMAL );
}
else if ( pSoldier->bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] )
else if ( pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] )
{
// Adjust!
(*psPointReduction) += ( pSoldier->bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] * BP_RATIO_RED_PTS_TO_NORMAL );
(*psPointReduction) += ( pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] * BP_RATIO_RED_PTS_TO_NORMAL );
}
bDrunkLevel = GetDrunkLevel( pSoldier );
@@ -407,18 +412,18 @@ INT8 GetDrunkLevel( SOLDIERTYPE *pSoldier )
INT8 bNumDrinks;
// If we have a -ve effect ...
if ( pSoldier->bDrugEffect[ DRUG_TYPE_ALCOHOL ] == 0 && pSoldier->bDrugSideEffect[ DRUG_TYPE_ALCOHOL ] == 0 )
if ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ALCOHOL ] == 0 && pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ALCOHOL ] == 0 )
{
return( SOBER );
}
if ( pSoldier->bDrugEffect[ DRUG_TYPE_ALCOHOL ] == 0 && pSoldier->bDrugSideEffect[ DRUG_TYPE_ALCOHOL ] != 0 )
if ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ALCOHOL ] == 0 && pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ALCOHOL ] != 0 )
{
return( HUNGOVER );
}
// Calculate how many dinks we have had....
bNumDrinks = ( pSoldier->bDrugEffect[ DRUG_TYPE_ALCOHOL ] / ubDrugEffect[ DRUG_TYPE_ALCOHOL ] );
bNumDrinks = ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ALCOHOL ] / ubDrugEffect[ DRUG_TYPE_ALCOHOL ] );
if ( bNumDrinks <= 3 )
{
@@ -444,11 +449,11 @@ INT32 EffectStatForBeingDrunk( SOLDIERTYPE *pSoldier, INT32 iStat )
BOOLEAN MercUnderTheInfluence( SOLDIERTYPE *pSoldier )
{
// Are we in a side effect or good effect?
if ( pSoldier->bDrugEffect[ DRUG_TYPE_ADRENALINE ] )
if ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ADRENALINE ] )
{
return( TRUE );
}
else if ( pSoldier->bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] )
else if ( pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] )
{
return( TRUE );
}