mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Bright future is here, introduced turning AP costs into pathing AP prediction. Full changelog:
- fixed camera action AP cost shown and made soldier to turn towards target - fixed handcuffs, jar and can actions AP cost shown calculating pathing cost twice and not calculating stance change at all - fixed refueling and repairing pathing leading to inside vehicle - fixed endless clock issue when trying to refuel from spot next to vehicle - fixed endless clock issue when trying to repair vehicle/SAM site during combat - fixed refuel, repair and jar actions not costing any AP in turn based mode - fixed multiple actions not calculating and substracting AP cost for turning - fixed using toolkit asking whether player wants to attack ally - fixed issue where the required AP cost for melee attack was not recalculated when changing movement mode - allowed to start repairs on robot manually from tactical mode still a problem: - repairing during combat still does nothing as soldiers cannot go into assignment while there are enemies on map - we need new function to return action gridno for actions on vehicles, FindAdjacentGridEx is not working very well - soldiers doesn't turn during interactive actions git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9033 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -2038,12 +2038,14 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usLastRandomAnim, sizeof(usLastRandomAnim), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usAnimSurface, sizeof(usAnimSurface), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sZLevel, sizeof(sZLevel), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sWalkToAttackMovementMode, sizeof(sWalkToAttackMovementMode), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sWalkToAttackGridNo, sizeof(sWalkToAttackGridNo), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sWalkToAttackWalkToCost, sizeof(sWalkToAttackWalkToCost), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sLocatorOffX, sizeof(sLocatorOffX), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sLocatorOffY, sizeof(sLocatorOffY), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->pForcedShade, sizeof(pForcedShade), 4, numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bDisplayDamageCount, sizeof(bDisplayDamageCount), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sWalkToAttackEndDirection, sizeof(sWalkToAttackEndDirection), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sDamage, sizeof(sDamage), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sDamageX, sizeof(sDamageX), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sDamageY, sizeof(sDamageY), sizeof(INT16), numBytesRead);
|
||||
|
||||
+17
-15
@@ -1049,19 +1049,16 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
|
||||
if ( EnoughPoints( pSoldier, sAPCost, 0, fFromUI ) )
|
||||
{
|
||||
// OK, set UI
|
||||
SetUIBusy(pSoldier->ubID);
|
||||
|
||||
// CHECK IF WE ARE AT THIS GRIDNO NOW
|
||||
if ( pSoldier->sGridNo != sActionGridNo )
|
||||
{
|
||||
// SEND PENDING ACTION
|
||||
pSoldier->aiData.ubPendingAction = MERC_REPAIR;
|
||||
pSoldier->aiData.sPendingActionData2 = sAdjustedGridNo;
|
||||
|
||||
if ( fVehicle )
|
||||
{
|
||||
pSoldier->aiData.sPendingActionData2 = sVehicleGridNo;
|
||||
}
|
||||
|
||||
pSoldier->aiData.bPendingActionData3 = ubDirection;
|
||||
pSoldier->aiData.sPendingActionData2 = fVehicle ? sVehicleGridNo : sAdjustedGridNo;
|
||||
pSoldier->aiData.bPendingActionData3 = ubDirection;
|
||||
pSoldier->aiData.ubPendingActionAnimCount = 0;
|
||||
|
||||
// WALK UP TO DEST FIRST
|
||||
@@ -1069,12 +1066,9 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
}
|
||||
else
|
||||
{
|
||||
pSoldier->EVENT_SoldierBeginRepair( sAdjustedGridNo, ubDirection );
|
||||
pSoldier->EVENT_SoldierBeginRepair(fVehicle ? sVehicleGridNo : sAdjustedGridNo, ubDirection );
|
||||
}
|
||||
|
||||
// OK, set UI
|
||||
SetUIBusy( pSoldier->ubID );
|
||||
|
||||
if ( fFromUI )
|
||||
{
|
||||
guiPendingOverrideEvent = A_CHANGE_TO_MOVE;
|
||||
@@ -1131,8 +1125,6 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
{
|
||||
// SEND PENDING ACTION
|
||||
pSoldier->aiData.ubPendingAction = MERC_FUEL_VEHICLE;
|
||||
pSoldier->aiData.sPendingActionData2 = sAdjustedGridNo;
|
||||
|
||||
pSoldier->aiData.sPendingActionData2 = sVehicleGridNo;
|
||||
pSoldier->aiData.bPendingActionData3 = ubDirection;
|
||||
pSoldier->aiData.ubPendingActionAnimCount = 0;
|
||||
@@ -1142,7 +1134,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
}
|
||||
else
|
||||
{
|
||||
pSoldier->EVENT_SoldierBeginRefuel( sAdjustedGridNo, ubDirection );
|
||||
pSoldier->EVENT_SoldierBeginRefuel(sVehicleGridNo, ubDirection );
|
||||
}
|
||||
|
||||
// OK, set UI
|
||||
@@ -10267,6 +10259,16 @@ void TakePhoto(SOLDIERTYPE* pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
INT16 sBaseX, sBaseY;
|
||||
ConvertGridNoToXY( sGridNo, &sBaseX, &sBaseY );
|
||||
|
||||
UINT8 ubDirection = GetDirectionFromGridNo(sGridNo, pSoldier);
|
||||
|
||||
// CHANGE DIRECTION AND GOTO ANIMATION NOW
|
||||
if (pSoldier->ubDirection != ubDirection)
|
||||
{
|
||||
pSoldier->flags.uiStatusFlags |= SOLDIER_LOOK_NEXT_TURNSOLDIER;//shadooow: fix for vision not updating
|
||||
pSoldier->EVENT_SetSoldierDesiredDirection(ubDirection);
|
||||
pSoldier->EVENT_SetSoldierDirection(ubDirection);
|
||||
}
|
||||
|
||||
int radius = 3;
|
||||
|
||||
for ( int x = -radius; x < radius; ++x )
|
||||
|
||||
+87
-43
@@ -2991,6 +2991,7 @@ UINT32 UIHandleCAMercShoot( UI_EVENT *pUIEvent )
|
||||
if ( ( pTSoldier->bTeam == gbPlayerNum || pTSoldier->bTeam == MILITIA_TEAM )
|
||||
&& Item[ pSoldier->inv[ HANDPOS ].usItem ].usItemClass != IC_MEDKIT
|
||||
&& !Item[pSoldier->inv[ HANDPOS ].usItem].gascan
|
||||
&& !Item[pSoldier->inv[HANDPOS].usItem].toolkit
|
||||
&& !ItemCanBeAppliedToOthers( pSoldier->inv[ HANDPOS ].usItem )
|
||||
&& gTacticalStatus.ubLastRequesterTargetID != pTSoldier->ubProfile
|
||||
&& ( pTSoldier->ubID != pSoldier->ubID ) )
|
||||
@@ -4304,10 +4305,12 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
{
|
||||
sAPCost += UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
}
|
||||
|
||||
//sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_WIREFENCE )
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, NULL, FALSE, TRUE );
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
if ( sActionGridNo == -1 )
|
||||
{
|
||||
sAPCost = 0;
|
||||
@@ -4323,11 +4326,13 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_JAR )
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, NULL, FALSE, TRUE );
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
if ( sActionGridNo == -1 )
|
||||
{
|
||||
sActionGridNo = usMapPos;
|
||||
@@ -4342,6 +4347,8 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_CAN )
|
||||
{
|
||||
@@ -4354,7 +4361,8 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, sIntTileGridNo, &ubDirection, NULL, FALSE, TRUE );
|
||||
if ( sActionGridNo != -1 )
|
||||
{
|
||||
sAPCost = APBPConstants[AP_ATTACH_CAN];
|
||||
sAPCost = GetAPsToUseCan(pSoldier, sActionGridNo);
|
||||
|
||||
sAPCost += UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
|
||||
|
||||
if ( sActionGridNo != pSoldier->sGridNo )
|
||||
@@ -4362,6 +4370,8 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -4373,7 +4383,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
else if ( uiFlags == MOVEUI_TARGET_REPAIR )
|
||||
{
|
||||
// For repair, check if we are over a vehicle, then get gridnot to edge of that vehicle!
|
||||
if ( IsRepairableStructAtGridNo( usMapPos, &ubMercID ) == 2 )
|
||||
if ( IsRepairableStructAtGridNo( usMapPos, &ubMercID ) == 2)
|
||||
{
|
||||
INT32 sNewGridNo;
|
||||
UINT8 ubDirection;
|
||||
@@ -4386,7 +4396,8 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
}
|
||||
}
|
||||
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, NULL, FALSE, TRUE );
|
||||
//shadooow: we need better function for this, it has odd results with vehicles as they occupy 6 tiles now
|
||||
sActionGridNo = FindAdjacentGridEx(pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, TRUE, FALSE);
|
||||
if ( sActionGridNo == -1 )
|
||||
{
|
||||
sActionGridNo = usMapPos;
|
||||
@@ -4401,11 +4412,14 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
//shadooow: this action is a total mess and needs to look at closely before adding turning cost into action cost prediction
|
||||
//sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_REFUEL )
|
||||
{
|
||||
// For repair, check if we are over a vehicle, then get gridnot to edge of that vehicle!
|
||||
if ( IsRefuelableStructAtGridNo( usMapPos, &ubMercID ) == 2 )
|
||||
if ( IsRefuelableStructAtGridNo( usMapPos, &ubMercID ) )
|
||||
{
|
||||
INT32 sNewGridNo;
|
||||
UINT8 ubDirection;
|
||||
@@ -4418,7 +4432,8 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
}
|
||||
}
|
||||
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, NULL, FALSE, TRUE );
|
||||
//shadooow: we need better function for this, it has odd results with vehicles as they occupy 6 tiles now
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
if ( sActionGridNo == -1 )
|
||||
{
|
||||
sActionGridNo = usMapPos;
|
||||
@@ -4433,10 +4448,13 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
//shadooow: this action is a total mess and needs to look at closely before adding turning cost into action cost prediction
|
||||
//sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_FORTIFICATION )
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, NULL, FALSE, TRUE );
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, FALSE, FALSE );
|
||||
if ( sActionGridNo == -1 )
|
||||
{
|
||||
sActionGridNo = usMapPos;
|
||||
@@ -4450,46 +4468,67 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_HANDCUFF )
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, NULL, FALSE, TRUE );
|
||||
if ( sActionGridNo == -1 )
|
||||
sActionGridNo = FindAdjacentGridEx(pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, TRUE, FALSE);
|
||||
|
||||
if (!TileIsOutOfBounds(sActionGridNo))
|
||||
{
|
||||
sActionGridNo = usMapPos;
|
||||
sAPCost = GetAPsToHandcuff(pSoldier, sAdjustedGridNo);
|
||||
|
||||
if (sActionGridNo != pSoldier->sGridNo)
|
||||
{
|
||||
sAPCost += UIPlotPath(pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, usMapPos, gfPlotPathEndDirection);
|
||||
}
|
||||
}
|
||||
else if (uiFlags == MOVEUI_TARGET_CAMERA)
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx(pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, TRUE, FALSE);
|
||||
|
||||
sAPCost = GetAPsToHandcuff( pSoldier, sActionGridNo );
|
||||
|
||||
sAPCost += UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
|
||||
|
||||
if ( sActionGridNo != pSoldier->sGridNo )
|
||||
if (!TileIsOutOfBounds(sActionGridNo))
|
||||
{
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
sAPCost = APBPConstants[AP_CAMERA];
|
||||
|
||||
if (sActionGridNo != pSoldier->sGridNo)
|
||||
{
|
||||
sAPCost += UIPlotPath(pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_APPLYITEM )
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, NULL, FALSE, TRUE );
|
||||
if ( sActionGridNo == -1 )
|
||||
sActionGridNo = FindAdjacentGridEx(pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, TRUE, FALSE);
|
||||
|
||||
if (!TileIsOutOfBounds(sActionGridNo))
|
||||
{
|
||||
sActionGridNo = usMapPos;
|
||||
}
|
||||
sAPCost = GetAPsToApplyItem(pSoldier, sActionGridNo);
|
||||
|
||||
sAPCost = GetAPsToApplyItem( pSoldier, sActionGridNo );
|
||||
sAPCost += UIPlotPath(pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
|
||||
|
||||
sAPCost += UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
|
||||
if (sActionGridNo != pSoldier->sGridNo)
|
||||
{
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
if ( sActionGridNo != pSoldier->sGridNo )
|
||||
{
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, usMapPos, gfPlotPathEndDirection);
|
||||
}
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_INTERACTIVEACTION )
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, NULL, FALSE, TRUE );
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, FALSE, TRUE );
|
||||
if ( sActionGridNo == -1 )
|
||||
{
|
||||
sActionGridNo = usMapPos;
|
||||
@@ -4506,6 +4545,9 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
//shadooow: merc doesn't turn during this action right now, but once that change uncomment line below
|
||||
//sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_MERCS )
|
||||
{
|
||||
@@ -4544,7 +4586,9 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
sAPCost += MinAPsToAttack(pSoldier, sAdjustedGridNo, TRUE, pSoldier->aiData.bShownAimTime, 0);
|
||||
sAPCost += MinAPsToPunch(pSoldier, sAdjustedGridNo);
|
||||
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_STEAL )
|
||||
@@ -4586,6 +4630,8 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_BOMB )
|
||||
@@ -4605,22 +4651,18 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, MercPtrs[ gusUIFullTargetID ]->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
|
||||
// Try again at another gridno...
|
||||
if ( sActionGridNo == -1 )
|
||||
if (!TileIsOutOfBounds(sActionGridNo))
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
|
||||
if ( sActionGridNo == -1 )
|
||||
sAPCost += GetAPsToBeginFirstAid(pSoldier);
|
||||
sAPCost += UIPlotPath(pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
|
||||
if (sActionGridNo != pSoldier->sGridNo)
|
||||
{
|
||||
sActionGridNo = sAdjustedGridNo;
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
}
|
||||
sAPCost += GetAPsToBeginFirstAid( pSoldier );
|
||||
sAPCost += UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
|
||||
if ( sActionGridNo != pSoldier->sGridNo )
|
||||
{
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4656,7 +4698,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
}
|
||||
else if ( uiFlags == MOVEUI_TARGET_BLOODBAG )
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, NULL, FALSE, TRUE );
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, FALSE, TRUE );
|
||||
if ( sActionGridNo == -1 )
|
||||
{
|
||||
sActionGridNo = usMapPos;
|
||||
@@ -4671,6 +4713,8 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
|
||||
gfUIHandleShowMoveGrid = TRUE;
|
||||
gsUIHandleShowMoveGridLocation = sActionGridNo;
|
||||
}
|
||||
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, gfPlotPathEndDirection);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#define MOVEUI_TARGET_APPLYITEM 15
|
||||
#define MOVEUI_TARGET_INTERACTIVEACTION 16
|
||||
#define MOVEUI_TARGET_BLOODBAG 17
|
||||
#define MOVEUI_TARGET_CAMERA 18
|
||||
|
||||
#define MOVEUI_RETURN_ON_TARGET_MERC 1
|
||||
|
||||
|
||||
@@ -5665,6 +5665,7 @@ INT32 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pubDirect
|
||||
if ( ( NewOKDestinationAndDirection( pSoldier, sSpot, ubDir, TRUE, pSoldier->pathing.bLevel ) > 0 ) &&
|
||||
( ( sDistance = PlotPath( pSoldier, sSpot, NO_COPYROUTE, NO_PLOT, TEMPORARY, (INT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints ) ) > 0 ) )
|
||||
{
|
||||
if (ubDir != gfPlotPathEndDirection) sDistance += 4;//shadooow: small hack to return adjacent GridNo with lowest AP cost
|
||||
if (sDistance < sClosest || sClosest == -1)
|
||||
{
|
||||
sClosest = sDistance;
|
||||
@@ -5745,6 +5746,7 @@ INT32 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pubDirect
|
||||
if ((NewOKDestinationAndDirection(pSoldier, sSpot, ubDir, TRUE, pSoldier->pathing.bLevel) > 0) &&
|
||||
((sDistance = PlotPath(pSoldier, sSpot, NO_COPYROUTE, NO_PLOT, TEMPORARY, (INT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints)) > 0))
|
||||
{
|
||||
if (ubDir != gfPlotPathEndDirection) sDistance += 4;//shadooow: small hack to return adjacent GridNo with lowest AP cost
|
||||
if (sDistance < sClosest || sClosest == -1)
|
||||
{
|
||||
sClosest = sDistance;
|
||||
|
||||
@@ -233,6 +233,7 @@ extern BOOLEAN gfNPCCircularDistLimit;
|
||||
extern BOOLEAN gfEstimatePath;
|
||||
extern BOOLEAN gfPathAroundObstacles;
|
||||
extern UINT8 gubGlobalPathFlags;
|
||||
extern UINT8 gfPlotPathEndDirection;
|
||||
|
||||
// Ian's terrain values for travelling speed/pathing purposes
|
||||
// Fixed by CJC March 4, 1998. Please do not change these unless familiar
|
||||
|
||||
+2
-1
@@ -91,6 +91,7 @@ UINT8 gubBuildingInfoToSet;
|
||||
INT32 iMaxSkipListLevel = MAX_SKIPLIST_LEVEL;
|
||||
INT32 iMaxTrailTree = MAX_TRAIL_TREE;
|
||||
INT32 iMaxPathQ = MAX_PATHQ;
|
||||
UINT8 gfPlotPathEndDirection;
|
||||
|
||||
extern BOOLEAN gfGeneratingMapEdgepoints;
|
||||
|
||||
@@ -4566,7 +4567,7 @@ INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPl
|
||||
sOldGrid = sTempGrid;
|
||||
|
||||
sTempGrid = NewGridNo(sTempGrid, DirectionInc( (UINT8)guiPathingData[iCnt]));
|
||||
|
||||
gfPlotPathEndDirection = GetDirectionToGridNoFromGridNo(sOldGrid, sTempGrid);
|
||||
// Get switch value...
|
||||
sSwitchValue = gubWorldMovementCosts[ sTempGrid ][ (INT8)guiPathingData[iCnt] ][ pSold->pathing.bLevel];
|
||||
|
||||
|
||||
+32
-75
@@ -1949,15 +1949,16 @@ INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTur
|
||||
else
|
||||
{
|
||||
// OK, in order to avoid path calculations here all the time... save and check if it's changed!
|
||||
if (pSoldier->sWalkToAttackGridNo == sActionGridNo)
|
||||
if (pSoldier->sWalkToAttackGridNo == sActionGridNo && pSoldier->sWalkToAttackMovementMode == (UINT8)pSoldier->usUIMovementMode)
|
||||
{
|
||||
sAPCost += (UINT8)(pSoldier->sWalkToAttackWalkToCost);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Save for next time...
|
||||
pSoldier->sWalkToAttackWalkToCost = PlotPath(pSoldier, sActionGridNo, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
|
||||
|
||||
pSoldier->sWalkToAttackMovementMode = (UINT8)pSoldier->usUIMovementMode;
|
||||
pSoldier->sWalkToAttackWalkToCost = PlotPath(pSoldier, sActionGridNo, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
|
||||
pSoldier->sWalkToAttackEndDirection = gfPlotPathEndDirection;
|
||||
if (pSoldier->sWalkToAttackWalkToCost == 0)
|
||||
{
|
||||
return(99);
|
||||
@@ -1977,7 +1978,11 @@ INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTur
|
||||
}
|
||||
|
||||
// Add points to attack
|
||||
sAPCost += MinAPsToPunch(pSoldier, sAdjustedGridNo, ubAddTurningCost);
|
||||
sAPCost += MinAPsToPunch(pSoldier, sAdjustedGridNo);
|
||||
|
||||
// Add points to turn around if needed
|
||||
sAPCost += CalculateActionTurningCost(pSoldier, sActionGridNo, sAdjustedGridNo, pSoldier->sWalkToAttackEndDirection);
|
||||
|
||||
// Add aim time...
|
||||
sAPCost += (bAimTime*APBPConstants[AP_CLICK_AIM]);
|
||||
|
||||
@@ -2015,32 +2020,10 @@ INT16 MinAPsToAttack(SOLDIERTYPE *pSoldier, INT32 sGridno, UINT8 ubAddTurningCos
|
||||
// LOOK IN BUDDY'S HAND TO DETERMINE WHAT TO DO HERE
|
||||
uiItemClass = Item[ undbarItem ].usItemClass;
|
||||
}
|
||||
#if 0//dnl ch73 290913
|
||||
// bare fist or with brass knuckles
|
||||
if ( !(pSoldier->inv[HANDPOS].exists()) || Item[pSoldier->inv[HANDPOS].usItem].brassknuckles )
|
||||
{
|
||||
sAPCost = MinAPsToPunch( pSoldier, sGridno, ubAddTurningCost );
|
||||
}
|
||||
else if ( uiItemClass & ( IC_PUNCH | IC_BLADE | IC_GUN | IC_LAUNCHER | IC_TENTACLES | IC_THROWING_KNIFE ) )
|
||||
{
|
||||
sAPCost = MinAPsToShootOrStab( pSoldier, sGridno, bAimTime, ubAddTurningCost, ubForceRaiseGunCost );
|
||||
}
|
||||
// thrown items
|
||||
else if ( uiItemClass & ( IC_GRENADE | IC_THROWN ) )
|
||||
{
|
||||
sAPCost = MinAPsToThrow( pSoldier, sGridno, ubAddTurningCost );
|
||||
}
|
||||
// for exceptions
|
||||
else
|
||||
sAPCost = MinAPsToPunch( pSoldier, sGridno, ubAddTurningCost );
|
||||
#else
|
||||
if(uiItemClass & (IC_GUN | IC_LAUNCHER | IC_THROWING_KNIFE))
|
||||
sAPCost = MinAPsToShootOrStab(pSoldier, sGridno, bAimTime, ubAddTurningCost, ubForceRaiseGunCost);
|
||||
else if(uiItemClass & (IC_GRENADE | IC_THROWN))
|
||||
sAPCost = MinAPsToThrow(pSoldier, sGridno, ubAddTurningCost);
|
||||
else
|
||||
sAPCost = MinAPsToPunch(pSoldier, sGridno, ubAddTurningCost);
|
||||
#endif
|
||||
return sAPCost;
|
||||
}
|
||||
|
||||
@@ -2285,6 +2268,25 @@ void GetAPChargeForShootOrStabWRTGunRaises( SOLDIERTYPE *pSoldier, INT32 sGridNo
|
||||
(*pfChargeRaise ) = fAddingRaiseGunCost;
|
||||
}
|
||||
|
||||
UINT16 CalculateActionTurningCost(SOLDIERTYPE *pSoldier, INT32 sActionGridNo, INT32 sAdjustedGridNo, UINT8 ubDirection)
|
||||
{
|
||||
UINT16 sAPCost = 0;
|
||||
// if soldier is already at sActionGridNo, use current direction instead of calculated one
|
||||
if (pSoldier->sGridNo == sActionGridNo) ubDirection = pSoldier->ubDirection;
|
||||
|
||||
// Is it the same as direction we need?
|
||||
if (ubDirection != GetDirectionToGridNoFromGridNo(sActionGridNo, sAdjustedGridNo))
|
||||
{
|
||||
OBJECTTYPE *pObjUsed = pSoldier->GetUsedWeapon(&pSoldier->inv[HANDPOS]);
|
||||
UINT16 usItem = pObjUsed->usItem;
|
||||
if (gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_PRONE)
|
||||
sAPCost += CalculateTurningCost(pSoldier, usItem, TRUE, ANIM_CROUCH);
|
||||
else
|
||||
sAPCost += CalculateTurningCost(pSoldier, usItem, TRUE);
|
||||
}
|
||||
return sAPCost;
|
||||
}
|
||||
|
||||
UINT16 CalculateTurningCost(SOLDIERTYPE *pSoldier, UINT16 usItem, BOOLEAN fAddingTurningCost, INT8 bDesiredHeight)//dnl ch72 190913
|
||||
{
|
||||
UINT16 usTrueAnimState, usTurningCost = 0;
|
||||
@@ -2374,8 +2376,6 @@ INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 bAimTime,
|
||||
// Flugente: we need a second item in case we are using an underbarrel weapon. Not all checks should apply for that one, as aiming is still done with the main weapon
|
||||
usUBItem = pSoldier->GetUsedWeaponNumber(&pSoldier->inv[HANDPOS]);
|
||||
}
|
||||
if(Item[usUBItem].usItemClass == IC_PUNCH || Item[usUBItem].usItemClass == IC_BLADE || Item[usUBItem].usItemClass == IC_TENTACLES)//dnl ch73 021013 punch and stub generally use identical logic so put all necessary stuff to MinAPsToPunch
|
||||
return(MinAPsToPunch(pSoldier, sGridNo, ubAddTurningCost));
|
||||
|
||||
OBJECTTYPE* pObjUsed = pSoldier->GetUsedWeapon( &(pSoldier->inv[HANDPOS]) );
|
||||
|
||||
@@ -2639,7 +2639,7 @@ INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 bAimTime,
|
||||
return bAPCost;
|
||||
}
|
||||
|
||||
INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost)//dnl ch73 290913
|
||||
INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT32 sGridNo)
|
||||
{
|
||||
INT16 bAPCost = APBPConstants[AP_MIN_AIM_ATTACK];
|
||||
|
||||
@@ -2670,20 +2670,7 @@ INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost
|
||||
bAPCost += GetAPsToChangeStance(pSoldier, ANIM_STAND);
|
||||
}
|
||||
|
||||
if( ubAddTurningCost )
|
||||
{
|
||||
// ATE: Use standing turn cost....
|
||||
UINT8 ubDirection = GetDirectionFromGridNo(sGridNo, pSoldier);
|
||||
|
||||
// Is it the same as he's facing?
|
||||
if(ubDirection != pSoldier->ubDirection)
|
||||
{
|
||||
if(gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_PRONE)
|
||||
bAPCost += CalculateTurningCost(pSoldier, usItem, TRUE, ANIM_CROUCH);
|
||||
else
|
||||
bAPCost += CalculateTurningCost(pSoldier, usItem, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return(bAPCost);
|
||||
@@ -4029,47 +4016,17 @@ INT16 GetBPsToStealItem( SOLDIERTYPE *pSoldier )
|
||||
|
||||
INT16 GetAPsToUseJar( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
{
|
||||
INT16 sAPCost = 0;
|
||||
|
||||
sAPCost = PlotPath( pSoldier, usMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
|
||||
// If point cost is zero, return 0
|
||||
if ( sAPCost != 0 )
|
||||
{
|
||||
// ADD APS TO PICKUP
|
||||
sAPCost += APBPConstants[AP_TAKE_BLOOD];
|
||||
}
|
||||
|
||||
return sAPCost;
|
||||
|
||||
return GetAPsToChangeStance(pSoldier, ANIM_CROUCH) + APBPConstants[AP_TAKE_BLOOD];
|
||||
}
|
||||
|
||||
INT16 GetAPsToUseCan( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
{
|
||||
INT16 sAPCost = 0;
|
||||
|
||||
sAPCost = PlotPath( pSoldier, usMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
|
||||
// If point cost is zero, return 0
|
||||
if ( sAPCost != 0 )
|
||||
{
|
||||
// ADD APS TO PICKUP
|
||||
sAPCost += APBPConstants[AP_ATTACH_CAN];
|
||||
}
|
||||
|
||||
return sAPCost;
|
||||
|
||||
return GetAPsToChangeStance(pSoldier, ANIM_CROUCH) + APBPConstants[AP_ATTACH_CAN];
|
||||
}
|
||||
|
||||
INT16 GetAPsToHandcuff( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
{
|
||||
INT16 sAPCost = 0;
|
||||
|
||||
sAPCost = PlotPath( pSoldier, usMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
|
||||
sAPCost += APBPConstants[AP_HANDCUFF];
|
||||
|
||||
return sAPCost;
|
||||
return GetAPsToChangeStance(pSoldier, ANIM_CROUCH) + APBPConstants[AP_HANDCUFF];
|
||||
}
|
||||
|
||||
INT16 GetAPsToApplyItem( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
|
||||
+2
-1
@@ -295,6 +295,7 @@ INT16 MinAPsToAttack(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCos
|
||||
INT16 MinPtsToMove(SOLDIERTYPE *pSoldier);
|
||||
INT8 MinAPsToStartMovement( SOLDIERTYPE * pSoldier, UINT16 usMovementMode );
|
||||
INT8 PtsToMoveDirection(SOLDIERTYPE *pSoldier, INT8 bDirection );
|
||||
UINT16 CalculateActionTurningCost(SOLDIERTYPE *pSoldier, INT32 sActionGridNo, INT32 sAdjustedGridNo, UINT8 ubDirection);
|
||||
UINT16 CalculateTurningCost(SOLDIERTYPE *pSoldier, UINT16 usItem, BOOLEAN fAddingTurningCost, INT8 bDesiredHeight=0);//dnl ch72 190913
|
||||
UINT16 CalculateRaiseGunCost(SOLDIERTYPE *pSoldier, BOOLEAN fAddingRaiseGunCost, INT32 iTargetGridNum, INT16 bAimTime );
|
||||
INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 bAimTime, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost = 0 );
|
||||
@@ -303,7 +304,7 @@ void DeductAmmo( SOLDIERTYPE *pSoldier, INT8 bInvPos );
|
||||
void DeductAmmo( SOLDIERTYPE *pSoldier, OBJECTTYPE* pObj );
|
||||
|
||||
UINT16 GetAPsToPickupItem( SOLDIERTYPE *pSoldier, INT32 usMapPos );
|
||||
INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost );
|
||||
INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT32 sGridNo);
|
||||
INT16 ApsToPunch( SOLDIERTYPE *pSoldier ); // SANDRO added this
|
||||
INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost, INT16 bAimTime );
|
||||
INT16 CalcAPsToBurst( INT16 bBaseActionPoints, OBJECTTYPE * pObj, SOLDIERTYPE* pSoldier );
|
||||
|
||||
@@ -4116,6 +4116,21 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
|
||||
DeductPoints( this, APBPConstants[AP_USE_REMOTE], 0, AFTERACTION_INTERRUPT );
|
||||
break;
|
||||
|
||||
case REFUEL_VEHICLE:
|
||||
|
||||
DeductPoints(this, APBPConstants[AP_REFUEL_VEHICLE], 0, AFTERACTION_INTERRUPT);
|
||||
break;
|
||||
|
||||
case GOTO_REPAIRMAN:
|
||||
|
||||
DeductPoints(this, APBPConstants[AP_START_REPAIR], 0, AFTERACTION_INTERRUPT);
|
||||
break;
|
||||
|
||||
case TAKE_BLOOD_FROM_CORPSE:
|
||||
|
||||
DeductPoints(this, APBPConstants[AP_TAKE_BLOOD], 0, AFTERACTION_INTERRUPT);
|
||||
break;
|
||||
|
||||
//case PUNCH:
|
||||
|
||||
//Deduct points for punching
|
||||
@@ -7723,7 +7738,7 @@ void EVENT_InternalSetSoldierDesiredDirection( SOLDIERTYPE *pSoldier, UINT8 ubNe
|
||||
|
||||
if ( pSoldier->pathing.bDesiredDirection != pSoldier->ubDirection )
|
||||
{
|
||||
if ( (gAnimControl[usAnimState].uiFlags & (ANIM_BREATH | ANIM_OK_CHARGE_AP_FOR_TURN | ANIM_FIREREADY/* | ANIM_TURNING*/) || usForceAnimState != INVALID_ANIMATION) && !fInitalMove && !pSoldier->flags.fDontChargeTurningAPs )//dnl ch70 160913 //dnl ch73 290913 in some bright future when UIPlotPath will calculate turning cost then ANIM_TURNING should be turn on as this solve many problems when APs was not deducted during turnoff
|
||||
if ( (gAnimControl[usAnimState].uiFlags & (ANIM_BREATH | ANIM_OK_CHARGE_AP_FOR_TURN | ANIM_FIREREADY | ANIM_TURNING) || usForceAnimState != INVALID_ANIMATION) && !fInitalMove && !pSoldier->flags.fDontChargeTurningAPs )
|
||||
{
|
||||
// SANDRO: hey, we have a function for this around, why not to use it, hm?
|
||||
// silversurfer: we better don't do that. GetAPsToLook( ... ) will charge APs for getting to crouched/prone position
|
||||
@@ -22338,15 +22353,16 @@ void SOLDIERTYPE::EVENT_SoldierBeginRepair( INT32 sGridNo, UINT8 ubDirection )
|
||||
this->EVENT_SetSoldierDirection(ubDirection);
|
||||
}
|
||||
|
||||
//BOOLEAN CutWireFence( INT16 sGridNo )
|
||||
|
||||
// SET TARGET GRIDNO
|
||||
//this->sTargetGridNo = sGridNo;
|
||||
|
||||
// CHANGE TO ANIMATION
|
||||
this->EVENT_InitNewSoldierAnim( GOTO_REPAIRMAN, 0, FALSE );
|
||||
// SET BUDDY'S ASSIGNMENT TO REPAIR...
|
||||
|
||||
if (gTacticalStatus.uiFlags & INCOMBAT)
|
||||
{
|
||||
//this doesn't work during combat, so return
|
||||
UnSetUIBusy(this->ubID);
|
||||
return;
|
||||
}
|
||||
|
||||
// Are we a SAM site? ( 3 == SAM )
|
||||
if ( bRepairItem == 3 )
|
||||
{
|
||||
@@ -22356,6 +22372,10 @@ void SOLDIERTYPE::EVENT_SoldierBeginRepair( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
SetSoldierAssignment( this, REPAIR, FALSE, FALSE, ubID );
|
||||
}
|
||||
else if (bRepairItem == 1) // ( 1 == ROBOT )
|
||||
{
|
||||
SetSoldierAssignment(this, REPAIR, FALSE, TRUE, -1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -22378,11 +22398,6 @@ void SOLDIERTYPE::EVENT_SoldierBeginRefuel( INT32 sGridNo, UINT8 ubDirection )
|
||||
this->EVENT_SetSoldierDirection(ubDirection);
|
||||
}
|
||||
|
||||
//BOOLEAN CutWireFence( INT16 sGridNo )
|
||||
|
||||
// SET TARGET GRIDNO
|
||||
//this->sTargetGridNo = sGridNo;
|
||||
|
||||
// CHANGE TO ANIMATION
|
||||
this->EVENT_InitNewSoldierAnim( REFUEL_VEHICLE, 0, FALSE );
|
||||
// SET BUDDY'S ASSIGNMENT TO REPAIR...
|
||||
@@ -22577,6 +22592,17 @@ void SOLDIERTYPE::EVENT_SoldierHandcuffPerson( INT32 sGridNo, UINT8 ubDirection
|
||||
success = TRUE;
|
||||
}
|
||||
|
||||
// CHANGE DIRECTION AND GOTO ANIMATION NOW
|
||||
if (this->ubDirection != ubDirection)
|
||||
{
|
||||
this->flags.uiStatusFlags |= SOLDIER_LOOK_NEXT_TURNSOLDIER;//shadooow: fix for vision not updating
|
||||
this->EVENT_SetSoldierDesiredDirection(ubDirection);
|
||||
this->EVENT_SetSoldierDirection(ubDirection);
|
||||
}
|
||||
|
||||
// CHANGE TO ANIMATION
|
||||
this->EVENT_InitNewSoldierAnim(RELOAD_ROBOT, 0, FALSE);
|
||||
|
||||
if ( success )
|
||||
{
|
||||
// arrest this guy
|
||||
@@ -22627,17 +22653,6 @@ void SOLDIERTYPE::EVENT_SoldierHandcuffPerson( INT32 sGridNo, UINT8 ubDirection
|
||||
}
|
||||
}
|
||||
|
||||
// CHANGE DIRECTION AND GOTO ANIMATION NOW
|
||||
if (this->ubDirection != ubDirection)
|
||||
{
|
||||
this->flags.uiStatusFlags |= SOLDIER_LOOK_NEXT_TURNSOLDIER;//shadooow: fix for vision not updating
|
||||
this->EVENT_SetSoldierDesiredDirection(ubDirection);
|
||||
this->EVENT_SetSoldierDirection(ubDirection);
|
||||
}
|
||||
|
||||
// CHANGE TO ANIMATION
|
||||
this->EVENT_InitNewSoldierAnim( RELOAD_ROBOT, 0, FALSE );
|
||||
|
||||
// we gain a bit of experience...
|
||||
StatChange( this, STRAMT, 2, TRUE );
|
||||
StatChange( this, DEXTAMT, 3, TRUE );
|
||||
|
||||
@@ -1288,6 +1288,7 @@ public:
|
||||
UINT16 usAnimSurface;
|
||||
UINT16 sZLevel;
|
||||
|
||||
INT16 sWalkToAttackMovementMode;//shadooow: stores movement mode used in last pathing
|
||||
INT32 sWalkToAttackGridNo;
|
||||
INT16 sWalkToAttackWalkToCost;
|
||||
|
||||
@@ -1297,6 +1298,7 @@ public:
|
||||
UINT16 *pForcedShade;
|
||||
|
||||
INT8 bDisplayDamageCount;
|
||||
UINT8 sWalkToAttackEndDirection;//shadooow: stores direction of merc at the destination grid
|
||||
INT16 sDamage;
|
||||
INT16 sDamageX;
|
||||
INT16 sDamageY;
|
||||
|
||||
@@ -536,7 +536,11 @@ BOOLEAN IsRepairableStructAtGridNo( INT32 sGridNo, UINT8 *pubID )
|
||||
|
||||
if ( ubMerc != NOBODY )
|
||||
{
|
||||
if ( MercPtrs[ ubMerc ]->flags.uiStatusFlags & SOLDIER_VEHICLE )
|
||||
if (MercPtrs[ubMerc]->flags.uiStatusFlags & SOLDIER_ROBOT)
|
||||
{
|
||||
return( 1 );
|
||||
}
|
||||
else if ( MercPtrs[ ubMerc ]->flags.uiStatusFlags & SOLDIER_VEHICLE )
|
||||
{
|
||||
return( 2 );
|
||||
}
|
||||
|
||||
@@ -2207,7 +2207,7 @@ UINT8 HandleRemoteCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivat
|
||||
UINT8 HandleCameraCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
{
|
||||
// DRAW PATH TO GUY
|
||||
HandleUIMovementCursor( pSoldier, uiCursorFlags, sGridNo, MOVEUI_TARGET_HANDCUFF );
|
||||
HandleUIMovementCursor( pSoldier, uiCursorFlags, sGridNo, MOVEUI_TARGET_CAMERA );
|
||||
|
||||
// do we have handcuffs in our hand?
|
||||
if ( HasItemFlag( ( &( pSoldier->inv[HANDPOS] ) )->usItem, CAMERA ) && SoldierTo3DLocationLineOfSightTest( pSoldier, sGridNo, gsInterfaceLevel, 0, TRUE, CALC_FROM_WANTED_DIR, TRUE ) )
|
||||
|
||||
Reference in New Issue
Block a user