mirror of
https://github.com/1dot13/source.git
synced 2026-08-05 14:00:23 +02:00
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:
+58
-54
@@ -10,7 +10,7 @@
|
||||
#include "debug.h"
|
||||
#include "MemMan.h"
|
||||
#include "Overhead Types.h"
|
||||
#include "Soldier Control.h"
|
||||
|
||||
#include "random.h"
|
||||
#include "campaign.h"
|
||||
#include "dialogue control.h"
|
||||
@@ -40,6 +40,11 @@
|
||||
#include "email.h"
|
||||
|
||||
|
||||
//forward declarations of common classes to eliminate includes
|
||||
class OBJECTTYPE;
|
||||
class SOLDIERTYPE;
|
||||
|
||||
|
||||
extern UINT8 gbPlayerNum;
|
||||
|
||||
|
||||
@@ -77,7 +82,7 @@ void StatChange(SOLDIERTYPE *pSoldier, UINT8 ubStat, UINT16 usNumChances, UINT8
|
||||
{
|
||||
if (pSoldier == NULL || pSoldier->bActive == FALSE)
|
||||
return; // THIS SHOULD NEVER HAPPEN
|
||||
|
||||
|
||||
Assert(pSoldier != NULL);
|
||||
Assert(pSoldier->bActive);
|
||||
|
||||
@@ -90,7 +95,7 @@ void StatChange(SOLDIERTYPE *pSoldier, UINT8 ubStat, UINT16 usNumChances, UINT8
|
||||
return;
|
||||
|
||||
// ignore vehicles and robots
|
||||
if( ( pSoldier->uiStatusFlags & SOLDIER_VEHICLE ) || ( pSoldier->uiStatusFlags & SOLDIER_ROBOT ) )
|
||||
if( ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) || ( pSoldier->flags.uiStatusFlags & SOLDIER_ROBOT ) )
|
||||
return;
|
||||
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
@@ -100,7 +105,7 @@ void StatChange(SOLDIERTYPE *pSoldier, UINT8 ubStat, UINT16 usNumChances, UINT8
|
||||
}
|
||||
|
||||
// no points earned while somebody is unconscious (for assist XPs, and such)
|
||||
if ( pSoldier->bLife < CONSCIOUSNESS )
|
||||
if ( pSoldier->stats.bLife < CONSCIOUSNESS )
|
||||
return;
|
||||
|
||||
|
||||
@@ -390,7 +395,7 @@ void ProcessStatChange(MERCPROFILESTRUCT *pProfile, UINT8 ubStat, UINT16 usNumCh
|
||||
// all other stat changes count towards experience level changes (1 for 1 basis)
|
||||
pProfile->sExpLevelGain--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -431,7 +436,7 @@ void ProfileUpdateStats( MERCPROFILESTRUCT *pProfile )
|
||||
void ChangeStat( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubStat, INT16 sPtsChanged )
|
||||
{
|
||||
// this function changes the stat a given amount...
|
||||
INT16 *psStatGainPtr = NULL;
|
||||
INT16 *psStatGainPtr = NULL;
|
||||
INT8 *pbStatPtr = NULL;
|
||||
INT8 *pbSoldierStatPtr = NULL;
|
||||
INT8 *pbStatDeltaPtr = NULL;
|
||||
@@ -523,68 +528,68 @@ void ChangeStat( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubSta
|
||||
switch( ubStat )
|
||||
{
|
||||
case HEALTHAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bLifeMax );
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeHealthTime);
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bLifeMax );
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeHealthTime);
|
||||
usIncreaseValue = HEALTH_INCREASE;
|
||||
break;
|
||||
|
||||
case AGILAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bAgility );
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeAgilityTime);
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bAgility );
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeAgilityTime);
|
||||
usIncreaseValue = AGIL_INCREASE;
|
||||
break;
|
||||
|
||||
case DEXTAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bDexterity );
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeDexterityTime);
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bDexterity );
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeDexterityTime);
|
||||
usIncreaseValue = DEX_INCREASE;
|
||||
break;
|
||||
|
||||
case WISDOMAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bWisdom );
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeWisdomTime);
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bWisdom );
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeWisdomTime);
|
||||
usIncreaseValue = WIS_INCREASE;
|
||||
break;
|
||||
|
||||
case MEDICALAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bMedical );
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeMedicalTime);
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bMedical );
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeMedicalTime);
|
||||
usIncreaseValue = MED_INCREASE;
|
||||
break;
|
||||
|
||||
case EXPLODEAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bExplosive );
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeExplosivesTime);
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bExplosive );
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeExplosivesTime);
|
||||
usIncreaseValue = EXP_INCREASE;
|
||||
break;
|
||||
|
||||
case MECHANAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bMechanical );
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeMechanicalTime);
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bMechanical );
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeMechanicalTime);
|
||||
usIncreaseValue = MECH_INCREASE;
|
||||
break;
|
||||
|
||||
case MARKAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bMarksmanship );
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeMarksmanshipTime);
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bMarksmanship );
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeMarksmanshipTime);
|
||||
usIncreaseValue = MRK_INCREASE;
|
||||
break;
|
||||
|
||||
case EXPERAMT:
|
||||
pbSoldierStatPtr = &(pSoldier->bExpLevel);
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeLevelTime );
|
||||
pbSoldierStatPtr = &(pSoldier->stats.bExpLevel);
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeLevelTime );
|
||||
usIncreaseValue = LVL_INCREASE;
|
||||
break;
|
||||
|
||||
case STRAMT:
|
||||
pbSoldierStatPtr = &(pSoldier->bStrength);
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeStrengthTime);
|
||||
pbSoldierStatPtr = &(pSoldier->stats.bStrength);
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeStrengthTime);
|
||||
usIncreaseValue = STRENGTH_INCREASE;
|
||||
break;
|
||||
|
||||
case LDRAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bLeadership);
|
||||
puiStatTimerPtr = &( pSoldier->uiChangeLeadershipTime);
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bLeadership);
|
||||
puiStatTimerPtr = &( pSoldier->timeChanges.uiChangeLeadershipTime);
|
||||
usIncreaseValue = LDR_INCREASE;
|
||||
break;
|
||||
}
|
||||
@@ -679,12 +684,12 @@ void ChangeStat( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubSta
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
// adjust current health by the same amount as max health
|
||||
pSoldier->bLife += sPtsChanged;
|
||||
pSoldier->stats.bLife += sPtsChanged;
|
||||
|
||||
// don't let this kill a guy or knock him out!!!
|
||||
if (pSoldier->bLife < OKLIFE)
|
||||
if (pSoldier->stats.bLife < OKLIFE)
|
||||
{
|
||||
pSoldier->bLife = OKLIFE;
|
||||
pSoldier->stats.bLife = OKLIFE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -700,7 +705,7 @@ void ChangeStat( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubSta
|
||||
{
|
||||
case MERC_TYPE__AIM_MERC:
|
||||
// A.I.M.
|
||||
pSoldier->fContractPriceHasIncreased = TRUE;
|
||||
pSoldier->flags.fContractPriceHasIncreased = TRUE;
|
||||
fChangeSalary = TRUE;
|
||||
break;
|
||||
|
||||
@@ -722,7 +727,7 @@ void ChangeStat( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubSta
|
||||
//
|
||||
|
||||
// DEF: 03/06/99 Now sets an event that will be processed later in the day
|
||||
// ubEmailOffset = MERC_UP_LEVEL_BIFF + MERC_UP_LEVEL_LENGTH_BIFF * ( ubMercMercIdValue );
|
||||
// ubEmailOffset = MERC_UP_LEVEL_BIFF + MERC_UP_LEVEL_LENGTH_BIFF * ( ubMercMercIdValue );
|
||||
// AddEmail( ubEmailOffset, MERC_UP_LEVEL_LENGTH_BIFF, SPECK_FROM_MERC, GetWorldTotalMin() );
|
||||
AddStrategicEvent( EVENT_MERC_MERC_WENT_UP_LEVEL_EMAIL_DELAY, GetWorldTotalMin( ) + 60 + Random( 60 ), ubMercMercIdValue );
|
||||
|
||||
@@ -770,10 +775,9 @@ void ProcessUpdateStats( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
// this function will run through the soldier's profile and update their stats based on any accumulated gain pts.
|
||||
UINT8 ubStat = 0;
|
||||
INT16 *psStatGainPtr = NULL;
|
||||
INT16 *psStatGainPtr = NULL;
|
||||
INT8 *pbStatPtr = NULL;
|
||||
INT8 *pbSoldierStatPtr = NULL;
|
||||
INT8 *pbStatDeltaPtr = NULL;
|
||||
INT8 bMinStatValue;
|
||||
INT8 bMaxStatValue;
|
||||
UINT16 usSubpointsPerPoint;
|
||||
@@ -796,11 +800,11 @@ void ProcessUpdateStats( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier )
|
||||
return;
|
||||
|
||||
// ignore vehicles and robots
|
||||
if( ( pSoldier->uiStatusFlags & SOLDIER_VEHICLE ) || ( pSoldier->uiStatusFlags & SOLDIER_ROBOT ) )
|
||||
if( ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) || ( pSoldier->flags.uiStatusFlags & SOLDIER_ROBOT ) )
|
||||
return;
|
||||
|
||||
// delay increases while merc is dying
|
||||
if (pSoldier->bLife < OKLIFE)
|
||||
if (pSoldier->stats.bLife < OKLIFE)
|
||||
return;
|
||||
|
||||
// ignore POWs - shouldn't ever be getting this far
|
||||
@@ -909,47 +913,47 @@ void ProcessUpdateStats( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier )
|
||||
switch( ubStat )
|
||||
{
|
||||
case HEALTHAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bLifeMax );
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bLifeMax );
|
||||
break;
|
||||
|
||||
case AGILAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bAgility );
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bAgility );
|
||||
break;
|
||||
|
||||
case DEXTAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bDexterity );
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bDexterity );
|
||||
break;
|
||||
|
||||
case WISDOMAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bWisdom );
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bWisdom );
|
||||
break;
|
||||
|
||||
case MEDICALAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bMedical );
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bMedical );
|
||||
break;
|
||||
|
||||
case EXPLODEAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bExplosive );
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bExplosive );
|
||||
break;
|
||||
|
||||
case MECHANAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bMechanical );
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bMechanical );
|
||||
break;
|
||||
|
||||
case MARKAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bMarksmanship );
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bMarksmanship );
|
||||
break;
|
||||
|
||||
case EXPERAMT:
|
||||
pbSoldierStatPtr = &(pSoldier->bExpLevel);
|
||||
pbSoldierStatPtr = &(pSoldier->stats.bExpLevel);
|
||||
break;
|
||||
|
||||
case STRAMT:
|
||||
pbSoldierStatPtr = &(pSoldier->bStrength);
|
||||
pbSoldierStatPtr = &(pSoldier->stats.bStrength);
|
||||
break;
|
||||
|
||||
case LDRAMT:
|
||||
pbSoldierStatPtr = &( pSoldier->bLeadership);
|
||||
pbSoldierStatPtr = &( pSoldier->stats.bLeadership);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -997,7 +1001,7 @@ void HandleAnyStatChangesAfterAttack( void )
|
||||
// must check everyone on player's team, not just the shooter
|
||||
for ( cnt = 0, pSoldier = MercPtrs[ 0 ]; cnt <= gTacticalStatus.Team[ MercPtrs[ 0 ]->bTeam ].bLastID; cnt++,pSoldier++)
|
||||
{
|
||||
if (pSoldier -> bActive)
|
||||
if (pSoldier->bActive)
|
||||
{
|
||||
ProcessUpdateStats( &( gMercProfiles[ pSoldier->ubProfile ] ), pSoldier );
|
||||
}
|
||||
@@ -1519,9 +1523,9 @@ void AwardExperienceBonusToActiveSquad( UINT8 ubExpBonusType )
|
||||
for ( ubGuynum = gTacticalStatus.Team[ gbPlayerNum ].bFirstID, pSoldier = MercPtrs[ ubGuynum ];
|
||||
ubGuynum <= gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
ubGuynum++, pSoldier++ )
|
||||
{
|
||||
if ( pSoldier->bActive && pSoldier->bInSector && IsMercOnCurrentSquad( pSoldier ) && ( pSoldier->bLife >= CONSCIOUSNESS ) &&
|
||||
!( pSoldier->uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pSoldier ) )
|
||||
{
|
||||
if ( pSoldier->bActive && pSoldier->bInSector && IsMercOnCurrentSquad( pSoldier ) && ( pSoldier->stats.bLife >= CONSCIOUSNESS ) &&
|
||||
!( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pSoldier ) )
|
||||
{
|
||||
StatChange( pSoldier, EXPERAMT, usXPs, FALSE );
|
||||
}
|
||||
@@ -1557,7 +1561,7 @@ void BuildStatChangeString( STR16 wString, STR16 wName, BOOLEAN fIncrease, INT16
|
||||
ubStringIndex += 2;
|
||||
}
|
||||
|
||||
swprintf( wString, L"%s %s %d %s %s", wName, sPreStatBuildString[ fIncrease ? 1 : 0 ], abs( sPtsChanged ),
|
||||
swprintf( wString, L"%s %s %d %s %s", wName, sPreStatBuildString[ fIncrease ? 1 : 0 ], abs( sPtsChanged ),
|
||||
sPreStatBuildString[ ubStringIndex ], sStatGainStrings[ ubStat - FIRST_CHANGEABLE_STAT ] );
|
||||
}
|
||||
|
||||
@@ -1656,4 +1660,4 @@ void MERCMercWentUpALevelSendEmail( UINT8 ubMercMercIdValue )
|
||||
}
|
||||
|
||||
AddEmail( ubEmailOffset, iMsgLength, SPECK_FROM_MERC, GetWorldTotalMin(), -1);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user