mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
CalcTargetMovementOffset: better integer calculation for max tiles penalty.
SOLDIERTYPE::initialize: initialize additional data. EVENT_FireSoldierWeapon: if shooting soldier is invisible, locate screen to target spot. CancelAIAction: reset next AI action. FindBestPath: improved gas avoiding code. InGas: improved code, also check the spot itself. LegalNPCDestination: disabled additional checks to prevent AI deadlock. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8695 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+3
-1
@@ -9098,7 +9098,9 @@ void CalcTargetMovementOffset( SOLDIERTYPE *pShooter, SOLDIERTYPE *pTarget, OBJE
|
||||
// Again, if the shooter is skilled, this will occur after fewer tiles have been moved.
|
||||
// If the target moves *more* tiles than this, the movement penalty will begin to diminish. That's our shooter
|
||||
// beginning to compensate for the target's speed, pointing the gun ahead of the target ("Leading the target").
|
||||
INT16 uiTilesForMaxPenalty = (INT16)((100-uiCombinedSkill) / (100 / gGameCTHConstants.MOVEMENT_TRACKING_DIFFICULTY));
|
||||
// sevenfm: better integer calculation
|
||||
//INT16 uiTilesForMaxPenalty = (INT16)((100-uiCombinedSkill) / (100 / gGameCTHConstants.MOVEMENT_TRACKING_DIFFICULTY));
|
||||
INT16 uiTilesForMaxPenalty = (INT16)((100 - uiCombinedSkill) * gGameCTHConstants.MOVEMENT_TRACKING_DIFFICULTY / 100);
|
||||
|
||||
UINT8 stance = gAnimControl[ pShooter->usAnimState ].ubEndHeight;
|
||||
|
||||
|
||||
+4
-3
@@ -62,6 +62,7 @@ extern UINT16 gubAnimSurfaceIndex[ TOTALBODYTYPES ][ NUMANIMATIONSTATES ];
|
||||
|
||||
// sevenfm:
|
||||
extern BOOLEAN InGas( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
extern BOOLEAN InGasSpot(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel);
|
||||
|
||||
//extern UINT8 gubDiagCost[20];
|
||||
// skiplist has extra level of pointers every 4 elements, so a level 5is optimized for
|
||||
@@ -3144,9 +3145,9 @@ if(!GridNoOnVisibleWorldTile(iDestination))
|
||||
}
|
||||
|
||||
// sevenfm: skip gas if not in gas already
|
||||
if( !(s->flags.uiStatusFlags & SOLDIER_PC) &&
|
||||
InGas(s, newLoc) &&
|
||||
!InGas(s, s->sGridNo) )
|
||||
if (!(s->flags.uiStatusFlags & SOLDIER_PC) &&
|
||||
InGasSpot(s, newLoc, ubLevel) &&
|
||||
!InGasSpot(s, s->sGridNo, ubLevel))
|
||||
{
|
||||
goto NEXTDIR;
|
||||
}
|
||||
|
||||
@@ -1114,6 +1114,19 @@ void SOLDIERTYPE::initialize( )
|
||||
memset( &newdrugs, 0, sizeof(DRUGS) );
|
||||
memset( &stats, 0, sizeof(STRUCT_Statistics) );
|
||||
memset( &pathing, 0, sizeof(STRUCT_Pathing) );
|
||||
|
||||
// sevenfm:initialize additional data
|
||||
this->ubLastShock = 0;
|
||||
this->ubLastSuppression = 0;
|
||||
this->ubLastAP = 0;
|
||||
this->ubLastMorale = 0;
|
||||
this->ubLastShockFromHit = 0;
|
||||
this->ubLastMoraleFromHit = 0;
|
||||
this->ubLastAPFromHit = 0;
|
||||
this->iLastBulletImpact = 0;
|
||||
this->iLastArmourProtection = 0;
|
||||
this->usQuickItemId = 0;
|
||||
this->ubQuickItemSlot = 0;
|
||||
}
|
||||
|
||||
bool SOLDIERTYPE::exists( )
|
||||
@@ -5084,12 +5097,21 @@ void SOLDIERTYPE::EVENT_FireSoldierWeapon( INT32 sTargetGridNo )
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set flag indicating we are about to shoot once destination direction is hit
|
||||
this->flags.fTurningToShoot = TRUE;
|
||||
|
||||
if ( this->bTeam != gbPlayerNum && this->bVisible != -1 )
|
||||
if (this->bTeam != gbPlayerNum)
|
||||
{
|
||||
LocateSoldier( this->ubID, DONTSETLOCATOR );
|
||||
if (this->bVisible != -1)
|
||||
{
|
||||
LocateSoldier(this->ubID, DONTSETLOCATOR);
|
||||
}
|
||||
else if (!TileIsOutOfBounds(sTargetGridNo) && !GridNoOnScreen(sTargetGridNo))
|
||||
{
|
||||
INT16 sNewCenterWorldX = CenterX(sTargetGridNo);
|
||||
INT16 sNewCenterWorldY = CenterY(sTargetGridNo);
|
||||
SetRenderCenter(sNewCenterWorldX, sNewCenterWorldY);
|
||||
|
||||
// Plot new path!
|
||||
gfPlotNewMovement = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user