- bugfix: Wrong AP deduction if a merc punches the enemy

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@653 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2007-01-01 21:25:48 +00:00
parent 7a1987665d
commit 238993745e
5 changed files with 67 additions and 14 deletions
BIN
View File
Binary file not shown.
+37
View File
@@ -3969,6 +3969,10 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, UINT16 usMapPos, UINT32 uiFlags
if ( sGotLocation != NOWHERE )
{
sAPCost += MinAPsToAttack( pSoldier, sAdjustedGridNo, TRUE );
// WANNE: Turn around APs were missing!
//sAPCost += APsToTurnAround(pSoldier, sAdjustedGridNo);
sAPCost += UIPlotPath( pSoldier, sGotLocation, NO_COPYROUTE, fPlot, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints);
if ( sGotLocation != pSoldier->sGridNo && fGotAdjacent )
@@ -4083,6 +4087,39 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, UINT16 usMapPos, UINT32 uiFlags
return( bReturnCode );
}
// WANNE: Calculate the APs to turn around
INT16 APsToTurnAround(SOLDIERTYPE *pSoldier, INT16 sAdjustedGridNo)
{
INT16 sAPCost = 0;
BOOLEAN fInitalMove = FALSE;
// Get the new direction
UINT8 ubDirection = (UINT8)GetDirectionFromGridNo( sAdjustedGridNo, pSoldier );
// If new direction is not the same than the old direction
if ( pSoldier->bDesiredDirection != ubDirection)
{
if ( gAnimControl[ pSoldier->usAnimState ].uiFlags & ( ANIM_BREATH | ANIM_OK_CHARGE_AP_FOR_TURN | ANIM_FIREREADY ) && !fInitalMove && !pSoldier->fDontChargeTurningAPs )
{
// Which position has the soldier?
switch( gAnimControl[ pSoldier->usAnimState ].ubEndHeight )
{
case ANIM_STAND:
sAPCost += AP_LOOK_STANDING;
break;
case ANIM_CROUCH:
sAPCost += AP_LOOK_CROUCHED;
break;
case ANIM_PRONE:
sAPCost += AP_LOOK_PRONE;
break;
}
}
}
return sAPCost;
}
BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
{
+3
View File
@@ -268,6 +268,9 @@ extern BOOLEAN gfUIForceReExamineCursorData;
extern INT16 guiCreateGuyIndex;
extern INT16 guiCreateBadGuyIndex;
// WANNE: Calculate the APs to turn around
INT16 APsToTurnAround(SOLDIERTYPE *pSoldier, INT16 sAdjustedGridNo);
// FUNCTIONS IN INPUT MODULES
void GetKeyboardInput( UINT32 *puiNewEvent );
void GetPolledKeyboardInput( UINT32 *puiNewEvent );
+1
View File
@@ -1073,6 +1073,7 @@ UINT8 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTur
// Add points to attack
sAPCost += MinAPsToAttack( pSoldier, sAdjustedGridNo, ubAddTurningCost );
//sAPCost += APsToTurnAround(pSoldier, sAdjustedGridNo);
}
else
{
+26 -14
View File
@@ -124,6 +124,9 @@ enum
EX_DIRECTION_IRRELEVANT
} ExtendedWorldDirections;
// WANNE
BOOLEAN bPreDeductPunchAPs = FALSE;
// LUT for conversion from 8-direction to extended direction
UINT8 ubExtDirection[] =
{
@@ -4836,23 +4839,27 @@ void EVENT_InternalSetSoldierDesiredDirection( SOLDIERTYPE *pSoldier, UINT16 usN
if ( pSoldier->bDesiredDirection != pSoldier->bDirection )
{
if ( gAnimControl[ usAnimState ].uiFlags & ( ANIM_BREATH | ANIM_OK_CHARGE_AP_FOR_TURN | ANIM_FIREREADY ) && !fInitalMove && !pSoldier->fDontChargeTurningAPs )
// WANNE: If we punch the enemy, do not pre deduct the aps!
if (bPreDeductPunchAPs == TRUE)
{
// Deduct points for initial turn!
switch( gAnimControl[ usAnimState ].ubEndHeight )
if ( gAnimControl[ usAnimState ].uiFlags & ( ANIM_BREATH | ANIM_OK_CHARGE_AP_FOR_TURN | ANIM_FIREREADY ) && !fInitalMove && !pSoldier->fDontChargeTurningAPs )
{
// Now change to appropriate animation
case ANIM_STAND:
DeductPoints( pSoldier, AP_LOOK_STANDING, 0 );
break;
// Deduct points for initial turn!
switch( gAnimControl[ usAnimState ].ubEndHeight )
{
// Now change to appropriate animation
case ANIM_STAND:
DeductPoints( pSoldier, AP_LOOK_STANDING, 0 );
break;
case ANIM_CROUCH:
DeductPoints( pSoldier, AP_LOOK_CROUCHED, 0 );
break;
case ANIM_CROUCH:
DeductPoints( pSoldier, AP_LOOK_CROUCHED, 0 );
break;
case ANIM_PRONE:
DeductPoints( pSoldier, AP_LOOK_PRONE, 0 );
break;
case ANIM_PRONE:
DeductPoints( pSoldier, AP_LOOK_PRONE, 0 );
break;
}
}
}
@@ -8812,9 +8819,14 @@ void EVENT_SoldierBeginPunchAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8
if ( fChangeDirection )
{
// CHANGE DIRECTION AND GOTO ANIMATION NOW
// WANNE: Do not pre deduct APs for punching. These APs are calculated later!
bPreDeductPunchAPs = FALSE;
// CHANGE DIRECTION AND GOTO ANIMATION NOW
EVENT_SetSoldierDesiredDirection( pSoldier, ubDirection );
EVENT_SetSoldierDirection( pSoldier, ubDirection );
bPreDeductPunchAPs = TRUE;
}