100AP project integration

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@2402 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
ChrisL
2008-11-06 00:46:54 +00:00
parent d63ae7501b
commit 3cd3ef39cb
64 changed files with 1436 additions and 781 deletions
+31 -29
View File
@@ -964,38 +964,40 @@ ANI_SPEED_DEF gubAnimWalkSpeeds[ TOTALBODYTYPES ] =
-10, (FLOAT)4.0, //JEEP
};
extern INT16 gubMaxActionPoints[TOTALBODYTYPES] = {0};
/*
UINT8 gubMaxActionPoints[ TOTALBODYTYPES ] =
{
AP_MAXIMUM, //REGMALE
AP_MAXIMUM, //BIGMALE
AP_MAXIMUM, //STOCKYMALE
AP_MAXIMUM, //REGFEMALE
AP_MONSTER_MAXIMUM, //ADULTMONSTER
AP_MONSTER_MAXIMUM, //ADULTMONSTER
AP_MONSTER_MAXIMUM, //ADULTMONSTER
AP_MONSTER_MAXIMUM, //ADULTMONSTER
AP_MONSTER_MAXIMUM, //ADULTMONSTER
AP_MONSTER_MAXIMUM, //INFANT
AP_MONSTER_MAXIMUM, //QUEEN MONSTER
AP_MAXIMUM, //FATCIV
AP_MAXIMUM, //MANCIV
AP_MAXIMUM, //MINICIV
AP_MAXIMUM, //DRESSCIV
AP_MAXIMUM, //HAT KID
AP_MAXIMUM, //NOHAT KID
AP_MAXIMUM, //CRIPPLE
AP_MAXIMUM, //COW
AP_MAXIMUM, //CROW
AP_MAXIMUM, //BLOOD CAT
AP_MAXIMUM, // ROBOT1
AP_VEHICLE_MAXIMUM, //HUMVEE
AP_VEHICLE_MAXIMUM, //TANK1
AP_VEHICLE_MAXIMUM, //TANK2
AP_VEHICLE_MAXIMUM, //ELDORADO
AP_VEHICLE_MAXIMUM, //ICECREAMTRUCK
AP_VEHICLE_MAXIMUM, //JEEP
APBPConstants[AP_MAXIMUM], //REGMALE
APBPConstants[AP_MAXIMUM], //BIGMALE
APBPConstants[AP_MAXIMUM], //STOCKYMALE
APBPConstants[AP_MAXIMUM], //REGFEMALE
APBPConstants[AP_MONSTER_MAXIMUM], //ADULTMONSTER
APBPConstants[AP_MONSTER_MAXIMUM], //ADULTMONSTER
APBPConstants[AP_MONSTER_MAXIMUM], //ADULTMONSTER
APBPConstants[AP_MONSTER_MAXIMUM], //ADULTMONSTER
APBPConstants[AP_MONSTER_MAXIMUM], //ADULTMONSTER
APBPConstants[AP_MONSTER_MAXIMUM], //INFANT
APBPConstants[AP_MONSTER_MAXIMUM], //QUEEN MONSTER
APBPConstants[AP_MAXIMUM], //FATCIV
APBPConstants[AP_MAXIMUM], //MANCIV
APBPConstants[AP_MAXIMUM], //MINICIV
APBPConstants[AP_MAXIMUM], //DRESSCIV
APBPConstants[AP_MAXIMUM], //HAT KID
APBPConstants[AP_MAXIMUM], //NOHAT KID
APBPConstants[AP_MAXIMUM], //CRIPPLE
APBPConstants[AP_MAXIMUM], //COW
APBPConstants[AP_MAXIMUM], //CROW
APBPConstants[AP_MAXIMUM], //BLOOD CAT
APBPConstants[AP_MAXIMUM], // ROBOT1
APBPConstants[AP_VEHICLE_MAXIMUM], //HUMVEE
APBPConstants[AP_VEHICLE_MAXIMUM], //TANK1
APBPConstants[AP_VEHICLE_MAXIMUM], //TANK2
APBPConstants[AP_VEHICLE_MAXIMUM], //ELDORADO
APBPConstants[AP_VEHICLE_MAXIMUM], //ICECREAMTRUCK
APBPConstants[AP_VEHICLE_MAXIMUM], //JEEP
};
*/
ANI_SPEED_DEF gubAnimRunSpeeds[ TOTALBODYTYPES ] =
{
+1 -1
View File
@@ -556,7 +556,7 @@ extern ANI_SPEED_DEF gubAnimWalkSpeeds[ TOTALBODYTYPES ];
extern ANI_SPEED_DEF gubAnimRunSpeeds[ TOTALBODYTYPES ];
extern ANI_SPEED_DEF gubAnimSwatSpeeds[ TOTALBODYTYPES ];
extern ANI_SPEED_DEF gubAnimCrawlSpeeds[ TOTALBODYTYPES ];
extern UINT8 gubMaxActionPoints[ TOTALBODYTYPES ];
extern INT16 gubMaxActionPoints[ TOTALBODYTYPES ];
// OK, this array contains definitions for random animations based on bodytype, total # allowed, and what is in their hand....
+2 -2
View File
@@ -469,7 +469,7 @@ INT8 CalcCoverForGridNoBasedOnTeamKnownEnemies( SOLDIERTYPE *pSoldier, INT16 sTa
}
iGetThrough = SoldierToLocationChanceToGetThrough( pOpponent, sTargetGridNo, pSoldier->pathing.bLevel, bStance, NOBODY );
// iBulletGetThrough = CalcChanceToHitGun( pOpponent, sTargetGridNo, AP_MAX_AIM_ATTACK, AIM_SHOT_TORSO );
// iBulletGetThrough = CalcChanceToHitGun( pOpponent, sTargetGridNo, APBPConstants[AP_MAX_AIM_ATTACK], AIM_SHOT_TORSO );
if( WeaponInHand( pOpponent ) )
{
@@ -635,7 +635,7 @@ void DisplayRangeToTarget( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
//AXP 30.03.2007: Fix CtH calculation for first shot after changing aim level (roof/ground)
INT8 bTempTargetLevel = pSoldier->bTargetLevel;
pSoldier->bTargetLevel = (INT8)gsInterfaceLevel;
uiHitChance = CalcChanceToHitGun( pSoldier, sTargetGridNo, (INT8)(pSoldier->aiData.bShownAimTime ), pSoldier->bAimShotLocation );
uiHitChance = CalcChanceToHitGun( pSoldier, sTargetGridNo, (pSoldier->aiData.bShownAimTime ), pSoldier->bAimShotLocation );
pSoldier->bTargetLevel = bTempTargetLevel;
swprintf( zOutputString, zNewTacticalMessages[ TCTL_MSG__GUN_RANGE_AND_CTH ], Weapon[ pSoldier->inv[HANDPOS].usItem ].usRange / 10, uiHitChance );
+8 -8
View File
@@ -342,7 +342,7 @@ INT8 GetDrugSideEffect( SOLDIERTYPE *pSoldier, UINT8 ubDrugType )
}
}
void HandleAPEffectDueToDrugs( SOLDIERTYPE *pSoldier, UINT8 *pubPoints )
void HandleAPEffectDueToDrugs( SOLDIERTYPE *pSoldier, INT16 *pubPoints )
{
INT8 bDrunkLevel;
INT16 sPoints = (*pubPoints);
@@ -358,9 +358,9 @@ void HandleAPEffectDueToDrugs( SOLDIERTYPE *pSoldier, UINT8 *pubPoints )
// Adjust!
sPoints -= pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ADRENALINE ];
if ( sPoints < AP_MINIMUM )
if ( sPoints < APBPConstants[APBPConstants[APBPConstants[AP_MINIMUM]]] )
{
sPoints = AP_MINIMUM;
sPoints = APBPConstants[APBPConstants[APBPConstants[AP_MINIMUM]]];
}
}
@@ -371,13 +371,13 @@ void HandleAPEffectDueToDrugs( SOLDIERTYPE *pSoldier, UINT8 *pubPoints )
// Reduce....
sPoints -= HANGOVER_AP_REDUCE;
if ( sPoints < AP_MINIMUM )
if ( sPoints < APBPConstants[APBPConstants[APBPConstants[AP_MINIMUM]]] )
{
sPoints = AP_MINIMUM;
sPoints = APBPConstants[APBPConstants[APBPConstants[AP_MINIMUM]]];
}
}
(*pubPoints) = (UINT8)sPoints;
(*pubPoints) = sPoints;
}
@@ -389,12 +389,12 @@ void HandleBPEffectDueToDrugs( SOLDIERTYPE *pSoldier, INT16 *psPointReduction )
if ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ADRENALINE ] )
{
// Adjust!
(*psPointReduction) -= ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ADRENALINE ] * BP_RATIO_RED_PTS_TO_NORMAL );
(*psPointReduction) -= ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ADRENALINE ] * APBPConstants[BP_RATIO_RED_PTS_TO_NORMAL] );
}
else if ( pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] )
{
// Adjust!
(*psPointReduction) += ( pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] * BP_RATIO_RED_PTS_TO_NORMAL );
(*psPointReduction) += ( pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_ADRENALINE ] * APBPConstants[BP_RATIO_RED_PTS_TO_NORMAL] );
}
bDrunkLevel = GetDrunkLevel( pSoldier );
+2 -2
View File
@@ -21,7 +21,7 @@ UINT8 GetDrugType( UINT16 usItem );
BOOLEAN ApplyDrugs( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject );
void HandleEndTurnDrugAdjustments( SOLDIERTYPE *pSoldier );
void HandleAPEffectDueToDrugs( SOLDIERTYPE *pSoldier, UINT8 *pubPoints );
void HandleAPEffectDueToDrugs( SOLDIERTYPE *pSoldier, INT16 *pubPoints );
void HandleBPEffectDueToDrugs( SOLDIERTYPE *pSoldier, INT16 *psPoints );
@@ -32,4 +32,4 @@ INT32 EffectStatForBeingDrunk( SOLDIERTYPE *pSoldier, INT32 iStat );
BOOLEAN MercUnderTheInfluence( SOLDIERTYPE *pSoldier );
#endif
#endif
+1 -1
View File
@@ -1815,7 +1815,7 @@ void HandleAutoFaces( )
FACETYPE *pFace;
INT8 bLife;
INT8 bInSector;
INT8 bAPs;
INT16 bAPs;
BOOLEAN fRerender = FALSE;
BOOLEAN fHandleFace;
BOOLEAN fHandleUIHatch;
+24 -24
View File
@@ -475,8 +475,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
if ( pStructure->fFlags & STRUCTURE_OPEN )
{
// Set costs for these
sAPCost = AP_OPEN_DOOR;
sBPCost = BP_OPEN_DOOR;
sAPCost = APBPConstants[AP_OPEN_DOOR];
sBPCost = APBPConstants[BP_OPEN_DOOR];
fHandleDoor = TRUE;
}
@@ -500,8 +500,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
// Set costs for these
// Set AP costs to that of opening a door
sAPCost = AP_OPEN_DOOR;
sBPCost = BP_OPEN_DOOR;
sAPCost = APBPConstants[AP_OPEN_DOOR];
sBPCost = APBPConstants[BP_OPEN_DOOR];
pSoldier->ChangeSoldierState( GetAnimStateForInteraction( pSoldier, fDoor, END_OPEN_DOOR ), 0, FALSE );
@@ -584,8 +584,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
if ( pDoor == NULL )
{
// Set costs for these
sAPCost = AP_OPEN_DOOR;
sBPCost = BP_OPEN_DOOR;
sAPCost = APBPConstants[AP_OPEN_DOOR];
sBPCost = APBPConstants[BP_OPEN_DOOR];
// Open if it's not locked....
pSoldier->ChangeSoldierState( GetAnimStateForInteraction( pSoldier, fDoor, END_OPEN_DOOR ), 0, FALSE );
@@ -623,8 +623,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
case HANDLE_DOOR_FORCE:
// Set costs for these
sAPCost = AP_BOOT_DOOR;
sBPCost = BP_BOOT_DOOR;
sAPCost = APBPConstants[AP_BOOT_DOOR];
sBPCost = APBPConstants[BP_BOOT_DOOR];
// OK, using force, if we have no lock, just open the door!
if ( pDoor == NULL )
@@ -656,8 +656,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
case HANDLE_DOOR_CROWBAR:
// Set costs for these
sAPCost = AP_USE_CROWBAR;
sBPCost = BP_USE_CROWBAR;
sAPCost = APBPConstants[AP_USE_CROWBAR];
sBPCost = APBPConstants[BP_USE_CROWBAR];
// OK, using force, if we have no lock, just open the door!
if ( pDoor == NULL )
@@ -689,8 +689,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
case HANDLE_DOOR_EXPLODE:
// Set costs for these
sAPCost = AP_EXPLODE_DOOR;
sBPCost = BP_EXPLODE_DOOR;
sAPCost = APBPConstants[AP_EXPLODE_DOOR];
sBPCost = APBPConstants[BP_EXPLODE_DOOR];
if ( pDoor == NULL )
{
@@ -717,8 +717,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
case HANDLE_DOOR_LOCKPICK:
// Set costs for these
sAPCost = AP_PICKLOCK;
sBPCost = BP_PICKLOCK;
sAPCost = APBPConstants[AP_PICKLOCK];
sBPCost = APBPConstants[BP_PICKLOCK];
// Attempt to pick lock
if ( pDoor == NULL )
@@ -745,8 +745,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
case HANDLE_DOOR_EXAMINE:
// Set costs for these
sAPCost = AP_EXAMINE_DOOR;
sBPCost = BP_EXAMINE_DOOR;
sAPCost = APBPConstants[AP_EXAMINE_DOOR];
sBPCost = APBPConstants[BP_EXAMINE_DOOR];
// Attempt to examine door
// Whatever the result, end the open animation
@@ -788,8 +788,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
case HANDLE_DOOR_UNLOCK:
// Set costs for these
sAPCost = AP_UNLOCK_DOOR;
sBPCost = BP_UNLOCK_DOOR;
sAPCost = APBPConstants[AP_UNLOCK_DOOR];
sBPCost = APBPConstants[BP_UNLOCK_DOOR];
// OK, if we have no lock, show that!
if ( pDoor == NULL )
@@ -834,8 +834,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
case HANDLE_DOOR_UNTRAP:
// Set costs for these
sAPCost = AP_UNTRAP_DOOR;
sBPCost = BP_UNTRAP_DOOR;
sAPCost = APBPConstants[AP_UNTRAP_DOOR];
sBPCost = APBPConstants[BP_UNTRAP_DOOR];
// OK, if we have no lock, show that!
if ( pDoor == NULL )
@@ -891,8 +891,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
case HANDLE_DOOR_LOCK:
// Set costs for these
sAPCost = AP_LOCK_DOOR;
sBPCost = BP_LOCK_DOOR;
sAPCost = APBPConstants[AP_LOCK_DOOR];
sBPCost = APBPConstants[BP_LOCK_DOOR];
// OK, if we have no lock, show that!
if ( pDoor == NULL )
@@ -931,8 +931,8 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
else
{
// Set costs for these
sAPCost = AP_OPEN_DOOR;
sBPCost = BP_OPEN_DOOR;
sAPCost = APBPConstants[AP_OPEN_DOOR];
sBPCost = APBPConstants[BP_OPEN_DOOR];
// Open if it's not locked....
pSoldier->ChangeSoldierState( GetAnimStateForInteraction( pSoldier, fDoor, END_OPEN_DOOR ), 0, FALSE );
+31 -5
View File
@@ -1083,7 +1083,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
if ( sActionGridNo != -1 )
{
// Calculate AP costs...
sAPCost = AP_ATTACH_CAN;
sAPCost = APBPConstants[AP_ATTACH_CAN];
sAPCost += PlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, FALSE, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
if ( EnoughPoints( pSoldier, sAPCost, 0, fFromUI ) )
@@ -1134,7 +1134,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
// Check for remote detonator cursor....
if ( Item[ usHandItem ].ubCursor == REMOTECURS )
{
sAPCost = AP_USE_REMOTE;
sAPCost = APBPConstants[AP_USE_REMOTE];
if ( EnoughPoints( pSoldier, sAPCost, 0, fFromUI ) )
{
@@ -1984,7 +1984,24 @@ void HandleSoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGr
gfDisarmingBuriedBomb = TRUE;
gbTrapDifficulty = gWorldItems[ iItemIndex ].object[0]->data.bTrap;
DoMessageBox( MSG_BOX_BASIC_STYLE, TacticalStr[ DISARM_TRAP_PROMPT ], GAME_SCREEN, ( UINT8 )MSG_BOX_FLAG_YESNO, BoobyTrapMessageBoxCallBack, NULL );
wchar_t * ptr;
if((gTacticalStatus.uiFlags & INCOMBAT) || (gTacticalStatus.fEnemyInSector))
{
wchar_t * string = L" (";
wchar_t string2[20];
ptr = wcscat(TacticalStr[ DISARM_TRAP_PROMPT ], string);
_ltow(APBPConstants[AP_DISARM_MINE], string2, 10);
ptr = wcscat(TacticalStr[ DISARM_TRAP_PROMPT ], string2);
string = L"AP)";
ptr = wcscat(TacticalStr[ DISARM_TRAP_PROMPT ], string);
}
else
{
ptr = wcscat(TacticalStr[ DISARM_TRAP_PROMPT ], L"");
}
DoMessageBox( MSG_BOX_BASIC_STYLE, ptr, GAME_SCREEN, ( UINT8 )MSG_BOX_FLAG_YESNO, BoobyTrapMessageBoxCallBack, NULL );
}
else
{
@@ -3962,7 +3979,7 @@ void SoldierGiveItemFromAnimation( SOLDIERTYPE *pSoldier )
ubTargetMercID = (UINT8)pSoldier->aiData.uiPendingActionData4;
// ATE: Deduct APs!
DeductPoints( pSoldier, AP_PICKUP_ITEM, 0 );
DeductPoints( pSoldier, APBPConstants[AP_PICKUP_ITEM], 0 );
if ( VerifyGiveItem( pSoldier, &pTSoldier ) )
{
@@ -4512,6 +4529,15 @@ void BoobyTrapMessageBoxCallBack( UINT8 ubExitValue )
// Snap: make it easier to disarm our own traps.
// If we succede - we get exp, but if we fail - we pay fair and square!
//CHRISL: first things first. If we're in combat, we need to spend some APs to disarm the device
if((gTacticalStatus.uiFlags & INCOMBAT) || (gTacticalStatus.fEnemyInSector))
{
if(EnoughPoints(gpBoobyTrapSoldier, APBPConstants[AP_DISARM_MINE], APBPConstants[BP_DISARM_MINE], TRUE))
DeductPoints(gpBoobyTrapSoldier, APBPConstants[AP_DISARM_MINE], APBPConstants[BP_DISARM_MINE]);
else
return;
}
// NB owner grossness... bombs 'owned' by the enemy are stored with side value 1 in
// the map. So if we want to detect a bomb placed by the player, owner is > 1, and
// owner - 2 gives the ID of the character who planted it
@@ -5254,7 +5280,7 @@ INT16 FindNearestAvailableGridNoForItem( INT16 sSweetGridNo, INT8 ubRadius )
INT32 leftmost;
BOOLEAN fFound = FALSE;
SOLDIERTYPE soldier;
UINT8 ubSaveNPCAPBudget;
INT16 ubSaveNPCAPBudget;
UINT8 ubSaveNPCDistLimit;
cnt3 = 0;
+2 -2
View File
@@ -67,7 +67,7 @@ BOOLEAN AddUIPlan( INT16 sGridNo, UINT8 ubPlanID )
// Adjust for running if we are not already running
if ( gpUIPlannedSoldier->usUIMovementMode == RUNNING )
{
sAPCost += AP_START_RUN_COST;
sAPCost += APBPConstants[AP_START_RUN_COST];
}
if ( EnoughPoints( gpUIPlannedSoldier, sAPCost, 0, FALSE ) )
@@ -142,7 +142,7 @@ BOOLEAN AddUIPlan( INT16 sGridNo, UINT8 ubPlanID )
}
else if ( ubPlanID == UIPLAN_ACTION_FIRE )
{
sAPCost = CalcTotalAPsToAttack( gpUIPlannedSoldier, sGridNo, TRUE, (INT8)(gpUIPlannedSoldier->aiData.bShownAimTime ) );
sAPCost = CalcTotalAPsToAttack( gpUIPlannedSoldier, sGridNo, TRUE, (INT16)(gpUIPlannedSoldier->aiData.bShownAimTime ) );
// Get XY from Gridno
ConvertGridNoToCenterCellXY( sGridNo, &sXPos, &sYPos );
+37 -27
View File
@@ -2932,7 +2932,7 @@ BOOLEAN SelectedMercCanAffordAttack( )
sTargetGridNo = sMapPos;
}
sAPCost = CalcTotalAPsToAttack( pSoldier, sTargetGridNo, TRUE, (INT8)(pSoldier->aiData.bShownAimTime ) );
sAPCost = CalcTotalAPsToAttack( pSoldier, sTargetGridNo, TRUE, (INT16)(pSoldier->aiData.bShownAimTime ) );
if ( EnoughPoints( pSoldier, sAPCost, 0, TRUE ) )
{
@@ -3861,7 +3861,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT16 sMapPos, UINT32 uiFlags )
sActionGridNo = FindAdjacentGridEx( pSoldier, sIntTileGridNo, &ubDirection, NULL, FALSE, TRUE );
if ( sActionGridNo != -1 )
{
sAPCost = AP_ATTACH_CAN;
sAPCost = APBPConstants[AP_ATTACH_CAN];
sAPCost += UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
if ( sActionGridNo != pSoldier->sGridNo )
@@ -4026,7 +4026,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT16 sMapPos, UINT32 uiFlags )
{
sActionGridNo = sAdjustedGridNo;
}
sAPCost += AP_STEAL_ITEM;
sAPCost += APBPConstants[AP_STEAL_ITEM];
// CJC August 13 2002: take into account stance in AP prediction
if (!(PTR_STANDING))
{
@@ -4043,7 +4043,10 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT16 sMapPos, UINT32 uiFlags )
}
else if ( uiFlags == MOVEUI_TARGET_BOMB )
{
sAPCost += GetAPsToDropBomb( pSoldier );
if(Item[pSoldier->inv[HANDPOS].usItem].mine == 1)
sAPCost += GetAPsToPlantMine( pSoldier );
else
sAPCost += GetAPsToDropBomb( pSoldier );
sAPCost += UIPlotPath( pSoldier, sMapPos, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
gfUIHandleShowMoveGrid = TRUE;
@@ -4087,12 +4090,12 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT16 sMapPos, UINT32 uiFlags )
sAPCost += UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
if ( sAPCost != 0 )
{
sAPCost += AP_PICKUP_ITEM;
sAPCost += APBPConstants[AP_PICKUP_ITEM];
}
}
else
{
sAPCost += AP_PICKUP_ITEM;
sAPCost += APBPConstants[AP_PICKUP_ITEM];
}
if ( sActionGridNo != pSoldier->sGridNo )
@@ -4139,13 +4142,13 @@ INT16 APsToTurnAround(SOLDIERTYPE *pSoldier, INT16 sAdjustedGridNo)
switch( gAnimControl[ pSoldier->usAnimState ].ubEndHeight )
{
case ANIM_STAND:
sAPCost += AP_LOOK_STANDING;
sAPCost += APBPConstants[AP_LOOK_STANDING];
break;
case ANIM_CROUCH:
sAPCost += AP_LOOK_CROUCHED;
sAPCost += APBPConstants[AP_LOOK_CROUCHED];
break;
case ANIM_PRONE:
sAPCost += AP_LOOK_PRONE;
sAPCost += APBPConstants[AP_LOOK_PRONE];
break;
}
}
@@ -4367,43 +4370,43 @@ BOOLEAN SoldierCanAffordNewStance( SOLDIERTYPE *pSoldier, UINT8 ubDesiredStance
if((UsingNewInventorySystem() == true))
if(pSoldier->inv[BPACKPOCKPOS].exists() == true && !pSoldier->flags.ZipperFlag)
bAP = bBP = 1;
bAP += AP_CROUCH;
bBP += BP_CROUCH;
bAP += APBPConstants[AP_CROUCH];
bBP += APBPConstants[BP_CROUCH];
break;
case ANIM_CROUCH - ANIM_STAND:
if((UsingNewInventorySystem() == true))
if(pSoldier->inv[BPACKPOCKPOS].exists() == true && !pSoldier->flags.ZipperFlag)
bAP = bBP = 2;
bAP += AP_CROUCH;
bBP += BP_CROUCH;
bAP += APBPConstants[AP_CROUCH];
bBP += APBPConstants[BP_CROUCH];
break;
case ANIM_STAND - ANIM_PRONE:
if((UsingNewInventorySystem() == true))
if(pSoldier->inv[BPACKPOCKPOS].exists() == true && !pSoldier->flags.ZipperFlag)
bAP = bBP = 2;
bAP += AP_CROUCH + AP_PRONE;
bBP += BP_CROUCH + BP_PRONE;
bAP += APBPConstants[AP_CROUCH] + APBPConstants[AP_PRONE];
bBP += APBPConstants[BP_CROUCH] + APBPConstants[BP_PRONE];
break;
case ANIM_PRONE - ANIM_STAND:
if((UsingNewInventorySystem() == true))
if(pSoldier->inv[BPACKPOCKPOS].exists() == true && !pSoldier->flags.ZipperFlag)
bAP = bBP = 4;
bAP += AP_CROUCH + AP_PRONE;
bBP += BP_CROUCH + BP_PRONE;
bAP += APBPConstants[AP_CROUCH] + APBPConstants[AP_PRONE];
bBP += APBPConstants[BP_CROUCH] + APBPConstants[BP_PRONE];
break;
case ANIM_CROUCH - ANIM_PRONE:
if((UsingNewInventorySystem() == true))
if(pSoldier->inv[BPACKPOCKPOS].exists() == true && !pSoldier->flags.ZipperFlag)
bAP = bBP = 1;
bAP += AP_PRONE;
bBP += BP_PRONE;
bAP += APBPConstants[AP_PRONE];
bBP += APBPConstants[BP_PRONE];
break;
case ANIM_PRONE - ANIM_CROUCH:
if((UsingNewInventorySystem() == true))
if(pSoldier->inv[BPACKPOCKPOS].exists() == true && !pSoldier->flags.ZipperFlag)
bAP = bBP = 2;
bAP += AP_PRONE;
bBP += BP_PRONE;
bAP += APBPConstants[AP_PRONE];
bBP += APBPConstants[BP_PRONE];
break;
}
@@ -4626,9 +4629,12 @@ UINT32 UIHandleLCOnTerrain( UI_EVENT *pUIEvent )
gsCurrentActionPoints = 0;
//CHRISL: Why are we doing this? If we ready a weapon, we spend the AP_CHANGE_TARGET APs, but then if we actually shoot
// at someone in our current firing arc, we'll again pay the AP_CHANGE_TARGET cost because it's considered a new tartget.
// Should be simply pay the ready weapon cost and only pay the AP_CHANGE_TARGET when we actually aim at a target?
// Lesh: raise weapon include APs to set weapon towards enemy and APs to aquire/change target
if( pSoldier->sLastTarget != sXPos + (MAXCOL * sYPos ) )
gsCurrentActionPoints = AP_CHANGE_TARGET;
//if( pSoldier->sLastTarget != sXPos + (MAXCOL * sYPos ) )
// gsCurrentActionPoints = APBPConstants[AP_CHANGE_TARGET];
if( usAnimState != INVALID_ANIMATION )
{
@@ -4715,9 +4721,13 @@ BOOLEAN MakeSoldierTurn( SOLDIERTYPE *pSoldier, INT16 sXPos, INT16 sYPos )
sAPCostToReady = sAPCost = 0;
//CHRISL: We should only charge AP_CHANGE_TARGET if we're actually pointing at a new target. Don't charge just
// to ready a weapon since we'll charge AP_CHANGE_TARGET when we actually fire.
SOLDIERTYPE * pTarget = SimpleFindSoldier( sXPos + (MAXCOL * sYPos ), pSoldier->bTargetLevel );
// Lesh: raise weapon include APs to set weapon towards enemy and APs to aquire/change target
if( pSoldier->sLastTarget != sXPos + (MAXCOL * sYPos ) )
sAPCost = AP_CHANGE_TARGET;
if( pSoldier->sLastTarget != sXPos + (MAXCOL * sYPos ) && pTarget != NULL )
sAPCost = APBPConstants[AP_CHANGE_TARGET];
if( usAnimState != INVALID_ANIMATION )
{
@@ -5793,7 +5803,7 @@ BOOLEAN HandleTalkInit( )
gfNPCCircularDistLimit = FALSE;
// First calculate APs and validate...
sAPCost = AP_TALK;
sAPCost = APBPConstants[AP_TALK];
//sAPCost += UIPlotPath( pSoldier, sGoodGridNo, NO_COPYROUTE, FALSE, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
// Check AP cost...
@@ -5815,7 +5825,7 @@ BOOLEAN HandleTalkInit( )
}
else
{
sAPCost = AP_TALK;
sAPCost = APBPConstants[AP_TALK];
// Check AP cost...
if ( !EnoughPoints( pSoldier, sAPCost, 0, TRUE ) )
+24 -25
View File
@@ -221,7 +221,6 @@ extern int SM_ITEMDESC_START_Y;
#define BAD_WEIGHT 45
#define BAD_RANGE 150
#define BAD_MAGAZINE 10
#define BAD_AP_COST 9
#define BAD_RELIABILITY -2
#define BAD_REPAIR_EASE -2
#define BAD_ACCURACY -1
@@ -667,7 +666,7 @@ void GenerateProsString( STR16 zItemPros, OBJECTTYPE * pObject, UINT32 uiPixLimi
}
}
if (BaseAPsToShootOrStab( DEFAULT_APS, DEFAULT_AIMSKILL, gpItemDescObject ) <= EXCEPTIONAL_AP_COST)
if (BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpItemDescObject ) <= EXCEPTIONAL_AP_COST)
{
zTemp = Message[STR_QUICK_FIRING];
if ( ! AttemptToAddSubstring( zItemPros, zTemp, &uiStringLength, uiPixLimit ) )
@@ -794,7 +793,7 @@ void GenerateConsString( STR16 zItemCons, OBJECTTYPE * pObject, UINT32 uiPixLimi
}
}
if (BaseAPsToShootOrStab( DEFAULT_APS, DEFAULT_AIMSKILL, gpItemDescObject ) >= BAD_AP_COST)
if (BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpItemDescObject ) >= APBPConstants[BAD_AP_COST])
{
zTemp = Message[STR_SLOW_FIRING];
if ( ! AttemptToAddSubstring( zItemCons, zTemp, &uiStringLength, uiPixLimit ) )
@@ -3663,7 +3662,7 @@ void ItemDescAttachmentsCallback( MOUSE_REGION * pRegion, INT32 iReason )
else
{
// ATE: Make sure we have enough AP's to drop it if we pick it up!
if ( pAttachment && EnoughPoints( gpItemDescSoldier, ( AttachmentAPCost( pAttachment->usItem, gpItemDescObject->usItem ) + AP_PICKUP_ITEM ), 0, TRUE ) )
if ( pAttachment && EnoughPoints( gpItemDescSoldier, ( AttachmentAPCost( pAttachment->usItem, gpItemDescObject->usItem ) + APBPConstants[AP_PICKUP_ITEM] ), 0, TRUE ) )
{
// Get attachment if there is one
// The follwing function will handle if no attachment is here
@@ -3750,7 +3749,7 @@ void RenderItemDescriptionBox( )
INT32 cnt;
FLOAT fWeight;
INT16 usX, usY;
UINT8 ubAttackAPs;
INT16 ubAttackAPs;
BOOLEAN fHatchOutAttachments = gfItemDescObjectIsAttachment; // if examining attachment, always hatch out attachment slots
INT16 sProsConsIndent;
INT8 showBox=0;
@@ -4061,7 +4060,7 @@ void RenderItemDescriptionBox( )
mprintf( usX, usY, pStr );
}
ubAttackAPs = BaseAPsToShootOrStab( DEFAULT_APS, DEFAULT_AIMSKILL, gpItemDescObject );
ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpItemDescObject );
if (ubAttackAPs <= EXCEPTIONAL_AP_COST)
{
@@ -4092,7 +4091,7 @@ void RenderItemDescriptionBox( )
SetFontForeground( 5 );
}
swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( DEFAULT_APS, gpItemDescObject ) );
swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], gpItemDescObject ) );
FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 6 ].sX + gsInvDescX + gMapWeaponStats[ 6 ].sValDx), (INT16)(gMapWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY);
mprintf( usX, usY, pStr );
}
@@ -4101,7 +4100,7 @@ void RenderItemDescriptionBox( )
SetFontForeground( 5 );
swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToAutofire( DEFAULT_APS, gpItemDescObject, 3 ) );
swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToAutofire( APBPConstants[DEFAULT_APS], gpItemDescObject, 3 ) );
FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 6 ].sX + gsInvDescX + gMapWeaponStats[ 6 ].sValDx), (INT16)(gMapWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY);
mprintf( usX, usY, pStr );
}
@@ -4564,7 +4563,7 @@ void RenderItemDescriptionBox( )
mprintf( usX, usY, pStr );
}
ubAttackAPs = BaseAPsToShootOrStab( DEFAULT_APS, DEFAULT_AIMSKILL, gpItemDescObject );
ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpItemDescObject );
if (ubAttackAPs <= EXCEPTIONAL_AP_COST)
{
@@ -4593,14 +4592,14 @@ void RenderItemDescriptionBox( )
SetFontForeground( 5 );
}
swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( DEFAULT_APS, gpItemDescObject ) );
swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], gpItemDescObject ) );
FindFontRightCoordinates( (INT16)(gWeaponStats[ 6 ].sX + gsInvDescX + gWeaponStats[ 6 ].sValDx), (INT16)(gWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH, ITEM_STATS_HEIGHT, pStr, BLOCKFONT2, &usX, &usY );
mprintf( usX, usY, pStr );
}
else if (GetAutofireShotsPerFiveAPs(gpItemDescObject)> 0)
{
SetFontForeground( 5 );
swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( DEFAULT_APS, gpItemDescObject ) );
swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], gpItemDescObject ) );
FindFontRightCoordinates( (INT16)(gWeaponStats[ 6 ].sX + gsInvDescX + gWeaponStats[ 6 ].sValDx), (INT16)(gWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH, ITEM_STATS_HEIGHT, pStr, BLOCKFONT2, &usX, &usY );
mprintf( usX, usY, pStr );
}
@@ -5480,11 +5479,11 @@ void DrawItemTileCursor( )
// If we are tossing...
if ( sDist <= 1 && gfUIMouseOnValidCatcher == 0 || gfUIMouseOnValidCatcher == 4 )
{
gsCurrentActionPoints = AP_PICKUP_ITEM;
gsCurrentActionPoints = APBPConstants[AP_PICKUP_ITEM];
}
else
{
gsCurrentActionPoints = AP_TOSS_ITEM;
gsCurrentActionPoints = APBPConstants[AP_TOSS_ITEM];
}
}
@@ -5719,7 +5718,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
// Check if we have APs....
if ( !EnoughPoints( gpItemPointerSoldier, gsCurrentActionPoints, 0, TRUE ) )
{
if ( gfDontChargeAPsToPickup && gsCurrentActionPoints == AP_PICKUP_ITEM )
if ( gfDontChargeAPsToPickup && gsCurrentActionPoints == APBPConstants[AP_PICKUP_ITEM] )
{
}
@@ -5882,7 +5881,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
if ( !gfDontChargeAPsToPickup )
{
// Deduct points
DeductPoints( gpItemPointerSoldier, AP_PICKUP_ITEM, 0 );
DeductPoints( gpItemPointerSoldier, APBPConstants[AP_PICKUP_ITEM], 0 );
}
SoldierDropItem( gpItemPointerSoldier, gpItemPointer );
@@ -5898,7 +5897,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
if ( !gfDontChargeAPsToPickup )
{
// Deduct points
DeductPoints( gpItemPointerSoldier, AP_PICKUP_ITEM, 0 );
DeductPoints( gpItemPointerSoldier, APBPConstants[AP_PICKUP_ITEM], 0 );
}
// Play animation....
@@ -5936,7 +5935,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
if ( !gfDontChargeAPsToPickup )
{
// Deduct points
DeductPoints( gpItemPointerSoldier, AP_PICKUP_ITEM, 0 );
DeductPoints( gpItemPointerSoldier, APBPConstants[AP_PICKUP_ITEM], 0 );
}
SoldierDropItem( gpItemPointerSoldier, gpItemPointer );
@@ -6047,7 +6046,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
}
// Deduct points
//DeductPoints( gpItemPointerSoldier, AP_TOSS_ITEM, 0 );
//DeductPoints( gpItemPointerSoldier, APBPConstants[AP_TOSS_ITEM], 0 );
gpItemPointerSoldier->flags.fDontChargeTurningAPs = TRUE;
// Will be dome later....
@@ -8667,7 +8666,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier
//Calculate AP's
CHAR16 apStr[20];
CHAR16 apStr2[20];
UINT8 ubAttackAPs = BaseAPsToShootOrStab( DEFAULT_APS, DEFAULT_AIMSKILL, pObject );
INT16 ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], pObject );
if ( Weapon[ usItem ].NoSemiAuto )
{
@@ -8680,7 +8679,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier
if (GetShotsPerBurst(pObject) > 0)
{
swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToBurst( DEFAULT_APS, pObject ) );
swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], pObject ) );
wcscat( apStr, apStr2 );
}
else
@@ -8690,7 +8689,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier
if (GetAutofireShotsPerFiveAPs(pObject) > 0)
{
swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToAutofire( DEFAULT_APS, pObject, 3 ) );
swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToAutofire( APBPConstants[DEFAULT_APS], pObject, 3 ) );
wcscat( apStr, apStr2 );
}
else
@@ -8726,13 +8725,13 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier
//Calculate AP's
CHAR16 apStr[20];
CHAR16 apStr2[20];
UINT8 ubAttackAPs = BaseAPsToShootOrStab( DEFAULT_APS, DEFAULT_AIMSKILL, pObject );
INT16 ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], pObject );
swprintf( apStr, L"%d", ubAttackAPs );
if (GetShotsPerBurst(pObject) > 0)
{
swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToBurst( DEFAULT_APS, pObject ) );
swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], pObject ) );
wcscat( apStr, apStr2 );
}
else
@@ -8742,7 +8741,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier
if (GetAutofireShotsPerFiveAPs(pObject) > 0)
{
swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToAutofire( DEFAULT_APS, pObject, 3 ) );
swprintf( apStr2, L" / %d", ubAttackAPs + CalcAPsToAutofire( APBPConstants[DEFAULT_APS], pObject, 3 ) );
wcscat( apStr, apStr2 );
}
else
@@ -8780,7 +8779,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier
gWeaponStatsDesc[ 11 ], //Damage String
GetDamage(pObject), //Melee damage
gWeaponStatsDesc[ 5 ], //AP String
BaseAPsToShootOrStab( DEFAULT_APS, DEFAULT_AIMSKILL, pObject ), //AP's
BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], pObject ), //AP's
gWeaponStatsDesc[ 12 ], //Weight String
fWeight, //Weight
GetWeightUnitString() //Weight units
+5 -5
View File
@@ -565,7 +565,7 @@ extern void UpdateItemHatches();
extern SOLDIERTYPE *FindNextActiveSquad( SOLDIERTYPE *pSoldier );
// Wraps up check for AP-s get from a different soldier for in a vehicle...
INT8 GetUIApsToDisplay( SOLDIERTYPE *pSoldier )
INT16 GetUIApsToDisplay( SOLDIERTYPE *pSoldier )
{
SOLDIERTYPE *pVehicle;
@@ -3505,11 +3505,11 @@ void SMInvClickCallback( MOUSE_REGION * pRegion, INT32 iReason )
BOOLEAN ChangeZipperStatus(SOLDIERTYPE *pSoldier, BOOLEAN newStatus)
{
INT16 sAPCost;
INT32 iBPCost = 0;
INT32 iBPCost = APBPConstants[BP_WORK_ZIPPER];
INT8 bNewStance;
//Set AP cost based on what we're doing
sAPCost = (newStatus) ? 7 : 6;
sAPCost = (newStatus) ? APBPConstants[AP_CLOSE_ZIPPER] : APBPConstants[AP_OPEN_ZIPPER];
//Are we currently in combat?
if(gTacticalStatus.uiFlags & INCOMBAT)
{
@@ -3550,8 +3550,8 @@ BOOLEAN ChangeZipperStatus(SOLDIERTYPE *pSoldier, BOOLEAN newStatus)
// CHRISL: Function to adjust droppack packpack button status
BOOLEAN ChangeDropPackStatus(SOLDIERTYPE *pSoldier, BOOLEAN newStatus)
{
INT16 sAPCost = 3;
INT32 iBPCost = 0;
INT16 sAPCost = APBPConstants[AP_BACK_PACK];
INT32 iBPCost = APBPConstants[BP_BACK_PACK];
INT32 worldKey=1, iRange=0;
// Are we dropping a pack that has the zipper open?
+25 -25
View File
@@ -2264,11 +2264,11 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
}
else
{
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ USE_KEYRING_ICON ], AP_UNLOCK_DOOR );
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ USE_KEYRING_ICON ], APBPConstants[AP_UNLOCK_DOOR] );
}
SetButtonFastHelpText( iActionIcons[ USE_KEYRING_ICON ], zDisp );
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, AP_UNLOCK_DOOR, BP_UNLOCK_DOOR, FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_UNLOCK_DOOR], APBPConstants[BP_UNLOCK_DOOR], FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
{
DisableButton( iActionIcons[ USE_KEYRING_ICON ] );
}
@@ -2295,7 +2295,7 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
}
else
{
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ USE_CROWBAR_ICON ], AP_USE_CROWBAR );
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ USE_CROWBAR_ICON ], APBPConstants[AP_USE_CROWBAR] );
}
SetButtonFastHelpText( iActionIcons[ USE_CROWBAR_ICON ], zDisp );
@@ -2305,7 +2305,7 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
DisableButton( iActionIcons[ USE_CROWBAR_ICON ] );
}
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, AP_USE_CROWBAR, BP_USE_CROWBAR, FALSE ) )
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_USE_CROWBAR], APBPConstants[BP_USE_CROWBAR], FALSE ) )
{
DisableButton( iActionIcons[ USE_CROWBAR_ICON ] );
}
@@ -2325,11 +2325,11 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
}
else
{
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ LOCKPICK_DOOR_ICON ], AP_PICKLOCK );
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ LOCKPICK_DOOR_ICON ], APBPConstants[AP_PICKLOCK] );
}
SetButtonFastHelpText( iActionIcons[ LOCKPICK_DOOR_ICON ], zDisp );
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, AP_PICKLOCK, BP_PICKLOCK, FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_PICKLOCK], APBPConstants[BP_PICKLOCK], FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
{
DisableButton( iActionIcons[ LOCKPICK_DOOR_ICON ] );
}
@@ -2357,11 +2357,11 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
}
else
{
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ EXPLOSIVE_DOOR_ICON ], AP_EXPLODE_DOOR );
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ EXPLOSIVE_DOOR_ICON ], APBPConstants[AP_EXPLODE_DOOR] );
}
SetButtonFastHelpText( iActionIcons[ EXPLOSIVE_DOOR_ICON ], zDisp );
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, AP_EXPLODE_DOOR, BP_EXPLODE_DOOR, FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_EXPLODE_DOOR], APBPConstants[BP_EXPLODE_DOOR], FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
{
DisableButton( iActionIcons[ EXPLOSIVE_DOOR_ICON ] );
}
@@ -2391,7 +2391,7 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
}
else
{
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ CANCEL_ICON + 1 ], AP_OPEN_DOOR );
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ CANCEL_ICON + 1 ], APBPConstants[AP_OPEN_DOOR] );
}
}
else
@@ -2402,12 +2402,12 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
}
else
{
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ OPEN_DOOR_ICON ], AP_OPEN_DOOR );
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ OPEN_DOOR_ICON ], APBPConstants[AP_OPEN_DOOR] );
}
}
SetButtonFastHelpText( iActionIcons[ OPEN_DOOR_ICON ], zDisp );
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, AP_OPEN_DOOR, BP_OPEN_DOOR, FALSE ) )
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_OPEN_DOOR], APBPConstants[BP_OPEN_DOOR], FALSE ) )
{
DisableButton( iActionIcons[ OPEN_DOOR_ICON ] );
}
@@ -2429,11 +2429,11 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
}
else
{
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ EXAMINE_DOOR_ICON ], AP_EXAMINE_DOOR );
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ EXAMINE_DOOR_ICON ], APBPConstants[AP_EXAMINE_DOOR] );
}
SetButtonFastHelpText( iActionIcons[ EXAMINE_DOOR_ICON ], zDisp );
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, AP_EXAMINE_DOOR, BP_EXAMINE_DOOR, FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_EXAMINE_DOOR], APBPConstants[BP_EXAMINE_DOOR], FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
{
DisableButton( iActionIcons[ EXAMINE_DOOR_ICON ] );
}
@@ -2453,11 +2453,11 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
}
else
{
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ BOOT_DOOR_ICON ], AP_BOOT_DOOR );
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ BOOT_DOOR_ICON ], APBPConstants[AP_BOOT_DOOR] );
}
SetButtonFastHelpText( iActionIcons[ BOOT_DOOR_ICON ], zDisp );
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, AP_BOOT_DOOR, BP_BOOT_DOOR, FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_BOOT_DOOR], APBPConstants[BP_BOOT_DOOR], FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
{
DisableButton( iActionIcons[ BOOT_DOOR_ICON ] );
}
@@ -2478,11 +2478,11 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
}
else
{
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ UNTRAP_DOOR_ICON ], AP_UNTRAP_DOOR );
swprintf( zDisp, L"%s ( %d )", pTacticalPopupButtonStrings[ UNTRAP_DOOR_ICON ], APBPConstants[AP_UNTRAP_DOOR] );
}
SetButtonFastHelpText( iActionIcons[ UNTRAP_DOOR_ICON ], zDisp );
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, AP_UNTRAP_DOOR, BP_UNTRAP_DOOR, FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
if ( !EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_UNTRAP_DOOR], APBPConstants[BP_UNTRAP_DOOR], FALSE ) || fClosingDoor || AM_AN_EPC( gOpenDoorMenu.pSoldier ) )
{
DisableButton( iActionIcons[ UNTRAP_DOOR_ICON ] );
}
@@ -2599,7 +2599,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason)
{
// Open door normally...
// Check APs
if ( EnoughPoints( gOpenDoorMenu.pSoldier, AP_OPEN_DOOR, BP_OPEN_DOOR, FALSE ) )
if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_OPEN_DOOR], APBPConstants[BP_OPEN_DOOR], FALSE ) )
{
// Set UI
SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID );
@@ -2623,7 +2623,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason)
if ( uiBtnID == iActionIcons[ BOOT_DOOR_ICON ] )
{
// Boot door
if ( EnoughPoints( gOpenDoorMenu.pSoldier, AP_BOOT_DOOR, BP_BOOT_DOOR, FALSE ) )
if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_BOOT_DOOR], APBPConstants[BP_BOOT_DOOR], FALSE ) )
{
// Set UI
SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID );
@@ -2640,7 +2640,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason)
if ( uiBtnID == iActionIcons[ USE_KEYRING_ICON ] )
{
// Unlock door
if ( EnoughPoints( gOpenDoorMenu.pSoldier, AP_UNLOCK_DOOR, BP_UNLOCK_DOOR, FALSE ) )
if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_UNLOCK_DOOR], APBPConstants[BP_UNLOCK_DOOR], FALSE ) )
{
// Set UI
SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID );
@@ -2657,7 +2657,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason)
if ( uiBtnID == iActionIcons[ LOCKPICK_DOOR_ICON ] )
{
// Lockpick
if ( EnoughPoints( gOpenDoorMenu.pSoldier, AP_PICKLOCK, BP_PICKLOCK, FALSE ) )
if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_PICKLOCK], APBPConstants[BP_PICKLOCK], FALSE ) )
{
// Set UI
SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID );
@@ -2674,7 +2674,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason)
if ( uiBtnID == iActionIcons[ EXAMINE_DOOR_ICON ] )
{
// Lockpick
if ( EnoughPoints( gOpenDoorMenu.pSoldier, AP_EXAMINE_DOOR, BP_EXAMINE_DOOR, FALSE ) )
if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_EXAMINE_DOOR], APBPConstants[BP_EXAMINE_DOOR], FALSE ) )
{
// Set UI
SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID );
@@ -2691,7 +2691,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason)
if ( uiBtnID == iActionIcons[ EXPLOSIVE_DOOR_ICON ] )
{
// Explode
if ( EnoughPoints( gOpenDoorMenu.pSoldier, AP_EXPLODE_DOOR, BP_EXPLODE_DOOR, FALSE ) )
if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_EXPLODE_DOOR], APBPConstants[BP_EXPLODE_DOOR], FALSE ) )
{
// Set UI
SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID );
@@ -2708,7 +2708,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason)
if ( uiBtnID == iActionIcons[ UNTRAP_DOOR_ICON ] )
{
// Explode
if ( EnoughPoints( gOpenDoorMenu.pSoldier, AP_UNTRAP_DOOR, BP_UNTRAP_DOOR, FALSE ) )
if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_UNTRAP_DOOR], APBPConstants[BP_UNTRAP_DOOR], FALSE ) )
{
// Set UI
SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID );
@@ -2725,7 +2725,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason)
if ( uiBtnID == iActionIcons[ USE_CROWBAR_ICON ] )
{
// Explode
if ( EnoughPoints( gOpenDoorMenu.pSoldier, AP_USE_CROWBAR, BP_USE_CROWBAR, FALSE ) )
if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_USE_CROWBAR], APBPConstants[BP_USE_CROWBAR], FALSE ) )
{
// Set UI
SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID );
+17 -16
View File
@@ -1962,7 +1962,7 @@ BOOLEAN ValidAttachment( UINT16 usAttachment, UINT16 usItem, UINT8 * pubAPCost )
{
INT32 iLoop = 0;
if (pubAPCost) {
*pubAPCost = (UINT8)AP_RELOAD_GUN; //default value
*pubAPCost = (UINT8)APBPConstants[AP_RELOAD_GUN]; //default value
}
// look for the section of the array pertaining to this attachment...
@@ -2837,7 +2837,7 @@ BOOLEAN PlaceObjectAtObjectIndex( OBJECTTYPE * pSourceObj, OBJECTTYPE * pTargetO
BOOLEAN ReloadGun( SOLDIERTYPE * pSoldier, OBJECTTYPE * pGun, OBJECTTYPE * pAmmo, UINT32 subObject )
{
UINT16 ubBulletsToMove;
INT8 bAPs;
INT16 bAPs;
UINT16 usReloadSound;
BOOLEAN fSameAmmoType;
BOOLEAN fSameMagazineSize;
@@ -3008,7 +3008,7 @@ BOOLEAN ReloadGun( SOLDIERTYPE * pSoldier, OBJECTTYPE * pGun, OBJECTTYPE * pAmmo
bAPs = GetAPsToReloadGunWithAmmo( pSoldier, pGun, pAmmo, 2 );
for(int i = 0; i<ubBulletsToMove; i++)
{
if(EnoughPoints(pSoldier, (bAPs+(i*gGameExternalOptions.ubAPCostPerRound)), 0, FALSE) == FALSE)
if(EnoughPoints(pSoldier, (bAPs+(i*APBPConstants[AP_RELOAD_LOOSE])), 0, FALSE) == FALSE)
{
ubBulletsToMove = i+1;
break;
@@ -3042,7 +3042,7 @@ BOOLEAN ReloadGun( SOLDIERTYPE * pSoldier, OBJECTTYPE * pGun, OBJECTTYPE * pAmmo
// (suppose his inventory is full!)
//ADB copying the old ammo to the cursor at any time will screw it up if the cursor ammo is a stack!
if ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT) && !EnoughPoints( pSoldier, (INT8) (bAPs + AP_PICKUP_ITEM), 0, FALSE )
if ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT) && !EnoughPoints( pSoldier, (INT8) (bAPs + APBPConstants[AP_PICKUP_ITEM]), 0, FALSE )
|| pAmmo->ubNumberOfObjects > 1)
{
// try autoplace
@@ -3312,7 +3312,8 @@ INT8 FindAmmoToReload( SOLDIERTYPE * pSoldier, INT8 bWeaponIn, INT8 bExcludeSlot
BOOLEAN AutoReload( SOLDIERTYPE * pSoldier )
{
OBJECTTYPE *pObj, *pObj2;
INT8 bSlot, bAPCost;
INT8 bSlot;
INT16 bAPCost;
BOOLEAN fRet;
CHECKF( pSoldier );
@@ -6560,7 +6561,7 @@ BOOLEAN ApplyCammo( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN *pfGoodAP
return( FALSE );
}
if (!EnoughPoints( pSoldier, AP_CAMOFLAGE, 0, TRUE ) )
if (!EnoughPoints( pSoldier, APBPConstants[AP_CAMOFLAGE], 0, TRUE ) )
{
(*pfGoodAPs) = FALSE;
return( TRUE );
@@ -6601,7 +6602,7 @@ BOOLEAN ApplyCammo( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN *pfGoodAP
UseKitPoints( pObj, bPointsToUse, pSoldier );
DeductPoints( pSoldier, AP_CAMOFLAGE, 0 );
DeductPoints( pSoldier, APBPConstants[AP_CAMOFLAGE], 0 );
// Reload palettes....
if ( pSoldier->bInSector )
@@ -6631,7 +6632,7 @@ BOOLEAN ApplyCanteen( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN *pfGood
return( FALSE );
}
if (!EnoughPoints( pSoldier, AP_DRINK, 0, TRUE ) )
if (!EnoughPoints( pSoldier, APBPConstants[AP_DRINK], 0, TRUE ) )
{
(*pfGoodAPs) = FALSE;
return( TRUE );
@@ -6652,7 +6653,7 @@ BOOLEAN ApplyCanteen( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN *pfGood
sPointsToUse = __min( 20, usTotalKitPoints );
// CJC Feb 9. Canteens don't seem effective enough, so doubled return from them
DeductPoints( pSoldier, AP_DRINK, (INT16) (2 * sPointsToUse * -(100 - pSoldier->bBreath) ) );
DeductPoints( pSoldier, APBPConstants[AP_DRINK], (INT16) (2 * sPointsToUse * -(100 - pSoldier->bBreath) ) );
UseKitPoints( pObj, sPointsToUse, pSoldier );
@@ -6680,13 +6681,13 @@ BOOLEAN ApplyElixir( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN *pfGoodA
return( FALSE );
}
if (!EnoughPoints( pSoldier, AP_CAMOFLAGE, 0, TRUE ) )
if (!EnoughPoints( pSoldier, APBPConstants[AP_CAMOFLAGE], 0, TRUE ) )
{
(*pfGoodAPs) = FALSE;
return( TRUE );
}
DeductPoints( pSoldier, AP_CAMOFLAGE, 0 );
DeductPoints( pSoldier, APBPConstants[AP_CAMOFLAGE], 0 );
sPointsToUse = ( MAX_HUMAN_CREATURE_SMELL - pSoldier->aiData.bMonsterSmell ) * 2;
sPointsToUse = __min( sPointsToUse, usTotalKitPoints );
@@ -6863,7 +6864,7 @@ void DumpItemsList( void )
const INT8 STANDARD_STATUS_CUTOFF = 85;
// Scale bonus with item status
INT16 BonusReduce( INT16 bonus, INT16 status, INT8 statusCutoff = STANDARD_STATUS_CUTOFF )
INT16 BonusReduce( INT16 bonus, INT16 status, INT16 statusCutoff = STANDARD_STATUS_CUTOFF )
{
if ( bonus > 0 && status < statusCutoff && statusCutoff > 0 && statusCutoff <= 100 )
return ( ( status * 100 ) / statusCutoff * bonus ) / 100;
@@ -6872,7 +6873,7 @@ INT16 BonusReduce( INT16 bonus, INT16 status, INT8 statusCutoff = STANDARD_STATU
}
// Scale bonus with item status. Status < 50% creates a penalty!
INT16 BonusReduceMore( INT16 bonus, INT16 status, INT8 statusCutoff = 100 )
INT16 BonusReduceMore( INT16 bonus, INT16 status, INT16 statusCutoff = 100 )
{
if ( bonus > 0 && status < statusCutoff && statusCutoff > 0 && statusCutoff <= 100 )
return ( ( ( status * 100 ) / statusCutoff - 50 ) * bonus ) / 50;
@@ -6907,7 +6908,7 @@ BOOLEAN IsScoped( OBJECTTYPE * pObj )
}
// Snap: get aim bonus for a single item
INT16 GetItemAimBonus( const INVTYPE* pItem, INT32 iRange, UINT8 ubAimTime )
INT16 GetItemAimBonus( const INVTYPE* pItem, INT32 iRange, INT16 ubAimTime )
{
if ( iRange <= pItem->minrangeforaimbonus ) return 0;
@@ -6937,7 +6938,7 @@ INT16 GetItemAimBonus( const INVTYPE* pItem, INT32 iRange, UINT8 ubAimTime )
return(bonus);
}
INT16 GetAimBonus( OBJECTTYPE * pObj, INT32 iRange, UINT8 ubAimTime )
INT16 GetAimBonus( OBJECTTYPE * pObj, INT32 iRange, INT16 ubAimTime )
{
INT16 bonus = 0;
@@ -6954,7 +6955,7 @@ INT16 GetAimBonus( OBJECTTYPE * pObj, INT32 iRange, UINT8 ubAimTime )
}
// Madd: check equipment for aim bonus (penalties)
INT16 GetGearAimBonus( SOLDIERTYPE * pSoldier, INT32 iRange, UINT8 ubAimTime )
INT16 GetGearAimBonus( SOLDIERTYPE * pSoldier, INT32 iRange, INT16 ubAimTime )
{
INT16 bonus=0;
+3 -2
View File
@@ -213,7 +213,7 @@ UINT16 MagazineClassIndexToItemType(UINT16 usMagIndex);
// Item property-related stuff added by Madd Mugsy
BOOLEAN IsScoped( OBJECTTYPE * pObj );
INT16 GetAimBonus( OBJECTTYPE * pObj, INT32 iRange, UINT8 ubAimTime );
INT16 GetAimBonus( OBJECTTYPE * pObj, INT32 iRange, INT16 ubAimTime );
INT16 GetMinAimBonusRange( OBJECTTYPE * pObj );
INT16 GetToHitBonus( OBJECTTYPE * pObj, INT32 iRange, UINT8 bLightLevel, BOOLEAN fProneStance = FALSE );
UINT32 FindRangeBonusAttachment( OBJECTTYPE * pObj );
@@ -300,7 +300,7 @@ INT16 GetStealthBonus( OBJECTTYPE * pObj );
void ApplyEquipmentBonuses(SOLDIERTYPE * pSoldier);
INT16 GetGearAimBonus( SOLDIERTYPE * pSoldier, INT32 iRange, UINT8 ubAimTime);
INT16 GetGearAimBonus( SOLDIERTYPE * pSoldier, INT32 iRange, INT16 ubAimTime);
INT16 GetGearToHitBonus( SOLDIERTYPE * pSoldier );
INT16 GetGearAPBonus( SOLDIERTYPE * pSoldier );
@@ -324,3 +324,4 @@ INT16 GetSnowCamoBonus( OBJECTTYPE * pObj );
#endif
+1 -1
View File
@@ -2268,7 +2268,7 @@ BOOLEAN BulletHitMerc( BULLET * pBullet, STRUCTURE * pStructure, BOOLEAN fIntend
SWeaponHit.usWeaponIndex = pFirer->usAttackingWeapon;
SWeaponHit.sDamage = (INT16) iDamage;
// breath loss is based on original impact of bullet
SWeaponHit.sBreathLoss = (INT16) ( (iImpact * BP_GET_WOUNDED * (pTarget->bBreathMax * 100 - pTarget->sBreathRed)) / 10000 );
SWeaponHit.sBreathLoss = (INT16) ( (iImpact * APBPConstants[BP_GET_WOUNDED] * (pTarget->bBreathMax * 100 - pTarget->sBreathRed)) / 10000 );
SWeaponHit.usDirection = GetDirectionFromGridNo( pFirer->sGridNo, pTarget );
SWeaponHit.sXPos = (INT16)pTarget->dXPos;
SWeaponHit.sYPos = (INT16)pTarget->dYPos;
+15 -14
View File
@@ -1289,7 +1289,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1315,7 +1315,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1362,7 +1362,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1411,7 +1411,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1438,7 +1438,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1479,7 +1479,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1513,7 +1513,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1545,7 +1545,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1608,7 +1608,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1662,7 +1662,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1713,7 +1713,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1750,7 +1750,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1825,7 +1825,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
DeductPoints( pSoldier, AP_TALK, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
StatChange( pSoldier, LDRAMT, 1, FALSE );
}
@@ -1884,7 +1884,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
//if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
//{
// DeductPoints( pSoldier, AP_TALK, 0 );
// DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
//}
// // stop showing menu
@@ -2372,3 +2372,4 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
//}
+13 -14
View File
@@ -1977,13 +1977,13 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
// Do we have APs?
if((UsingNewInventorySystem() == true) && pSoldier->inv[BPACKPOCKPOS].exists() == true)
{
sAPCost = AP_JUMPFENCEBPACK;
sBPCost = BP_JUMPFENCEBPACK;
sAPCost = APBPConstants[AP_JUMPFENCEBPACK];
sBPCost = APBPConstants[BP_JUMPFENCEBPACK];
}
else
{
sAPCost = AP_JUMPFENCE;
sBPCost = BP_JUMPFENCE;
sAPCost = APBPConstants[AP_JUMPFENCE];
sBPCost = APBPConstants[BP_JUMPFENCE];
}
@@ -7111,7 +7111,6 @@ INT8 CalcSuppressionTolerance( SOLDIERTYPE * pSoldier )
return( bTolerance );
}
#define MAX_APS_SUPPRESSED 8
void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
{
INT8 bTolerance;
@@ -7133,7 +7132,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("HandleSuppressionFire: figure out aps lost"));
// multiply by 2, add 1 and divide by 2 to round off to nearest whole number
ubPointsLost = ( ((pSoldier->ubSuppressionPoints * 6) / (bTolerance + 6)) * 2 + 1 ) / 2;
ubPointsLost = (UINT8)( (FLOAT)((pSoldier->ubSuppressionPoints * APBPConstants[AP_SUPPRESSION_MOD]) / (bTolerance + 6)) * 2 + 1 ) / 2;
// reduce loss of APs based on stance
// ATE: Taken out because we can possibly supress ourselves...
@@ -7150,9 +7149,9 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
//}
// cap the # of APs we can lose
if (ubPointsLost > MAX_APS_SUPPRESSED)
if (ubPointsLost > APBPConstants[AP_MAX_SUPPRESSED])
{
ubPointsLost = MAX_APS_SUPPRESSED;
ubPointsLost = (UINT8)APBPConstants[AP_MAX_SUPPRESSED];
}
ubTotalPointsLost = ubPointsLost;
@@ -7187,21 +7186,21 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
// can't change stance below prone!
break;
case ANIM_CROUCH:
if (ubTotalPointsLost >= AP_PRONE && IsValidStance( pSoldier, ANIM_PRONE ) )
if (ubTotalPointsLost >= APBPConstants[AP_PRONE] && IsValidStance( pSoldier, ANIM_PRONE ) )
{
sClosestOpponent = ClosestKnownOpponent( pSoldier, &sClosestOppLoc, NULL );
if (sClosestOpponent == NOWHERE || SpacesAway( pSoldier->sGridNo, sClosestOppLoc ) > 8)
{
if (ubPointsLost < AP_PRONE)
if (ubPointsLost < APBPConstants[AP_PRONE])
{
// Have to give APs back so that we can change stance without
// losing more APs
pSoldier->bActionPoints += (AP_PRONE - ubPointsLost);
pSoldier->bActionPoints += (APBPConstants[AP_PRONE] - ubPointsLost);
ubPointsLost = 0;
}
else
{
ubPointsLost -= AP_PRONE;
ubPointsLost -= APBPConstants[AP_PRONE];
}
ubNewStance = ANIM_PRONE;
}
@@ -7213,7 +7212,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
// can't change stance here!
break;
}
else if (ubTotalPointsLost >= (AP_CROUCH + AP_PRONE) && ( gAnimControl[ pSoldier->usAnimState ].ubEndHeight != ANIM_PRONE ) && IsValidStance( pSoldier, ANIM_PRONE ) )
else if (ubTotalPointsLost >= (APBPConstants[AP_CROUCH] + APBPConstants[AP_PRONE]) && ( gAnimControl[ pSoldier->usAnimState ].ubEndHeight != ANIM_PRONE ) && IsValidStance( pSoldier, ANIM_PRONE ) )
{
sClosestOpponent = ClosestKnownOpponent( pSoldier, &sClosestOppLoc, NULL );
if ( sClosestOpponent == NOWHERE || SpacesAway( pSoldier->sGridNo, sClosestOppLoc ) > 8 )
@@ -7235,7 +7234,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
ubNewStance = ANIM_CROUCH;
}
}
else if ( ubTotalPointsLost >= AP_CROUCH && ( gAnimControl[ pSoldier->usAnimState ].ubEndHeight != ANIM_CROUCH ) && IsValidStance( pSoldier, ANIM_CROUCH ) )
else if ( ubTotalPointsLost >= APBPConstants[AP_CROUCH] && ( gAnimControl[ pSoldier->usAnimState ].ubEndHeight != ANIM_CROUCH ) && IsValidStance( pSoldier, ANIM_CROUCH ) )
{
// crouch!
ubNewStance = ANIM_CROUCH;
+1 -1
View File
@@ -211,7 +211,7 @@ INT16 RecalculatePathCost( SOLDIERTYPE *pSoldier, UINT16 usMovementMode );
// Exporting these global variables
extern UINT32 guiPathingData[MAX_PATH_DATA_LENGTH];
extern UINT8 gubNPCAPBudget;
extern INT16 gubNPCAPBudget;
extern UINT16 gusNPCMovementMode;
extern UINT8 gubNPCDistLimit;
extern UINT8 gubNPCPathCount;
+44 -44
View File
@@ -119,7 +119,7 @@ struct path_s
TRAILCELLTYPE usCostToGo; //2
TRAILCELLTYPE usTotalCost; //2
INT8 bLevel; //1
UINT8 ubTotalAPCost; //1
INT16 ubTotalAPCost; //1
UINT8 ubLegDistance; //1
};
@@ -401,7 +401,7 @@ static path_t * pClosedHead;
#define BLUESTEPSTART 48
#define ORANGESTEPSTART 64
UINT8 gubNPCAPBudget = 0;
INT16 gubNPCAPBudget = 0;
UINT16 gusNPCMovementMode;
UINT8 gubNPCDistLimit = 0;
BOOLEAN gfNPCCircularDistLimit = FALSE;
@@ -1241,7 +1241,7 @@ INT16 AStarPathfinder::CalcStartingAP()
{
if ( movementMode == RUNNING && pSoldier->usAnimState != RUNNING )
{
startingAPCost = startingAPCost - AP_START_RUN_COST;
startingAPCost = startingAPCost - APBPConstants[AP_START_RUN_COST];
}
}
return startingAPCost;
@@ -1277,28 +1277,28 @@ INT16 AStarPathfinder::CalcAP(int const terrainCost, UINT8 const direction)
case TRAVELCOST_NONE: movementAPCost = 0; break;
case TRAVELCOST_DIRTROAD:
case TRAVELCOST_FLAT: movementAPCost = AP_MOVEMENT_FLAT; break;
case TRAVELCOST_FLAT: movementAPCost = APBPConstants[AP_MOVEMENT_FLAT]; break;
//case TRAVELCOST_BUMPY:
case TRAVELCOST_GRASS: movementAPCost = AP_MOVEMENT_GRASS; break;
case TRAVELCOST_GRASS: movementAPCost = APBPConstants[AP_MOVEMENT_GRASS]; break;
case TRAVELCOST_THICK: movementAPCost = AP_MOVEMENT_BUSH; break;
case TRAVELCOST_THICK: movementAPCost = APBPConstants[AP_MOVEMENT_BUSH]; break;
case TRAVELCOST_DEBRIS: movementAPCost = AP_MOVEMENT_RUBBLE; break;
case TRAVELCOST_DEBRIS: movementAPCost = APBPConstants[AP_MOVEMENT_RUBBLE]; break;
case TRAVELCOST_SHORE: movementAPCost = AP_MOVEMENT_SHORE; break; // wading shallow water
case TRAVELCOST_SHORE: movementAPCost = APBPConstants[AP_MOVEMENT_SHORE]; break; // wading shallow water
case TRAVELCOST_KNEEDEEP: movementAPCost = AP_MOVEMENT_LAKE; break; // wading waist/chest deep - very slow
case TRAVELCOST_KNEEDEEP: movementAPCost = APBPConstants[AP_MOVEMENT_LAKE]; break; // wading waist/chest deep - very slow
case TRAVELCOST_DEEPWATER: movementAPCost = AP_MOVEMENT_OCEAN; break; // can swim, so it's faster than wading
case TRAVELCOST_DEEPWATER: movementAPCost = APBPConstants[AP_MOVEMENT_OCEAN]; break; // can swim, so it's faster than wading
//case TRAVELCOST_VEINEND:
//case TRAVELCOST_VEINMID: movementAPCost = AP_MOVEMENT_FLAT; break;
//case TRAVELCOST_VEINMID: movementAPCost = APBPConstants[AP_MOVEMENT_FLAT]; break;
//case TRAVELCOST_DOOR: movementAPCost = AP_MOVEMENT_FLAT; break;
//case TRAVELCOST_DOOR: movementAPCost = APBPConstants[AP_MOVEMENT_FLAT]; break;
case TRAVELCOST_FENCE: movementAPCost = AP_JUMPFENCE; break;
case TRAVELCOST_FENCE: movementAPCost = APBPConstants[AP_JUMPFENCE]; break;
case TRAVELCOST_OBSTACLE:
default: return -1; // Cost too much to be considered!
@@ -1348,12 +1348,12 @@ INT16 AStarPathfinder::CalcAP(int const terrainCost, UINT8 const direction)
case RUNNING:
case WALKING :
// Here pessimistically assume the path will continue after hopping the fence
movementAPCost += AP_CROUCH;
movementAPCost += APBPConstants[AP_CROUCH];
break;
case SWATTING:
// Add cost to stand once there BEFORE jumping....
movementAPCost += AP_CROUCH;
movementAPCost += APBPConstants[AP_CROUCH];
break;
case CRAWLING:
@@ -1368,7 +1368,7 @@ INT16 AStarPathfinder::CalcAP(int const terrainCost, UINT8 const direction)
case RUNNING:
case WALKING :
// charge crouch APs for ducking head!
movementAPCost += AP_CROUCH;
movementAPCost += APBPConstants[AP_CROUCH];
break;
default:
@@ -1379,7 +1379,7 @@ INT16 AStarPathfinder::CalcAP(int const terrainCost, UINT8 const direction)
{
// Uh, there IS a cost to close the door too!
// Then if the door has to be unlocked to open there's the cost of locking and unlocking.
movementAPCost += AP_OPEN_DOOR + AP_OPEN_DOOR;
movementAPCost += APBPConstants[AP_OPEN_DOOR] + APBPConstants[AP_OPEN_DOOR];
fGoingThroughDoor = FALSE;
}
return movementAPCost;
@@ -2353,8 +2353,8 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
INT16 sCurPathNdx;
INT32 prevCost;
INT32 iWaterToWater;
UINT8 ubCurAPCost,ubAPCost;
UINT8 ubNewAPCost=0;
INT16 ubCurAPCost,ubAPCost;
INT16 ubNewAPCost=0;
#ifdef VEHICLE
//BOOLEAN fTurnSlow = FALSE;
//BOOLEAN fReverse = FALSE; // stuff for vehicles turning
@@ -3256,34 +3256,34 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
break;
case TRAVELCOST_DIRTROAD:
case TRAVELCOST_FLAT : ubAPCost = AP_MOVEMENT_FLAT;
case TRAVELCOST_FLAT : ubAPCost = APBPConstants[AP_MOVEMENT_FLAT];
break;
//case TRAVELCOST_BUMPY :
case TRAVELCOST_GRASS : ubAPCost = AP_MOVEMENT_GRASS;
case TRAVELCOST_GRASS : ubAPCost = APBPConstants[AP_MOVEMENT_GRASS];
break;
case TRAVELCOST_THICK : ubAPCost = AP_MOVEMENT_BUSH;
case TRAVELCOST_THICK : ubAPCost = APBPConstants[AP_MOVEMENT_BUSH];
break;
case TRAVELCOST_DEBRIS : ubAPCost = AP_MOVEMENT_RUBBLE;
case TRAVELCOST_DEBRIS : ubAPCost = APBPConstants[AP_MOVEMENT_RUBBLE];
break;
case TRAVELCOST_SHORE : ubAPCost = AP_MOVEMENT_SHORE; // wading shallow water
case TRAVELCOST_SHORE : ubAPCost = APBPConstants[AP_MOVEMENT_SHORE]; // wading shallow water
break;
case TRAVELCOST_KNEEDEEP: ubAPCost = AP_MOVEMENT_LAKE; // wading waist/chest deep - very slow
case TRAVELCOST_KNEEDEEP: ubAPCost = APBPConstants[AP_MOVEMENT_LAKE]; // wading waist/chest deep - very slow
break;
case TRAVELCOST_DEEPWATER:ubAPCost = AP_MOVEMENT_OCEAN; // can swim, so it's faster than wading
case TRAVELCOST_DEEPWATER:ubAPCost = APBPConstants[AP_MOVEMENT_OCEAN]; // can swim, so it's faster than wading
break;
//case TRAVELCOST_VEINEND :
//case TRAVELCOST_VEINMID : ubAPCost = AP_MOVEMENT_FLAT;
//case TRAVELCOST_VEINMID : ubAPCost = APBPConstants[AP_MOVEMENT_FLAT];
// break;
//case TRAVELCOST_DOOR : ubAPCost = AP_MOVEMENT_FLAT;
//case TRAVELCOST_DOOR : ubAPCost = APBPConstants[AP_MOVEMENT_FLAT];
// break;
case TRAVELCOST_FENCE :
if((UsingNewInventorySystem() == true) && s->inv[BPACKPOCKPOS].exists() == true)
ubAPCost = AP_JUMPFENCEBPACK;
ubAPCost = APBPConstants[AP_JUMPFENCEBPACK];
else
ubAPCost = AP_JUMPFENCE;
ubAPCost = APBPConstants[AP_JUMPFENCE];
/*
if ( sSwitchValue == TRAVELCOST_FENCE )
@@ -3301,7 +3301,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
// Since it's AFTER.. make sure we will be moving after jump...
if ( ( iCnt + 2 ) < iLastGrid )
{
sPoints += AP_CROUCH;
sPoints += APBPConstants[AP_CROUCH];
}
break;
@@ -3387,13 +3387,13 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
case RUNNING:
case WALKING :
// Here pessimistically assume the path will continue after hopping the fence
ubAPCost += AP_CROUCH;
ubAPCost += APBPConstants[AP_CROUCH];
break;
case SWATTING:
// Add cost to stand once there BEFORE jumping....
ubAPCost += AP_CROUCH;
ubAPCost += APBPConstants[AP_CROUCH];
break;
case CRAWLING:
@@ -3409,7 +3409,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
case RUNNING:
case WALKING :
// charge crouch APs for ducking head!
ubAPCost += AP_CROUCH;
ubAPCost += APBPConstants[AP_CROUCH];
break;
default:
@@ -3418,7 +3418,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
}
else if (fGoingThroughDoor)
{
ubAPCost += AP_OPEN_DOOR;
ubAPCost += APBPConstants[AP_OPEN_DOOR];
fGoingThroughDoor = FALSE;
}
@@ -4148,7 +4148,7 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
if (pSold->usAnimState != RUNNING)
{
// for estimation purposes, always pay penalty
sPointsRun = AP_START_RUN_COST;
sPointsRun = APBPConstants[AP_START_RUN_COST];
}
// Add to points, those needed to start from different stance!
@@ -4161,7 +4161,7 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
{
if ( usMovementMode == RUNNING && pSold->usAnimState != RUNNING )
{
sPoints -= AP_START_RUN_COST;
sPoints -= APBPConstants[AP_START_RUN_COST];
}
}
@@ -4170,17 +4170,17 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
switch(pSold->usAnimState)
{
//case START_AID :
//case GIVING_AID : sAnimCost = AP_STOP_FIRST_AID;
//case GIVING_AID : sAnimCost = APBPConstants[AP_STOP_FIRST_AID];
// break;
//case TWISTOMACH :
//case COLLAPSED : sAnimCost = AP_GET_UP;
//case COLLAPSED : sAnimCost = APBPConstants[AP_GET_UP];
// break;
//case TWISTBACK :
//case UNCONSCIOUS : sAnimCost = (AP_ROLL_OVER+AP_GET_UP);
//case UNCONSCIOUS : sAnimCost = (APBPConstants[AP_ROLL_OVER]+APBPConstants[AP_GET_UP]);
// break;
// case CROUCHING : if (usMovementMode == WALKING || usMovementMode == RUNNING)
// sAnimCost = AP_CROUCH;
// sAnimCost = APBPConstants[AP_CROUCH];
// break;
}
*/
@@ -4250,7 +4250,7 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
// Since it's AFTER.. make sure we will be moving after jump...
if ( ( iCnt + 2 ) < iLastGrid )
{
sExtraCostStand += AP_CROUCH;
sExtraCostStand += APBPConstants[AP_CROUCH];
// ATE: if running, charge extra point to srart again
if ( usMovementModeToUseForAPs== RUNNING )
@@ -4265,7 +4265,7 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
case SWATTING:
// Add cost to stand once there BEFORE....
sExtraCostSwat += AP_CROUCH;
sExtraCostSwat += APBPConstants[AP_CROUCH];
sPoints = sPoints + sExtraCostSwat;
break;
@@ -4287,7 +4287,7 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
case RUNNING:
case WALKING :
// charge crouch APs for ducking head!
sExtraCostStand += AP_CROUCH;
sExtraCostStand += APBPConstants[AP_CROUCH];
break;
default:
+199 -175
View File
File diff suppressed because it is too large Load Diff
+51 -46
View File
@@ -1,6 +1,8 @@
#ifndef __POINTS_H_
#define __POINTS_H_
#include "Init.h"
/*THESE ARE EXTERNALIZED NOW! AN ENUM WILL REFERENCE A CONSTANT ARRAY! 7/1/08 GOTTHARD
#define AP_MINIMUM 10 // no merc can have less for his turn
#define AP_MAXIMUM 25 // no merc can have more for his turn
#define AP_MONSTER_MAXIMUM 40 // no monster can have more for his turn
@@ -45,12 +47,12 @@
#define AP_TOSS_ITEM 8 // toss item from inv
#define AP_REFUEL_VEHICLE 10
/*
#define AP_MOVE_ITEM_FREE 0 // same place, pocket->pocket
#define AP_MOVE_ITEM_FAST 2 // hand, holster, ground only
#define AP_MOVE_ITEM_AVG 4 // everything else!
#define AP_MOVE_ITEM_SLOW 6 // vests, protective gear
*/
//#define AP_MOVE_ITEM_FREE 0 // same place, pocket->pocket
//#define AP_MOVE_ITEM_FAST 2 // hand, holster, ground only
//#define AP_MOVE_ITEM_AVG 4 // everything else!
//#define AP_MOVE_ITEM_SLOW 6 // vests, protective gear
#define AP_MOVE_ITEM_FAST 4 // hand, holster, ground only
#define AP_MOVE_ITEM_SLOW 6 // vests, protective gear
@@ -194,12 +196,12 @@
#define BP_JUMPFENCEBPACK 500 // BPs to jump fence
/*
#define BP_MOVE_ITEM_FREE 0 // same place, pocket->pocket
#define BP_MOVE_ITEM_FAST 0 // hand, holster, ground only
#define BP_MOVE_ITEM_AVG 0 // everything else!
#define BP_MOVE_ITEM_SLOW 20 // vests, protective gear
*/
//#define BP_MOVE_ITEM_FREE 0 // same place, pocket->pocket
//#define BP_MOVE_ITEM_FAST 0 // hand, holster, ground only
//#define BP_MOVE_ITEM_AVG 0 // everything else!
//#define BP_MOVE_ITEM_SLOW 20 // vests, protective gear
#define BP_MOVE_ITEM_FAST 0 // hand, holster, ground only
#define BP_MOVE_ITEM_SLOW 20 // vests, protective gear
@@ -267,12 +269,14 @@
#define BP_JUMP_OVER 250
#define DEFAULT_APS 20
#define DEFAULT_AIMSKILL 80
*/
UINT8 BaseAPsToShootOrStab( INT8 bAPs, INT8 bAimSkill, OBJECTTYPE * pObj );
//Just so the compiler will be able to use it in init.cpp, I'm a careful person. Gotthard 1/18/07
extern INT16 APBPConstants[TOTAL_APBP_VALUES];
INT16 BaseAPsToShootOrStab( INT16 bAPs, INT16 bAimSkill, OBJECTTYPE * pObj );
INT16 TerrainActionPoints( SOLDIERTYPE *pSoldier, INT16 sGridno, INT8 bDir, INT8 bLevel );
INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bDir, UINT16 usMovementMode );
@@ -284,63 +288,64 @@ void DeductPoints( SOLDIERTYPE *pSoldier, INT16 sAPCost, INT32 iBPCost, BOOLEAN
INT32 AdjustBreathPts(SOLDIERTYPE *pSold, INT32 iBPCost);
void UnusedAPsToBreath(SOLDIERTYPE *pSold);
INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT16 sGridno,INT8 bDir, UINT16 usMovementMode);
UINT8 MinAPsToAttack(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost = 0);
INT8 MinPtsToMove(SOLDIERTYPE *pSoldier);
INT16 MinAPsToAttack(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost = 0);
INT16 MinPtsToMove(SOLDIERTYPE *pSoldier);
INT8 MinAPsToStartMovement( SOLDIERTYPE * pSoldier, UINT16 usMovementMode );
INT8 PtsToMoveDirection(SOLDIERTYPE *pSoldier, INT8 bDirection );
UINT16 CalculateTurningCost(SOLDIERTYPE *pSoldier, UINT16 usItem, BOOLEAN fAddingTurningCost);
UINT16 CalculateRaiseGunCost(SOLDIERTYPE *pSoldier, BOOLEAN fAddingRaiseGunCost);
UINT8 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost = 0 );
INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost = 0 );
BOOLEAN EnoughAmmo( SOLDIERTYPE *pSoldier, BOOLEAN fDisplay, INT8 bInvPos );
void DeductAmmo( SOLDIERTYPE *pSoldier, INT8 bInvPos );
UINT16 GetAPsToPickupItem( SOLDIERTYPE *pSoldier, INT16 sMapPos );
UINT8 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost );
UINT8 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, INT8 bAimTime );
UINT8 CalcAPsToBurst( INT8 bBaseActionPoints, OBJECTTYPE * pObj );
UINT8 CalcAPsToAutofire( INT8 bBaseActionPoints, OBJECTTYPE * pObj, UINT8 bDoAutofire );
UINT16 GetAPsToChangeStance( SOLDIERTYPE *pSoldier, INT8 bDesiredHeight );
UINT16 GetBPsToChangeStance( SOLDIERTYPE *pSoldier, INT8 bDesiredHeight );
INT16 GetAPsToPickupItem( SOLDIERTYPE *pSoldier, INT16 sMapPos );
INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost );
INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, INT16 bAimTime );
INT16 CalcAPsToBurst( INT16 bBaseActionPoints, OBJECTTYPE * pObj );
INT16 CalcAPsToAutofire( INT16 bBaseActionPoints, OBJECTTYPE * pObj, UINT8 bDoAutofire );
INT16 GetAPsToChangeStance( SOLDIERTYPE *pSoldier, INT8 bDesiredHeight );
INT16 GetBPsToChangeStance( SOLDIERTYPE *pSoldier, INT8 bDesiredHeight );
UINT16 GetAPsToLook( SOLDIERTYPE *pSoldier );
UINT16 GetAPsToGiveItem( SOLDIERTYPE *pSoldier, INT16 sMapPos );
INT16 GetAPsToLook( SOLDIERTYPE *pSoldier );
INT16 GetAPsToGiveItem( SOLDIERTYPE *pSoldier, INT16 sMapPos );
BOOLEAN CheckForMercContMove( SOLDIERTYPE *pSoldier );
INT16 GetAPsToReadyWeapon( SOLDIERTYPE *pSoldier, UINT16 usAnimState );
INT8 GetAPsToClimbRoof( SOLDIERTYPE *pSoldier, BOOLEAN fClimbDown );
INT16 GetAPsToClimbRoof( SOLDIERTYPE *pSoldier, BOOLEAN fClimbDown );
INT16 GetBPsToClimbRoof( SOLDIERTYPE *pSoldier, BOOLEAN fClimbDown );
INT8 GetAPsToJumpFence( SOLDIERTYPE *pSoldier );
INT8 GetBPsToJumpFence( SOLDIERTYPE *pSoldier );
INT16 GetAPsToJumpFence( SOLDIERTYPE *pSoldier );
INT16 GetBPsToJumpFence( SOLDIERTYPE *pSoldier );
INT8 GetAPsToCutFence( SOLDIERTYPE *pSoldier );
INT8 GetAPsToBeginFirstAid( SOLDIERTYPE *pSoldier );
INT8 GetAPsToBeginRepair( SOLDIERTYPE *pSoldier );
INT8 GetAPsToRefuelVehicle( SOLDIERTYPE *pSoldier );
INT16 GetAPsToCutFence( SOLDIERTYPE *pSoldier );
INT16 GetAPsToBeginFirstAid( SOLDIERTYPE *pSoldier );
INT16 GetAPsToBeginRepair( SOLDIERTYPE *pSoldier );
INT16 GetAPsToRefuelVehicle( SOLDIERTYPE *pSoldier );
INT16 MinAPsToThrow( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurningCost );
UINT16 GetAPsToDropBomb( SOLDIERTYPE *pSoldier );
UINT16 GetTotalAPsToDropBomb( SOLDIERTYPE *pSoldier, INT16 sGridNo );
UINT16 GetAPsToUseRemote( SOLDIERTYPE *pSoldier );
INT16 GetAPsToDropBomb( SOLDIERTYPE *pSoldier );
INT16 GetAPsToPlantMine( SOLDIERTYPE *pSoldier );
INT16 GetTotalAPsToDropBomb( SOLDIERTYPE *pSoldier, INT16 sGridNo );
INT16 GetAPsToUseRemote( SOLDIERTYPE *pSoldier );
INT8 GetAPsToStealItem( SOLDIERTYPE *pSoldier, INT16 sMapPos );
INT8 GetBPsToStealItem( SOLDIERTYPE *pSoldier );
INT16 GetAPsToStealItem( SOLDIERTYPE *pSoldier, INT16 sMapPos );
INT16 GetBPsToStealItem( SOLDIERTYPE *pSoldier );
INT8 GetAPsToUseJar( SOLDIERTYPE *pSoldier, INT16 sMapPos );
INT8 GetAPsToUseCan( SOLDIERTYPE *pSoldier, INT16 sMapPos );
INT8 GetBPsTouseJar( SOLDIERTYPE *pSoldier );
INT16 GetAPsToUseJar( SOLDIERTYPE *pSoldier, INT16 sMapPos );
INT16 GetAPsToUseCan( SOLDIERTYPE *pSoldier, INT16 sMapPos );
INT16 GetBPsTouseJar( SOLDIERTYPE *pSoldier );
INT8 GetAPsToJumpOver( SOLDIERTYPE *pSoldier );
INT16 GetAPsToJumpOver( SOLDIERTYPE *pSoldier );
void GetAPChargeForShootOrStabWRTGunRaises( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurningCost, BOOLEAN *pfChargeTurning, BOOLEAN *pfChargeRaise );
UINT16 GetAPsToReloadRobot( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pRobot );
INT8 GetAPsToReloadGunWithAmmo( SOLDIERTYPE *pSoldier, OBJECTTYPE * pGun, OBJECTTYPE * pAmmo, BOOLEAN usAllAPs = TRUE );
INT8 GetAPsToAutoReload( SOLDIERTYPE * pSoldier );
INT16 GetAPsToReloadGunWithAmmo( SOLDIERTYPE *pSoldier, OBJECTTYPE * pGun, OBJECTTYPE * pAmmo, BOOLEAN usAllAPs = TRUE );
INT16 GetAPsToAutoReload( SOLDIERTYPE * pSoldier );
#endif
#endif
+1 -1
View File
@@ -1573,7 +1573,7 @@ INT16 FindNearestAvailableGridNoForCorpse( ROTTING_CORPSE_DEFINITION *pDef, INT8
INT32 leftmost;
BOOLEAN fFound = FALSE;
SOLDIERTYPE soldier;
UINT8 ubSaveNPCAPBudget;
INT16 ubSaveNPCAPBudget;
UINT8 ubSaveNPCDistLimit;
STRUCTURE_FILE_REF * pStructureFileRef = NULL;
CHAR8 zFilename[150];
+1 -1
View File
@@ -868,7 +868,7 @@ BOOLEAN EnterShopKeeperInterface()
{
// First calculate APs and validate...
// Check AP cost...
if ( !EnoughPoints( pSoldier, AP_TALK, 0, TRUE ) )
if ( !EnoughPoints( pSoldier, APBPConstants[AP_TALK], 0, TRUE ) )
{
return( FALSE );
}
+7 -6
View File
@@ -67,7 +67,7 @@ INT16 FindGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 u
INT32 leftmost;
BOOLEAN fFound = FALSE;
SOLDIERTYPE soldier;
UINT8 ubSaveNPCAPBudget;
INT16 ubSaveNPCAPBudget;
UINT8 ubSaveNPCDistLimit;
//Save AI pathing vars. changing the distlimit restricts how
@@ -168,7 +168,7 @@ INT16 FindGridNoFromSweetSpotThroughPeople( SOLDIERTYPE *pSoldier, INT16 sSweetG
INT32 leftmost;
BOOLEAN fFound = FALSE;
SOLDIERTYPE soldier;
UINT8 ubSaveNPCAPBudget;
INT16 ubSaveNPCAPBudget;
UINT8 ubSaveNPCDistLimit;
//Save AI pathing vars. changing the distlimit restricts how
@@ -267,7 +267,7 @@ INT16 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAni
INT32 leftmost;
BOOLEAN fFound = FALSE;
SOLDIERTYPE soldier;
UINT8 ubSaveNPCAPBudget;
INT16 ubSaveNPCAPBudget;
UINT8 ubSaveNPCDistLimit;
UINT8 ubBestDirection=0;
@@ -429,7 +429,7 @@ INT16 FindGridNoFromSweetSpotWithStructDataUsingGivenDirectionFirst( SOLDIERTYPE
INT32 leftmost;
BOOLEAN fFound = FALSE;
SOLDIERTYPE soldier;
UINT8 ubSaveNPCAPBudget;
INT16 ubSaveNPCAPBudget;
UINT8 ubSaveNPCDistLimit;
UINT8 ubBestDirection=0;
@@ -602,7 +602,7 @@ INT16 FindGridNoFromSweetSpotWithStructDataFromSoldier( SOLDIERTYPE *pSoldier, U
INT16 sLowestGridNo=-1;
INT32 leftmost;
BOOLEAN fFound = FALSE;
UINT8 ubSaveNPCAPBudget;
INT16 ubSaveNPCAPBudget;
UINT8 ubSaveNPCDistLimit;
UINT8 ubBestDirection=0;
INT16 sSweetGridNo;
@@ -933,7 +933,7 @@ INT16 FindRandomGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo,
BOOLEAN fFound = FALSE;
UINT32 cnt = 0;
SOLDIERTYPE soldier;
UINT8 ubSaveNPCAPBudget;
INT16 ubSaveNPCAPBudget;
UINT8 ubSaveNPCDistLimit;
INT16 sTop, sBottom;
INT16 sLeft, sRight;
@@ -1735,3 +1735,4 @@ INT16 GetSoldierIDFromMercID(UINT8 ubMercID)
}
+1 -1
View File
@@ -1010,7 +1010,7 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
else
{
// ATE: Deduct points!
DeductPoints( pSoldier, AP_TOSS_ITEM, 0 );
DeductPoints( pSoldier, APBPConstants[AP_TOSS_ITEM], 0 );
}
CreatePhysicalObject( pSoldier->pTempObject, pSoldier->pThrowParams->dLifeSpan, pSoldier->pThrowParams->dX, pSoldier->pThrowParams->dY, pSoldier->pThrowParams->dZ, pSoldier->pThrowParams->dForceX, pSoldier->pThrowParams->dForceY, pSoldier->pThrowParams->dForceZ, pSoldier->ubID, pSoldier->pThrowParams->ubActionCode, pSoldier->pThrowParams->uiActionData, FALSE );
+109 -58
View File
@@ -1792,11 +1792,11 @@ void HandleCrowShadowNewPosition( SOLDIERTYPE *pSoldier )
}
}
extern INT16 DynamicAdjustAPConstants(INT16 iniReadValue, INT16 iniDefaultValue, BOOLEAN reverse);
INT8 SOLDIERTYPE::CalcActionPoints( void )
INT16 SOLDIERTYPE::CalcActionPoints( void )
{
UINT8 ubPoints,ubMaxAPs;
INT16 ubPoints,ubMaxAPs;
INT8 bBandage;
// dead guys don't get any APs (they shouldn't be here asking for them!)
@@ -1807,15 +1807,20 @@ INT8 SOLDIERTYPE::CalcActionPoints( void )
if ( (this->bSleepDrugCounter > 0) && this->bCollapsed )
return( 0 );
//CHRISL: Update this calucalation to give a default range of 40-100
// Calculate merc's action points at 100% capability (range is 10 - 25)
// round fractions of .5 up (that's why the +20 before the division!
ubPoints = 5 + (((10 * EffectiveExpLevel( this ) +
//ubPoints = 5 + (((10 * EffectiveExpLevel( this ) +
// 3 * EffectiveAgility( this ) +
// 2 * this->stats.bLifeMax +
// 2 * EffectiveDexterity( this ) ) + 20) / 40);
ubPoints = 20 + (((10 * EffectiveExpLevel( this ) +
3 * EffectiveAgility( this ) +
2 * this->stats.bLifeMax +
2 * EffectiveDexterity( this ) ) + 20) / 40);
2 * EffectiveDexterity( this ) ) + 5) / 10);
//if (GameOption[INCREASEDAP] % 2 == 1)
//points += AP_INCREASE;
//points += APBPConstants[AP_INCREASE];
//Madd: Add in AP Bonuses (Penalties) from worn gear
ubPoints += GetGearAPBonus ( this );
@@ -1840,14 +1845,18 @@ INT8 SOLDIERTYPE::CalcActionPoints( void )
}
// If resulting APs are below our permitted minimum, raise them to it!
if (ubPoints < AP_MINIMUM)
ubPoints = AP_MINIMUM;
if (ubPoints < APBPConstants[AP_MINIMUM])
ubPoints = APBPConstants[AP_MINIMUM];
//CHRISL: Moved this down here so that all ubPoints adjustments can be made to the default 100AP system
// Adjust ubPoints based on actual AP_MAXIMUM setting
ubPoints = DynamicAdjustAPConstants(ubPoints, ubPoints);
// make sure action points doesn't exceed the permitted maximum
ubMaxAPs = gubMaxActionPoints[ this->ubBodyType ];
//if (GameOption[INCREASEDAP] % 2 == 1)
// maxAPs += AP_INCREASE;
// maxAPs += APBPConstants[AP_INCREASE];
// If resulting APs are below our permitted minimum, raise them to it!
@@ -1857,21 +1866,21 @@ INT8 SOLDIERTYPE::CalcActionPoints( void )
if ( this->ubBodyType == BLOODCAT )
{
// use same as young monsters
ubPoints = (ubPoints * AP_YOUNG_MONST_FACTOR) / 10;
ubPoints = (ubPoints * APBPConstants[AP_YOUNG_MONST_FACTOR]) / 10;
}
else if (this->flags.uiStatusFlags & SOLDIER_MONSTER)
{
// young monsters get extra APs
if ( this->ubBodyType == YAF_MONSTER || this->ubBodyType == YAM_MONSTER || this->ubBodyType == INFANT_MONSTER )
{
ubPoints = (ubPoints * AP_YOUNG_MONST_FACTOR) / 10;
ubPoints = (ubPoints * APBPConstants[AP_YOUNG_MONST_FACTOR]) / 10;
}
// if frenzied, female monsters get more APs! (for young females, cumulative!)
if (this->aiData.bFrenzied)
{
ubPoints = (ubPoints * AP_MONST_FRENZY_FACTOR) / 10;
ubPoints = (ubPoints * APBPConstants[AP_MONST_FRENZY_FACTOR]) / 10;
}
}
@@ -1880,11 +1889,11 @@ INT8 SOLDIERTYPE::CalcActionPoints( void )
{
if ( (gMercProfiles[ this->ubProfile ].bPersonalityTrait == CLAUSTROPHOBIC) && (gbWorldSectorZ > 0) )
{
ubPoints = (ubPoints * AP_CLAUSTROPHOBE) / 10;
ubPoints = (ubPoints * APBPConstants[AP_CLAUSTROPHOBE]) / 10;
}
else if ( (gMercProfiles[ this->ubProfile ].bPersonalityTrait == FEAR_OF_INSECTS) && (MercSeesCreature( this ) ) )
{
ubPoints = (ubPoints * AP_AFRAID_OF_INSECTS) / 10;
ubPoints = (ubPoints * APBPConstants[AP_AFRAID_OF_INSECTS]) / 10;
}
}
@@ -1950,16 +1959,17 @@ void SOLDIERTYPE::CalcNewActionPoints( void )
if ( gTacticalStatus.bBoxingState == BOXING || gTacticalStatus.bBoxingState == PRE_BOXING )
{
// if we are in boxing mode, carry 1/2 as many points
if (this->bActionPoints > MAX_AP_CARRIED / 2)
if (this->bActionPoints > APBPConstants[MAX_AP_CARRIED] / 2)
{
this->bActionPoints = MAX_AP_CARRIED / 2;
this->bActionPoints = APBPConstants[MAX_AP_CARRIED] / 2;
}
}
else
{
if (this->bActionPoints > MAX_AP_CARRIED)
//POSSIBLE STRUCTURE CHANGE PROBLEM, NOT CURRENTLY CHANGED. GOTTHARD 7/14/08
if (this->bActionPoints > APBPConstants[MAX_AP_CARRIED])
{
this->bActionPoints = MAX_AP_CARRIED;
this->bActionPoints = APBPConstants[MAX_AP_CARRIED];
}
}
@@ -3301,11 +3311,11 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
// CHRISL
if((UsingNewInventorySystem() == true) && this->inv[BPACKPOCKPOS].exists() == true)
{
sAPCost = AP_START_RUN_COST + 2;
sAPCost = APBPConstants[AP_START_RUN_COST] + 2;
sBPCost += 2;
}
else
sAPCost = AP_START_RUN_COST;
sAPCost = APBPConstants[AP_START_RUN_COST];
DeductPoints( this, sAPCost, sBPCost );
}
// Set pending action count to 0
@@ -3333,24 +3343,24 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
{
if(usNewState == KNEEL_UP || usNewState == BIGMERC_CROUCH_TRANS_OUTOF)
{
sAPCost=AP_CROUCH+2;
sBPCost=BP_CROUCH+2;
sAPCost=APBPConstants[AP_CROUCH]+2;
sBPCost=APBPConstants[BP_CROUCH]+2;
}
else if(usNewState == KNEEL_DOWN || usNewState == BIGMERC_CROUCH_TRANS_INTO)
{
sAPCost=AP_CROUCH+1;
sBPCost=BP_CROUCH+1;
sAPCost=APBPConstants[AP_CROUCH]+1;
sBPCost=APBPConstants[BP_CROUCH]+1;
}
else
{
sAPCost=AP_CROUCH;
sBPCost=BP_CROUCH;
sAPCost=APBPConstants[AP_CROUCH];
sBPCost=APBPConstants[BP_CROUCH];
}
}
else
{
sAPCost=AP_CROUCH;
sBPCost=BP_CROUCH;
sAPCost=APBPConstants[AP_CROUCH];
sBPCost=APBPConstants[BP_CROUCH];
}
DeductPoints( this, sAPCost, sBPCost );
}
@@ -3371,19 +3381,19 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
{
if(usNewState == PRONE_UP)
{
sAPCost=AP_PRONE+2;
sBPCost=BP_PRONE+2;
sAPCost=APBPConstants[AP_PRONE]+2;
sBPCost=APBPConstants[BP_PRONE]+2;
}
else
{
sAPCost=AP_PRONE+1;
sBPCost=BP_PRONE+1;
sAPCost=APBPConstants[AP_PRONE]+1;
sBPCost=APBPConstants[BP_PRONE]+1;
}
}
else
{
sAPCost=AP_PRONE;
sBPCost=BP_PRONE;
sAPCost=APBPConstants[AP_PRONE];
sBPCost=APBPConstants[BP_PRONE];
}
DeductPoints( this, sAPCost, sBPCost );
}
@@ -3398,21 +3408,24 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
case START_AID:
DeductPoints( this, AP_START_FIRST_AID, BP_START_FIRST_AID );
DeductPoints( this, APBPConstants[AP_START_FIRST_AID], APBPConstants[BP_START_FIRST_AID] );
break;
case CUTTING_FENCE:
DeductPoints( this, AP_USEWIRECUTTERS, BP_USEWIRECUTTERS );
DeductPoints( this, APBPConstants[AP_USEWIRECUTTERS], APBPConstants[BP_USEWIRECUTTERS] );
break;
case PLANT_BOMB:
DeductPoints( this, AP_DROP_BOMB, 0 );
if(Item[this->inv[HANDPOS].usItem].mine == 1) // bury a mine
DeductPoints( this, APBPConstants[AP_BURY_MINE], APBPConstants[BP_BURY_MINE] );
else
DeductPoints( this, APBPConstants[AP_DROP_BOMB], APBPConstants[BP_DROP_BOMB] );
break;
case STEAL_ITEM:
DeductPoints( this, AP_STEAL_ITEM, 0 );
DeductPoints( this, APBPConstants[AP_STEAL_ITEM], 0 );
break;
case CROW_DIE:
@@ -3440,7 +3453,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
case USE_REMOTE:
DeductPoints( this, AP_USE_REMOTE, 0 );
DeductPoints( this, APBPConstants[AP_USE_REMOTE], 0 );
break;
//case PUNCH:
@@ -3454,21 +3467,21 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
// CHRISL
if((UsingNewInventorySystem() == true) && this->inv[BPACKPOCKPOS].exists() == true)
DeductPoints( this, AP_JUMPFENCEBPACK, BP_JUMPFENCEBPACK );
DeductPoints( this, APBPConstants[AP_JUMPFENCEBPACK], APBPConstants[BP_JUMPFENCEBPACK] );
else
DeductPoints( this, AP_JUMPFENCE, BP_JUMPFENCE );
DeductPoints( this, APBPConstants[AP_JUMPFENCE], APBPConstants[BP_JUMPFENCE] );
break;
// Deduct aps for falling down....
case FALLBACK_HIT_STAND:
case FALLFORWARD_FROMHIT_STAND:
DeductPoints( this, AP_FALL_DOWN, BP_FALL_DOWN );
DeductPoints( this, APBPConstants[AP_FALL_DOWN], APBPConstants[BP_FALL_DOWN] );
break;
case FALLFORWARD_FROMHIT_CROUCH:
DeductPoints( this, (AP_FALL_DOWN/2), (BP_FALL_DOWN/2) );
DeductPoints( this, (APBPConstants[AP_FALL_DOWN]/2), (APBPConstants[BP_FALL_DOWN]/2) );
break;
case QUEEN_SWIPE:
@@ -3482,7 +3495,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
// disable sight
gTacticalStatus.uiFlags |= DISALLOW_SIGHT;
DeductPoints( this, AP_CLIMBOFFROOF, BP_CLIMBOFFROOF );
DeductPoints( this, APBPConstants[AP_CLIMBOFFROOF], APBPConstants[BP_CLIMBOFFROOF] );
break;
case CLIMBUPROOF:
@@ -3490,7 +3503,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
// disable sight
gTacticalStatus.uiFlags |= DISALLOW_SIGHT;
DeductPoints( this, AP_CLIMBROOF, BP_CLIMBROOF );
DeductPoints( this, APBPConstants[AP_CLIMBROOF], APBPConstants[BP_CLIMBROOF] );
break;
case JUMP_OVER_BLOCKING_PERSON:
@@ -3499,7 +3512,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
{
INT16 sNewGridNo;
DeductPoints( this, AP_JUMP_OVER, BP_JUMP_OVER );
DeductPoints( this, APBPConstants[AP_JUMP_OVER], APBPConstants[BP_JUMP_OVER] );
sNewGridNo = NewGridNo( (INT16)this->sGridNo, DirectionInc( this->ubDirection ) );
sNewGridNo = NewGridNo( (INT16)sNewGridNo, DirectionInc( this->ubDirection ) );
@@ -4714,7 +4727,7 @@ BOOLEAN SOLDIERTYPE::InternalSoldierReadyWeapon( UINT8 sFacingDir, BOOLEAN fEndR
// Check if facing dir is different from ours and change direction if so!
//if ( sFacingDir != this->ubDirection )
//{
// DeductPoints( this, AP_CHANGE_FACING, 0 );
// DeductPoints( this, APBPConstants[AP_CHANGE_FACING], 0 );
//}//
}
@@ -4960,7 +4973,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1
// setting new func to intercept testhit
else if ( Item[ usWeaponIndex ].usItemClass & ( IC_GUN | IC_THROWING_KNIFE ) && ubAttackerID == NOBODY)
{
sBreathLoss += BP_GET_HIT;
sBreathLoss += APBPConstants[BP_GET_HIT];
ubReason = TAKE_DAMAGE_GUNFIRE;
}
// callahan update end
@@ -5001,12 +5014,12 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1
// Dirty panel
fInterfacePanelDirty = DIRTYLEVEL2;
}
sBreathLoss += BP_GET_HIT;
sBreathLoss += APBPConstants[BP_GET_HIT];
ubReason = TAKE_DAMAGE_GUNFIRE;
}
else if ( Item[ usWeaponIndex ].usItemClass & IC_BLADE )
{
sBreathLoss = BP_GET_HIT;
sBreathLoss = APBPConstants[BP_GET_HIT];
ubReason = TAKE_DAMAGE_BLADE;
}
else if ( Item[ usWeaponIndex ].usItemClass & IC_PUNCH )
@@ -6339,15 +6352,15 @@ void EVENT_InternalSetSoldierDesiredDirection( SOLDIERTYPE *pSoldier, UINT8 ubNe
{
// Now change to appropriate animation
case ANIM_STAND:
DeductPoints( pSoldier, AP_LOOK_STANDING, 0 );
DeductPoints( pSoldier, APBPConstants[AP_LOOK_STANDING], 0 );
break;
case ANIM_CROUCH:
DeductPoints( pSoldier, AP_LOOK_CROUCHED, 0 );
DeductPoints( pSoldier, APBPConstants[AP_LOOK_CROUCHED], 0 );
break;
case ANIM_PRONE:
DeductPoints( pSoldier, AP_LOOK_PRONE, 0 );
DeductPoints( pSoldier, APBPConstants[AP_LOOK_PRONE], 0 );
break;
}
@@ -6533,8 +6546,8 @@ void SOLDIERTYPE::EVENT_BeginMercTurn( BOOLEAN fFromRealTime, INT32 iRealTimeCou
// save unused action points up to a maximum
/*
if ((savedPts = this->aiData.bActionPts) > MAX_AP_CARRIED)
savedPts = MAX_AP_CARRIED;
if ((savedPts = this->aiData.bActionPts) > APBPConstants[MAX_AP_CARRIED])
savedPts = APBPConstants[MAX_AP_CARRIED];
*/
if ( this->flags.uiStatusFlags & SOLDIER_GASSED )
{
@@ -8449,8 +8462,11 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr
}
//CHRISL: We need this to dynamically adjust based on maxAP. Otherwise sLifeDeduct=16 results in a greater effective penalty
// the lower our AP_MAXIMUM value is set to.
// Deduct breath AND APs!
sAPCost = (sLifeDeduct / AP_GET_WOUNDED_DIVISOR); // + fallCost;
//sAPCost = (sLifeDeduct / APBPConstants[AP_GET_WOUNDED_DIVISOR]); // + fallCost;
sAPCost = (sLifeDeduct / APBPConstants[AP_GET_WOUNDED_DIVISOR]) / 100 * APBPConstants[AP_MAXIMUM];
// ATE: if the robot, do not deduct
if ( !AM_A_ROBOT( this ) )
@@ -9413,6 +9429,41 @@ void SOLDIERTYPE::MoveMerc( FLOAT dMovementChange, FLOAT dAngle, BOOLEAN fCheckR
}
BOOLEAN GetDirectionChangeAmount( INT16 sGridNo, SOLDIERTYPE *pSoldier, UINT8 uiTurnAmount)
{
//CHRISL: This function should return TRUE if the difference between our current facing and the facing needed to put
// the indicated sGrinNo into our facing is greater then uiTurnAmount
UINT8 ubDirection = GetDirectionFromGridNo( sGridNo, pSoldier );
UINT8 subDirection = pSoldier->ubDirection + 3;
UINT8 uiDirArray[16] = {5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4};
//Failsafe; just check to make sure we actually have to turn.
if(ubDirection == pSoldier->ubDirection)
return FALSE;
// We'll never turn more then 180 degrees (4) so reset uiTurnAmount if needed
uiTurnAmount = min(uiTurnAmount, 4);
// Loop up the array
for(UINT8 i = 1; i <= 4; i++)
{
if(uiDirArray[subDirection+i] == ubDirection)
{
return !(i<=uiTurnAmount);
}
}
// Loop down the array
for(UINT8 i = 1; i <= 4; i++)
{
if(uiDirArray[subDirection-i] == ubDirection)
{
return !(i<=uiTurnAmount);
}
}
return TRUE;
}
UINT8 GetDirectionFromGridNo( INT16 sGridNo, SOLDIERTYPE *pSoldier )
{
INT16 sXPos, sYPos;
@@ -10865,7 +10916,7 @@ UINT32 SOLDIERTYPE::SoldierDressWound( SOLDIERTYPE *pVictim, INT16 sKitPts, INT1
uiUsedAPs = ( uiUsedAPs * 2) / 3; // reverse 50% bonus by taking 2/3rds
}
DeductPoints( this, (INT16)uiUsedAPs, (INT16)( ( uiUsedAPs * BP_PER_AP_LT_EFFORT) ) );
DeductPoints( this, (INT16)uiUsedAPs, (INT16)( ( uiUsedAPs * APBPConstants[BP_PER_AP_LT_EFFORT]) ) );
SOLDIERTYPE* pSoldier = this;
@@ -12688,7 +12739,7 @@ BOOLEAN SOLDIERTYPE::PlayerSoldierStartTalking( UINT8 ubTargetID, BOOLEAN fValid
}
// Get APs...
sAPCost = AP_TALK;
sAPCost = APBPConstants[AP_TALK];
if ( !(gTacticalStatus.uiFlags & INCOMBAT) || (gTacticalStatus.uiFlags & REALTIME) ) //lal
{
+9 -5
View File
@@ -415,7 +415,7 @@ public:
UINT32 uiPendingActionData4;
INT8 bInterruptDuelPts;
INT8 bPassedLastInterrupt;
INT8 bIntStartAPs;
INT16 bIntStartAPs; //100AP
INT8 bMoved;
INT8 bHunting;
UINT8 ubLastCall;
@@ -429,7 +429,7 @@ public:
INT8 bMobility;
INT8 bRTPCombat;
INT8 fAIFlags;
INT8 bAimTime;
INT16 bAimTime; //100AP
INT8 bShownAimTime;
};
@@ -656,8 +656,8 @@ public:
// DESCRIPTION / STATS, ETC
UINT8 ubBodyType;
INT8 bActionPoints;
INT8 bInitialActionPoints;
INT16 bActionPoints; //100AP
INT16 bInitialActionPoints; //100AP
INT8 bOldLife; // life at end of last turn, recorded for monster AI
INT8 bVisible; // to render or not to render...
INT8 bActive;
@@ -1133,7 +1133,7 @@ public:
// UTILITY FUNCTUIONS
void MoveMerc( FLOAT dMovementChange, FLOAT dAngle, BOOLEAN fCheckRange );
INT8 CalcActionPoints( void );
INT16 CalcActionPoints( void );
BOOLEAN IsActionInterruptable( void );
// This function is now obsolete. Call ReduceAttackBusyCount instead.
// void ReleaseSoldiersAttacker( SOLDIERTYPE *pSoldier );
@@ -1302,6 +1302,7 @@ BOOLEAN DeletePaletteData( );
// UTILITY FUNCTUIONS
void MoveMercFacingDirection( SOLDIERTYPE *pSoldier, BOOLEAN fReverse, FLOAT dMovementDist );
UINT8 GetDirectionFromXY( INT16 sXPos, INT16 sYPos, SOLDIERTYPE *pSoldier );
BOOLEAN GetDirectionChangeAmount( INT16 sGridNo, SOLDIERTYPE *pSoldier, UINT8 uiTurnAmount);
UINT8 GetDirectionFromGridNo( INT16 sGridNo, SOLDIERTYPE *pSoldier );
UINT8 atan8( INT16 sXPos, INT16 sYPos, INT16 sXPos2, INT16 sYPos2 );
UINT8 atan8FromAngle( DOUBLE dAngle );
@@ -2025,3 +2026,6 @@ public:
#endif
-1
View File
@@ -640,7 +640,6 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *
Soldier.iFaceIndex = InitSoldierFace( &Soldier );
}
Soldier.bActionPoints = Soldier.CalcActionPoints( );
Soldier.bInitialActionPoints = Soldier.bActionPoints;
Soldier.bSide = gTacticalStatus.Team[ Soldier.bTeam ].bSide;
+2 -2
View File
@@ -813,8 +813,8 @@ void SwapMercPositions( SOLDIERTYPE *pSoldier1, SOLDIERTYPE *pSoldier2 )
BOOLEAN CanExchangePlaces( SOLDIERTYPE *pSoldier1, SOLDIERTYPE *pSoldier2, BOOLEAN fShow )
{
// NB checks outside of this function
if ( EnoughPoints( pSoldier1, AP_EXCHANGE_PLACES, 0, fShow ) ){
if ( EnoughPoints( pSoldier2, AP_EXCHANGE_PLACES, 0, fShow ) ){
if ( EnoughPoints( pSoldier1, APBPConstants[AP_EXCHANGE_PLACES], 0, fShow ) ){
if ( EnoughPoints( pSoldier2, APBPConstants[AP_EXCHANGE_PLACES], 0, fShow ) ){
if ( ( gAnimControl[ pSoldier2->usAnimState ].uiFlags & ANIM_MOVING ) )
return( FALSE );
+4 -4
View File
@@ -960,7 +960,7 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
SOLDIERTYPE * pTempSoldier;
INT32 cnt;
BOOLEAN fFound;
UINT8 ubMinAPsToAttack;
INT16 ubMinAPsToAttack;
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"EndInterrupt");
@@ -1304,7 +1304,7 @@ BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT8 ubOpponent
{
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"StandardInterruptConditionsMet");
// UINT8 ubAniType;
UINT8 ubMinPtsNeeded;
INT16 ubMinPtsNeeded;
INT8 bDir;
SOLDIERTYPE * pOpponent;
@@ -1459,7 +1459,7 @@ BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT8 ubOpponent
// the bare minimum default is enough APs left to TURN
ubMinPtsNeeded = AP_CHANGE_FACING;
ubMinPtsNeeded = APBPConstants[AP_CHANGE_FACING];
// if the opponent is SOMEBODY
if (ubOpponentID < TOTAL_SOLDIERS)
@@ -1538,7 +1538,7 @@ BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT8 ubOpponent
// if the soldier isn't currently crouching
if (!PTR_CROUCHED)
{
ubMinPtsNeeded = AP_CROUCH;
ubMinPtsNeeded = APBPConstants[AP_CROUCH];
}
else
{
+3 -3
View File
@@ -2341,8 +2341,8 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
// All's good!
SwapMercPositions( pSoldier1, pSoldier2 );
DeductPoints( pSoldier1, AP_EXCHANGE_PLACES, 0 );
DeductPoints( pSoldier2, AP_EXCHANGE_PLACES, 0 );
DeductPoints( pSoldier1, APBPConstants[AP_EXCHANGE_PLACES], 0 );
DeductPoints( pSoldier2, APBPConstants[AP_EXCHANGE_PLACES], 0 );
}
}
}
@@ -5197,7 +5197,7 @@ INT8 HandleMoveModeInteractiveClick( INT16 sMapPos, UINT32 *puiNewEvent )
BOOLEAN HandleUIReloading( SOLDIERTYPE *pSoldier )
{
INT8 bAPs = 0;
INT16 bAPs = 0;
// CHECK OUR CURRENT CURSOR...
+3 -2
View File
@@ -1842,9 +1842,9 @@ void SetUpArmorForVehicle( UINT8 ubID )
return;
}
void AdjustVehicleAPs( SOLDIERTYPE *pSoldier, UINT8 *pubPoints )
void AdjustVehicleAPs( SOLDIERTYPE *pSoldier, INT16 *pubPoints )
{
UINT8 pubDeducations = 0;
INT16 pubDeducations = 0;
INT32 iCounter = 0;
(*pubPoints) += 35;
@@ -2533,3 +2533,4 @@ BOOLEAN DoesVehicleGroupHaveAnyPassengers( GROUP *pGroup )
+2 -2
View File
@@ -173,7 +173,7 @@ void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT16 sGridNo
// the soldiertype containing this tactical incarnation of this vehicle
SOLDIERTYPE * GetSoldierStructureForVehicle( INT32 iId );
void AdjustVehicleAPs( SOLDIERTYPE *pSoldier, UINT8 *pubPoints );
void AdjustVehicleAPs( SOLDIERTYPE *pSoldier, INT16 *pubPoints );
// get orig armor values for vehicle in this location
//INT16 GetOrigInternalArmorValueForVehicleInLocation( UINT8 ubID, UINT8 ubLocation );
@@ -234,4 +234,4 @@ BOOLEAN DoesVehicleGroupHaveAnyPassengers( GROUP *pGroup );
void SetSoldierExitVehicleInsertionData( SOLDIERTYPE *pSoldier, INT32 iId );
#endif
#endif
+44 -32
View File
@@ -118,13 +118,13 @@ BOOLEAN gfReportHitChances = FALSE;
#define ASRIFLE( ammo, update, impact, rt, rof, burstrof, burstpenal, deadl, acc, clip, range, av, hv, sd, bsd ) { RIFLECLASS, GUN_AS_RIFLE, ammo, rt, rof, burstrof, burstpenal, update, (UINT8) (impact), deadl, acc, clip, range, 200, av, hv, sd, bsd, S_RELOAD_RIFLE, S_LNL_RIFLE }
#define SHOTGUN( ammo, update, impact, rt, rof, burstrof, burstpenal, deadl, acc, clip, range, av, hv, sd, bsd ) { SHOTGUNCLASS, GUN_SHOTGUN, ammo, rt, rof, burstrof, burstpenal, update, (UINT8) (impact), deadl, acc, clip, range, 200, av, hv, sd, bsd, S_RELOAD_SHOTGUN, S_LNL_SHOTGUN }
#define LMG( ammo, update, impact, rt, rof, burstrof, burstpenal, deadl, acc, clip, range, av, hv, sd, bsd ) { MGCLASS, GUN_LMG, ammo, rt, rof, burstrof, burstpenal, update, (UINT8) (impact), deadl, acc, clip, range, 200, av, hv, sd, bsd, S_RELOAD_LMG, S_LNL_LMG }
#define BLADE( impact, rof, deadl, range, av, sd ) { KNIFECLASS, NOT_GUN, 0, AP_READY_KNIFE, rof, 0, 0, 0, (UINT8) (impact), deadl, 0, 0, range, 200, av, 0, sd, NO_WEAPON_SOUND, NO_WEAPON_SOUND, NO_WEAPON_SOUND }
#define THROWINGBLADE( impact, rof, deadl, range, av, sd ) { KNIFECLASS, NOT_GUN, 0, AP_READY_KNIFE, rof, 0, 0, 0, (UINT8) (impact), deadl, 0, 0, range, 200, av, 0, sd, NO_WEAPON_SOUND, NO_WEAPON_SOUND, NO_WEAPON_SOUND }
#define BLADE( impact, rof, deadl, range, av, sd ) { KNIFECLASS, NOT_GUN, 0, APBPConstants[AP_READY_KNIFE], rof, 0, 0, 0, (UINT8) (impact), deadl, 0, 0, range, 200, av, 0, sd, NO_WEAPON_SOUND, NO_WEAPON_SOUND, NO_WEAPON_SOUND }
#define THROWINGBLADE( impact, rof, deadl, range, av, sd ) { KNIFECLASS, NOT_GUN, 0, APBPConstants[AP_READY_KNIFE], rof, 0, 0, 0, (UINT8) (impact), deadl, 0, 0, range, 200, av, 0, sd, NO_WEAPON_SOUND, NO_WEAPON_SOUND, NO_WEAPON_SOUND }
#define PUNCHWEAPON( impact, rof, deadl, av, sd ) { KNIFECLASS, NOT_GUN, 0, 0, rof, 0, 0, 0, (UINT8) (impact), deadl, 0, 0, 10, 200, av, 0, sd, NO_WEAPON_SOUND, NO_WEAPON_SOUND, NO_WEAPON_SOUND }
#define LAUNCHER( update, rt, rof, deadl, acc, range, av, hv, sd) { RIFLECLASS, NOT_GUN, NOAMMO, rt, rof, 0, 0, update, 1, deadl, acc, 0, range, 200, av, hv, sd, NO_WEAPON_SOUND, NO_WEAPON_SOUND, NO_WEAPON_SOUND }
#define LAW( update, rt, rof, deadl, acc, range, av, hv, sd) { RIFLECLASS, NOT_GUN, NOAMMO, rt, rof, 0, 0, update, 80, deadl, acc, 1, range, 200, av, hv, sd, NO_WEAPON_SOUND, NO_WEAPON_SOUND, NO_WEAPON_SOUND }
#define CANNON( update, rt, rof, deadl, acc, range, av, hv, sd) { RIFLECLASS, NOT_GUN, NOAMMO, rt, rof, 0, 0, update, 80, deadl, acc, 1, range, 200, av, hv, sd, NO_WEAPON_SOUND, NO_WEAPON_SOUND, NO_WEAPON_SOUND }
#define MONSTSPIT( impact, rof, deadl, clip, range, av, hv, sd) { MONSTERCLASS, NOT_GUN, AMMOMONST, AP_READY_KNIFE, rof, 0, 0, 250, (UINT8) (impact), deadl, 0, clip, range, 200, av, hv, sd, NO_WEAPON_SOUND, NO_WEAPON_SOUND, NO_WEAPON_SOUND }
#define MONSTSPIT( impact, rof, deadl, clip, range, av, hv, sd) { MONSTERCLASS, NOT_GUN, AMMOMONST, APBPConstants[AP_READY_KNIFE], rof, 0, 0, 250, (UINT8) (impact), deadl, 0, clip, range, 200, av, hv, sd, NO_WEAPON_SOUND, NO_WEAPON_SOUND, NO_WEAPON_SOUND }
// ranges are in world units, calculated by:
// 100 + real-range-in-metres/10
@@ -347,7 +347,6 @@ struct
}
typedef weaponParseData;
static void XMLCALL
weaponStartElementHandle(void *userData, const XML_Char *name, const XML_Char **atts)
{
@@ -489,11 +488,12 @@ weaponEndElementHandle(void *userData, const XML_Char *name)
{
pData->curElement = WEAPON_ELEMENT_WEAPON;
pData->curWeapon.ubReadyTime = (UINT8) atol(pData->szCharData);
pData->curWeapon.ubReadyTime = (UINT8)DynamicAdjustAPConstants(pData->curWeapon.ubReadyTime, pData->curWeapon.ubReadyTime);
}
else if(strcmp(name, "ubShotsPer4Turns") == 0)
{
pData->curElement = WEAPON_ELEMENT_WEAPON;
pData->curWeapon.ubShotsPer4Turns = (UINT8) atol(pData->szCharData);
pData->curWeapon.ubShotsPer4Turns = (FLOAT) atof(pData->szCharData);
}
else if(strcmp(name, "ubShotsPerBurst") == 0)
{
@@ -579,6 +579,7 @@ weaponEndElementHandle(void *userData, const XML_Char *name)
{
pData->curElement = WEAPON_ELEMENT_WEAPON;
pData->curWeapon.bBurstAP = (UINT8) atol(pData->szCharData);
pData->curWeapon.bBurstAP = (UINT8)DynamicAdjustAPConstants(pData->curWeapon.bBurstAP, pData->curWeapon.bBurstAP);
}
else if(strcmp(name, "bAutofireShotsPerFiveAP") == 0)
{
@@ -589,6 +590,7 @@ weaponEndElementHandle(void *userData, const XML_Char *name)
{
pData->curElement = WEAPON_ELEMENT_WEAPON;
pData->curWeapon.APsToReload = (UINT8) atol(pData->szCharData);
pData->curWeapon.APsToReload = (UINT8)DynamicAdjustAPConstants(pData->curWeapon.APsToReload, pData->curWeapon.APsToReload);
}
else if(strcmp(name, "SilencedSound") == 0)
{
@@ -626,6 +628,7 @@ weaponEndElementHandle(void *userData, const XML_Char *name)
{
pData->curElement = WEAPON_ELEMENT_WEAPON;
pData->curWeapon.APsToReloadManually = (UINT8) atol(pData->szCharData);
pData->curWeapon.APsToReloadManually = (UINT8)DynamicAdjustAPConstants(pData->curWeapon.APsToReloadManually, pData->curWeapon.APsToReloadManually);
}
else if(strcmp(name, "ManualReloadSound") == 0)
{
@@ -1230,25 +1233,31 @@ BOOLEAN CheckForGunJam( SOLDIERTYPE * pSoldier )
else if ((*pObj)[0]->data.gun.bGunAmmoStatus < 0)
{
// try to unjam gun
int iResult = SkillCheck( pSoldier, UNJAM_GUN_CHECK, (INT8) ((Item[pObj->usItem].bReliability + Item[(*pObj)[0]->data.gun.usGunAmmoItem].bReliability)* 4) );
if (iResult > 0)
{
// yay! unjammed the gun
(*pObj)[0]->data.gun.bGunAmmoStatus *= -1;
// MECHANICAL/DEXTERITY GAIN: Unjammed a gun
StatChange( pSoldier, MECHANAMT, 5, FALSE );
StatChange( pSoldier, DEXTAMT, 5, FALSE );
DirtyMercPanelInterface( pSoldier, DIRTYLEVEL2 );
// We unjammed gun, return appropriate value!
return( 255 );
}
else
{
return( TRUE );
}
if(EnoughPoints(pSoldier, APBPConstants[AP_UNJAM], APBPConstants[BP_UNJAM], FALSE))
{
DeductPoints(pSoldier, APBPConstants[AP_UNJAM], APBPConstants[BP_UNJAM]);
int iResult = SkillCheck( pSoldier, UNJAM_GUN_CHECK, (INT8) ((Item[pObj->usItem].bReliability + Item[(*pObj)[0]->data.gun.usGunAmmoItem].bReliability)* 4) );
if (iResult > 0)
{
// yay! unjammed the gun
(*pObj)[0]->data.gun.bGunAmmoStatus *= -1;
// MECHANICAL/DEXTERITY GAIN: Unjammed a gun
StatChange( pSoldier, MECHANAMT, 5, FALSE );
StatChange( pSoldier, DEXTAMT, 5, FALSE );
DirtyMercPanelInterface( pSoldier, DIRTYLEVEL2 );
// We unjammed gun, return appropriate value!
return( 255 );
}
else
{
return( TRUE );
}
}
else
return( TRUE );
}
}
}
@@ -2667,7 +2676,7 @@ BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
// costs are deducted. Final throw cost is deducted on creating the grenade object
if ( (UINT8)GetDirectionFromGridNo( sTargetGridNo, pSoldier ) != pSoldier->ubDirection )
sAPCost += (INT16)GetAPsToLook( pSoldier );
sAPCost += (INT16)GetAPsToChangeStance( pSoldier, ANIM_STAND );
sAPCost += GetAPsToChangeStance( pSoldier, ANIM_STAND );
HandleSoldierThrowItem( pSoldier, pSoldier->sTargetGridNo );
DeductPoints( pSoldier, sAPCost, 0 );
@@ -3518,7 +3527,7 @@ BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT16 sGridNo )
return( FALSE );
}
UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAimTime, UINT8 ubAimPos )
UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos )
{
//SOLDIERTYPE *vicpSoldier;
SOLDIERTYPE * pTarget;
@@ -4249,7 +4258,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAimTime,
return (iChance);
}
UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAimTime, UINT8 ubAimPos )
UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos )
{
UINT16 usTrueState;
UINT32 uiChance;
@@ -4981,7 +4990,7 @@ void ShotMiss( UINT8 ubAttackerID, INT32 iBullet )
// FreeUpAttacker( ubAttackerID );
}
UINT32 CalcChanceHTH( SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, UINT8 ubAimTime, UINT8 ubMode )
UINT32 CalcChanceHTH( SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, INT16 ubAimTime, UINT8 ubMode )
{
UINT16 usInHand;
UINT8 ubBandaged;
@@ -5311,17 +5320,17 @@ UINT32 CalcChanceHTH( SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, UINT8 ubAi
return (iChance);
}
UINT32 CalcChanceToStab(SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, UINT8 ubAimTime)
UINT32 CalcChanceToStab(SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, INT16 ubAimTime)
{
return( CalcChanceHTH( pAttacker, pDefender, ubAimTime, HTH_MODE_STAB ) );
}
UINT32 CalcChanceToPunch(SOLDIERTYPE *pAttacker, SOLDIERTYPE * pDefender, UINT8 ubAimTime)
UINT32 CalcChanceToPunch(SOLDIERTYPE *pAttacker, SOLDIERTYPE * pDefender, INT16 ubAimTime)
{
return( CalcChanceHTH( pAttacker, pDefender, ubAimTime, HTH_MODE_PUNCH ) );
}
UINT32 CalcChanceToSteal(SOLDIERTYPE *pAttacker, SOLDIERTYPE * pDefender, UINT8 ubAimTime)
UINT32 CalcChanceToSteal(SOLDIERTYPE *pAttacker, SOLDIERTYPE * pDefender, INT16 ubAimTime)
{
return( CalcChanceHTH( pAttacker, pDefender, ubAimTime, HTH_MODE_STEAL ) );
}
@@ -5572,7 +5581,7 @@ INT32 CalcMaxTossRange( SOLDIERTYPE * pSoldier, UINT16 usItem, BOOLEAN fArmed )
}
UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAimTime, UINT8 ubAimPos )
UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos )
{
INT32 iChance, iMaxRange, iRange;
UINT16 usHandItem;
@@ -5995,3 +6004,6 @@ INT8 GetAPsToReload( OBJECTTYPE *pObj )
+10 -8
View File
@@ -256,7 +256,9 @@ typedef struct
UINT8 ubWeaponType; // exact type (for display purposes)
UINT8 ubCalibre; // type of ammunition needed
UINT8 ubReadyTime; // APs to ready/unready weapon
UINT8 ubShotsPer4Turns; // maximum (mechanical) firing rate
//CHRISL: Changed to a float to allow for more control over actual ap costs
//UINT8 ubShotsPer4Turns; // maximum (mechanical) firing rate
FLOAT ubShotsPer4Turns; // maximum (mechanical) firing rate
UINT8 ubShotsPerBurst;
UINT8 ubBurstPenalty; // % penalty per shot after first
UINT8 ubBulletSpeed; // bullet's travelling speed
@@ -343,11 +345,11 @@ extern void WindowHit( INT16 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowS
extern INT32 BulletImpact( SOLDIERTYPE *pFirer, SOLDIERTYPE * pTarget, UINT8 ubHitLocation, INT32 iImpact, INT16 sHitBy, UINT8 * pubSpecial );
extern BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT16 sGridNo );
extern void ShotMiss( UINT8 ubAttackerID, INT32 iBullet );
extern UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAimTime, UINT8 ubAimPos );
extern UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAimTime, UINT8 ubAimPos );
extern UINT32 CalcChanceToPunch(SOLDIERTYPE *pAttacker, SOLDIERTYPE * pDefender, UINT8 ubAimTime);
extern UINT32 CalcChanceToStab(SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, UINT8 ubAimTime);
UINT32 CalcChanceToSteal(SOLDIERTYPE *pAttacker, SOLDIERTYPE * pDefender, UINT8 ubAimTime);
extern UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
extern UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
extern UINT32 CalcChanceToPunch(SOLDIERTYPE *pAttacker, SOLDIERTYPE * pDefender, INT16 ubAimTime);
extern UINT32 CalcChanceToStab(SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, INT16 ubAimTime);
UINT32 CalcChanceToSteal(SOLDIERTYPE *pAttacker, SOLDIERTYPE * pDefender, INT16 ubAimTime);
extern void ReloadWeapon( SOLDIERTYPE *pSoldier, UINT8 ubHandPos );
// Changed by ADB, rev 1513
//extern BOOLEAN IsGunWeaponModeCapable( SOLDIERTYPE *pSoldier, UINT8 ubHandPos , UINT8 bWpnMode );
@@ -366,7 +368,7 @@ extern BOOLEAN OKFireWeapon( SOLDIERTYPE *pSoldier );
extern BOOLEAN CheckForGunJam( SOLDIERTYPE * pSoldier );
extern INT32 CalcMaxTossRange( SOLDIERTYPE * pSoldier, UINT16 usItem, BOOLEAN fArmed );
extern UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAimTime, UINT8 ubAimPos );
extern UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
extern void ChangeWeaponMode( SOLDIERTYPE * pSoldier );
@@ -390,4 +392,4 @@ INT8 GetAPsToReload( OBJECTTYPE *pObj );
#endif
#endif
+28 -1
View File
@@ -87,7 +87,8 @@ typedef PARSE_STAGE;
#define ALTSECTORSFILENAME "Map\\AltSectors.xml"
#define SAMSITESFILENAME "Map\\SamSites.xml"
#define ROAMINGMILITIAFILENAME "Map\\RestrictedRoamingMilitia.xml"
// Gotthard: Strategic Text Files [2007-10-19]
#define STRATEGICSECTORNAMETEXTFILENAME "Map\\SectorNames.xml"
#define GARRISONFILENAME "Army\\GarrisonGroups.xml"
#define PATROLFILENAME "Army\\PatrolGroups.xml"
@@ -103,6 +104,14 @@ typedef PARSE_STAGE;
// WANNE: Sector loadscreens [2007-05-18]
#define SECTORLOADSCREENSFILENAME "Map\\SectorLoadscreens.xml"
// Gotthard: Laptop Text files [2007-10-16]
#define LAPTOPFLORISTTEXTFILENAME "Laptop\\Florist.xml"
#define LAPTOPFUNERALTEXTFILENAME "Laptop\\Funeral.xml"
#define LAPTOPBOBBYRAYSTEXTFILENAME "Laptop\\BobbyRays.xml"
// Gotthard: Website Picture/Text Locations [2007-11-04]
#define LAPTOPFLORISTLOCATIONFILENAME "Laptop\\FloristPositions.xml"
#define LAPTOPFUNERALLOCATIONFILENAME "Laptop\\FuneralPositions.xml"
extern BOOLEAN ReadInItemStats(STR fileName, BOOLEAN localizedVersion);
extern BOOLEAN WriteItemStats();
@@ -213,4 +222,22 @@ extern BOOLEAN WriteInArmyCompositionInfo(STR fileName);
//Kaiden: Roaming Militia Restricted Sectors List
extern BOOLEAN ReadInRoamingInfo(STR filename);
//Gotthard: Laptop Florist Text
extern BOOLEAN ReadInFloristText(STR fileName);
//Gotthard: Laptop Funeral Text
extern BOOLEAN ReadInFuneralText(STR fileName);
//Gotthard: Delivery Locations Text (For Florist, Bobby Ray's)
extern BOOLEAN ReadInBobbyRaysText(STR fileName);
//Gotthard: Special Sector Names Test (Cambria Hospital, etc.)
extern BOOLEAN ReadInSectorNamesText(STR fileName);
//Gotthard: Laptop Florist Locations
extern BOOLEAN ReadInFloristLocations(STR fileName);
//Gotthard: Laptop Funeral Locations
extern BOOLEAN ReadInFuneralLocations(STR fileName);
#endif
+2
View File
@@ -6,6 +6,7 @@
#include "weapons.h"
#include "Debug Control.h"
#include "expat.h"
#include "gamesettings.h"
#include "XML.h"
#endif
@@ -114,6 +115,7 @@ attachmentEndElementHandle(void *userData, const XML_Char *name)
{
pData->curElement = ELEMENT;
pData->curAttachment[2] = (UINT16) atol(pData->szCharData);
pData->curAttachment[2] = (UINT16)DynamicAdjustAPConstants(pData->curAttachment[2], pData->curAttachment[2]);
}
pData->maxReadDepth--;
+2
View File
@@ -6,6 +6,7 @@
#include "weapons.h"
#include "Debug Control.h"
#include "expat.h"
#include "gamesettings.h"
#include "XML.h"
#endif
@@ -135,6 +136,7 @@ mergeEndElementHandle(void *userData, const XML_Char *name)
{
pData->curElement = ELEMENT;
pData->curMerge[5] = (UINT16) atol(pData->szCharData);
pData->curMerge[5] = (UINT16)DynamicAdjustAPConstants(pData->curMerge[5], pData->curMerge[5]);
}
pData->maxReadDepth--;
+2 -2
View File
@@ -125,7 +125,7 @@ typedef struct
UINT8 ubExpression;
INT8 bOldSoldierLife;
INT8 bOldActionPoints;
INT16 bOldActionPoints;
BOOLEAN fOldHandleUIHatch;
BOOLEAN fOldShowHighlight;
INT8 bOldAssignment;
@@ -246,4 +246,4 @@ BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, UINT8 ubSoldierID, INT16 s
#endif
#endif