From 238993745e540a8d091ca631049115788c641330 Mon Sep 17 00:00:00 2001 From: Wanne Date: Mon, 1 Jan 2007 21:25:48 +0000 Subject: [PATCH] - 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 --- JA2.suo | Bin 197632 -> 197632 bytes Tactical/Handle UI.cpp | 37 ++++++++++++++++++++++++++++++++ Tactical/Handle UI.h | 3 +++ Tactical/Points.cpp | 1 + Tactical/Soldier Control.cpp | 40 +++++++++++++++++++++++------------ 5 files changed, 67 insertions(+), 14 deletions(-) diff --git a/JA2.suo b/JA2.suo index af6cd20c31ef7a0a7bf050ff8fefb40a568d31d5..241cee8e2a6d26a8a16b7e07a666ff3e23841f84 100644 GIT binary patch delta 2075 zcmai#dr;I>6vyxR?YgY6>;k)siaeHw4@5weiWK4@S}MxoyBSjvoTk7e+)T~E)pFXV zf501@%$bIAsz0O=T4#Pv)7TbDlBta2*f^zw%?J)XXox@5rs#WjcgV1&JM;OS`#AS^ z&bjCQ&d=+!czu@6dZV?W_qO@R?61fmgeYnC?=$w0u}TxdUvBbh6yZN-ZZbp*D^?T1 z7@DjyXG~J+hvZ(%E2cNmYd`M4Z!wcCN)QR*F$=L5%#yKI`{Xx_LL31?jbw?{C@XDw zGSHna%dK0DS@BpnD4lj84A>%`7u8}u!@>%5OvCU1?C%sN9@ECQx-hdVfdV= z7rWGiL%qghk3=^P24Wxq%Fayj4v%qYS z3Fc_xfXG5;F31KsAQ#L7d0;+R0P?{j;8E}xC;*Rxgz32Aul@3a4Z6=>=>?@E>e^_O|E7@P$({He- zlaCFjCzu+~*KV@dFcb6O?C1qcKBr!zG+s#L;E_Qp<5fm#62c?{#LHi==apC=w1Wg0u|c`q%u6-TKm?VN)8Y{JGMJLo4f` zCXVaEL0;;hnd6bo;m!dnAmYm%G=r^!BmiG_Rr`e0)`S#$wK@otpH9_0zKB?Jk z@r2kW$}wuhxJJI`aPs?y$(8PgS~%nf9KE253!0MuJcD@nc{3b_lK&FMaQJMMEd0MH z57vg#l^^{Pz7o}xT>0>}L*ch7Sr$AT*>ZM)UU!;WiSwLVRzx@u?i-?Kc*Q71+fhbT z`D zJv_s?SCyZ4aF6STX?^g`c9g$|oTwWO=~)fy#4_I8L)Dq%F`-mW)PK;U3U+@WF4A_OYM^QtPvpl9pZWOa&#-gPCgfP=7ayL-^%q<^K*eom zX=*b57XKZZrswq2O8Psw_^(XVZXGsUja?#k<8x3Syi2&nOJWB%jL;V5yT~B^LlgHf U(sV|qT`qjRXo&QpA+3AbUx-2-+W-In delta 1540 zcmZuxeN2^A7(c(4_wwca;KIFdCB0pdni<50tWAo#23aHK0I5IBL=cpW5Cs*u#;&su zic0MaADeD6w^~iH3-^zUADdU?TBfGeT&u}OZP5n(LE;}uBt7T7Y|-l7e(yQ&^Zd^9 zJm+_w^ZL8Y{w{N%QMU$CUKsm6>r2E4A;ND5JM>G?@6XQ821{c78e)Ty_|6y$tn6i@ z@yLq!Op~Hl$#%0Z_I;ie9t%#J<6#p55JIx$7{e*;)|7-Ko;et4>Pvd9x;$*%sQXfx zw^usZ>x*aaR#7AJdGyI8w)BU5Dqk6!nnkPF#&33*`Sl`yzA73;i^1Gzb3N)y=4ll( zHyN%?JZn@=72sJ>$7~f~hrutg<^}z>Ry{Ud6CzH?>6A`Q7qY`~Sr#Yf$yR5%+0MlI z`wZT37HF#$GT+RwFsuw4BZ*;WBr{SN4u+GF%1C3l7)nP2{WXMv^tN2>@x)+9>FRd5 z)4Ejdz3r5DFOFfo{CW5}IXs+7r)IEPjt=jNYZk?#P^_2RZ>*G^e_7?I#~rM@G#X>p zxjt6es8O9mu=VS5m>01{$*d|jtaq-M3+OoDr9dI9RCELBGiF{3To=d znw~c72!(ZoH9JRQ$+z*LaziloaHgD4I1b(>b^n~G{4K^f(_AEyiNOz$O`$H8j zd|{`tdK{v_TgV6vX5sK|OCooQderzZtt!I^HUFl0=<4UNCLD1_okv33Kf&b~nXAW! zaz8^pDA0>iDu0g?T^UCbYu2(jN>yV4ty%#2UrzfRM~z1*&xUL|KfxiqC*h~w8RSzs zFhJETrnIsG@go!UlVk z?4s~b2!>h)@c{<1{h-=DEK@z2NvHZy5X%7`6Ak3QfVGr8!Ru1!+uw1Qdf()9y#FM+ zH-vSx|0dVwh`LT+gBx>8_J0REoGR5KT@zK1?ptNxPWjkLb$y)U{5d|rqg&u`?hy5& ziSKefH`Q+AHaChonjFF_lrzDbOO4j+R`s5s%1@C&_oi5fC%)p$X;EhhO%CH%(;87O zisvnL8D3iP2a3o$1{V;e7trW+T(dN=P%U$RkoI}Yv?$9^=tN2_i>Urebw-VwdEP{$ z(^@r+46-UQikl%lw@UwScW%?`d=yPIIfd#F7aUnklYT5WHcp$B;JtC&6#ufZ{&R;= zNe5=&rYC1`CP4^)^shm)Gpy_JWMsveqW#C$Z{@&pFXWQzMeh`iBUCi5U0nD#D--x_ diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index 69769326d..68f6702c2 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -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 ) { diff --git a/Tactical/Handle UI.h b/Tactical/Handle UI.h index a869c07fb..3760657f0 100644 --- a/Tactical/Handle UI.h +++ b/Tactical/Handle UI.h @@ -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 ); diff --git a/Tactical/Points.cpp b/Tactical/Points.cpp index d4338a1d2..cfa088e79 100644 --- a/Tactical/Points.cpp +++ b/Tactical/Points.cpp @@ -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 { diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index dd00bc03b..6db24f635 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -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; }