From c351c27e373f169f98195f8a62174af327ee8a91 Mon Sep 17 00:00:00 2001 From: Wanne Date: Mon, 13 Nov 2006 08:36:36 +0000 Subject: [PATCH] - bugfix: Endless clock after stealing - changed: APs for stealing from 10 to 14 (because stealing is more than simple picking enemies gun) - changed: You cannot steal items from head, body, leg or face until the enemy is collapsed (lying on the ground) git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@631 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameVersion.cpp | 4 +-- JA2.suo | Bin 197632 -> 197632 bytes JA2.vcproj | 4 +-- Tactical/Handle Items.cpp | 63 ++++++++++++++++++++++++++++------- Tactical/Interface Items.cpp | 4 +++ Tactical/Points.h | 2 +- Tactical/Weapons.cpp | 43 +++++++++++++++++++----- Utils/Text.h | 3 +- Utils/_DutchText.cpp | 1 + Utils/_EnglishText.cpp | 3 +- Utils/_FrenchText.cpp | 1 + Utils/_GermanText.cpp | 7 ++-- Utils/_ItalianText.cpp | 1 + Utils/_PolishText.cpp | 1 + Utils/_RussianText.cpp | 1 + 15 files changed, 107 insertions(+), 31 deletions(-) diff --git a/GameVersion.cpp b/GameVersion.cpp index 8b0214f7..58f18731 100644 --- a/GameVersion.cpp +++ b/GameVersion.cpp @@ -23,12 +23,12 @@ INT16 zVersionLabel[256] = { L"Beta v. 0.98" }; #else //RELEASE BUILD VERSION - INT16 zVersionLabel[256] = { L"Release v1.13.620" }; + INT16 zVersionLabel[256] = { L"Release v1.13.631" }; #endif -INT8 czVersionNumber[16] = { "Build 06.11.06" }; +INT8 czVersionNumber[16] = { "Build 06.11.13" }; INT16 zTrackingNumber[16] = { L"Z" }; diff --git a/JA2.suo b/JA2.suo index 127fb8e8494b22a9d9413aaabe359c80509ec5ca..9cccb8de06deebc943fd47e857e2c84d7482c9ed 100644 GIT binary patch delta 2779 zcma)82~1Q+7@qI#${}x;U09U@!b8z2R zyHfS8R4WUuc1J{Ac4Nq4ScDLMudmdaVSP>Ey^H5Ok>vy8ERG9-wkV8hHmqcgj z=`J@Ey*_$^YHP!GozzEE^wmo`WU1C5rteM%RRMh2F*~r@leH^$iCbCU&R3c-enxyF z2j0j&>Uq7(^KYK_AJcr-w>HG+snr_gZbKJ+X7#&#=z`sJ5O|&3PK4>jrv~ZEAKCR< zEy0&}sMexNyfTk+4dAYsU;?{Sb4rb5hT|!w@6Iu`-xpobKnH-~l$C&3I^jnGR}A{l z>aNmn9tx=m=-KWQR{UJ=Ju?w2jByGq2tUshiM?_4j7{W8giBvlV5RAM&>d2}8!g|) zR{bGLtl_s}IEJ!37jH4QO$qN(c+TNczQLz_Q6#dMH_zndbA2Y6Z71s`PeMc)uZJKF zbbAjvQo>%i7-V5fCaBj)5tJ2;CB~8-SP9A+tysw# zgG{V3vSY9#lG6Jioici1wy`AzU%y434>|B*V-<&Sb_L?&ZSTdgK^}5lNT*-IU*tKW z45H&l6$e!mp@uwV=tuUgs32`4J|gdTyz`GnhOufBjw|HuudEBN4+~hSrwJQCv}y~M z+pYyjLase1EfPA_#34i4)8Zy`diroLd(57<%InEPt|C2{t1n6?@LrJl?LaQ`5 zWIej&iZr${j_-j?Zi}t^k8Q~{g$|~%PR>x+Y5YDUG&datjoXJr^6rOsLuv|=^2BJi zRK!JTu@oh9%|otc00rc|44*B>EZrjZyFkpRQ|B?AlsLHPwgajE!_ckGSVUSHiX|>b z;(z&N@j_Z&hGd%d1BU3g|8UX%I+W5Y50xTXR|VBoP=+IgW#HQ-Lgj_$F^Z;F;vx-u z8S&KX5GK;^hhZbF8frUJ+UQ%2Ie3=l7^!)aN)tF`7tbSyKCMC|`7b=%Pt4k5*h)>u z5k|Wva0*O~sYekPa6=0(V~-hT=;JVDx~5XW2}V;}1Jx?gkoN$7CZ(1yK-~@4qVI)P z47nHD5{@D?>1J(}V(m1auhwF&)EusX#&3DPm@Vs1wGGN}&eN^ksH1V`u+*8L2>C$E zQ5gvN;yFwKUA=*DXJQ*>b|n@;(}L-(vzi{rs$)Iu7H;5{Slmg^SIodt#yU_85PkXc zsz_g3ix_7_u#%DO!#kj{euk*FVJH z4cf~G#QuB>gM%$h*^U{3+&O|ZiF0?C601-WKpxpf;I~WAboZzs^nE4DiPNXaUe2LQ zTy4!6EZ#bnOo`+^P20}$9~^?s85Jx~=XP?@{R0t2Zk@lrI*gpy=0Ky{h;tv*(dh=I z*o-I16)e!&zZ+}fGOfyp*>VS>-_G}^h@w)9iDGsVxVc3ZA1@wJ*EV* z*fChi*!fVI__+3+f|)e+figy)d1eS*Jc=(Po_hFX56%jh?9xWdybaCWn!6ou(?~xe zon3<^fBe%D4XV73RA+K9k2*Ih7a~USk5#_;zi95-CS^{~=KOXGmVY{ZiWoqiIvl0? zMy0r=Cf$Q|jIyTY;9m@8ngA@^%=FnKrGUP@f)|Y3I!prL3Z9}@ Vpu11@F)zx;MK@p+-B9%Se*iPg1`YrK delta 3188 zcmb_eeNa@_6~E{4fJK&Fc42Xg3t0?Mf{8&VAGS7p2o|J#EG$VW!H`7=u_e02wWY*_ zC7HC&m`<^;aHg5gh%w0@(IE+|^K8c|Q_Ch;BIqpxB1m>)iQbSTQk9g*C|d2G5$=bPpwwhXP})A@e8lm zF1kgB*eW_jkGMk=i+1qTxe3y|D^BY( z_a*E>vvnl&h1o($2T6z%kVegBNlVyn6{6RwSu7b^spV(t`@o?MXb$afmcqOP(qxVB z0aO5>{OBE!JKvA)Rv_6S2ecfkbJYPmnoZE$VoYs8t6NS=0~?LANCQ1`DAZwX1KKRK zQy>zsM5|r5d(6p^f!JUm&106G^aYxfp?#88uT7*CX@T@NweplTTEO8k+iqAJy6!M5 z4RMMP3M3JtLgFC_5Ie*KNrEhcBty)Q6o>_4g``4kkXZmo!#5q`2$Ay@8q4f0Qm!V3 z`l{=EE{dpp0-t^g`3&+oWEK+o;NTZdYSnU1RcaFx86>zwr991j>L&=!Q4Hs4J(KIS zC;x5HF1WKp9j7nEnN=JFL7DeV;4k&s$?E%leRjg^!g%U}xzP2q=DYYk3*~d_!?b#6 zEuEoVa<`#zx+k(5^n253VFTKM|trBq-s@6kh#=O67E)8@&h-g$L2^0WBUBZm~w(Exv{C zX3Q5ty1vE_uL$TR2~H#x7n>?IJ9vajeGU*j7D>ka; zZFX9%_d01evByCbT)m1O(O)j4=f2N_Q%WGk9&wWV-mSkjK&!Gi@Vb)9|G1q#Wd9ju zot`>Eqhx3&T{2-yJePRiOT@+)?|MgZvpboB`tkjgPmK4^mu-?R!L!NE!Dnfh$18#5 z>YbF%%`cEsZ#h6C3Qx|_lk6X$yEuD4jYw;aB{ExOU6H}rDz+gMGDKb+zfrW|-Gq0! zC^Nog7^@Zac+0?*Lb|kz6D53%XhVO@V=(oZ z&{|jo!$AD~F+zl^Vm-|Hv4yOS0i0;5+PM=obCakr03^Wt4$+La%p>WA4S>)K`t*oO z!#5qG&H%ME`H%t)Zd$Gl{zzq~ik$PUq%z)ooKpGXU+IS_=i>I#GD)9YMZ~e^OJ#*p zM_Tqw4RZ40Zyg*=q+GThLDWW7vfEn0->rc0sNqe7h27KCHg6>_YDNF-ICT=YzDH(m z{!&Tfr{AFSG8%s;(DEu)Pm@sQbC%(0MPig zbaHTE0ojKxk%d1Rr7Bd9bRNAOudLJ5sH|D570rBm$wTn(wv##jG34wv13i1kVN8Og zbv$^Org`Kk7@eM?2e@{etZGhlf3_aOAs#MPGWhW$WFumqO11pz9b}0)I9$O7q~i*? zL#0;P$`6m;s?AQUq;6U4co7v*vlq!#nd7>};_x;>bSJvSa8ZHW_b{~;RS=U2dkGnw=O2MgS#O+X58ihJs_&WHxoF}JfGk-KjDSY+!;XRjYPhG3#=}~%!#~xSG$;&xal*T1TsmV}O zv!j+UsRggq7`oOj<5rS4j=VAa^M=)1V*39j*Z(hRa&Q9STO1{xJBK7f1?rhE8@EOQ z@t!}^b8LG9vAs67*j?X<=`3L&Gd793bACl54jhP$t0^m%RJs#=)z@A&5CUg{C3VcO?A8;G*Dyp zj87h=LypQwNaT+|44*86-F)obFd`d%`C4vXfslmy<`n zb2*vMPSQCZ{{uPMa|H$uePwXb6Xs%3m6Fd0NehQ6=}!JQl}d+Q6y(wiRKufHRAAiC z!zWSSkYgEKn1#!IAVdKU4&hi)M>O%9M<~TDYkef6qua}TN|e7Nc$&g_Qq+%?*Vn-s eTo_)-AD*Y=7-apYeu;xuUuA~uKxfF*>Z~j diff --git a/JA2.vcproj b/JA2.vcproj index 1538560e..435d3331 100644 --- a/JA2.vcproj +++ b/JA2.vcproj @@ -43,7 +43,7 @@ inv+i; if (pObject->usItem!=0) { - pTempItemPool = (ITEM_POOL*)MemAlloc(sizeof(ITEM_POOL)); - ++ubCount; - if (pItemPool == NULL) + // Is the enemy collapsed + if ( pOpponent->bLife < OKLIFE || pOpponent->bCollapsed ) { - pItemPool = pTempItemPool; - pItemPool->pPrev = NULL; + // We can steal any of his items in the inventory + fStealItem = TRUE; } else { - pTempItemPool->pPrev = pTempLastItemPool; - pTempLastItemPool->pNext = pTempItemPool; + // Check, if we can steal the item + switch (i) + { + case HANDPOS: + case SECONDHANDPOS: + case BIGPOCK1POS: + case BIGPOCK2POS: + case BIGPOCK3POS: + case BIGPOCK4POS: + case SMALLPOCK1POS: + case SMALLPOCK2POS: + case SMALLPOCK3POS: + case SMALLPOCK4POS: + case SMALLPOCK5POS: + case SMALLPOCK6POS: + case SMALLPOCK7POS: + case SMALLPOCK8POS: + fStealItem = TRUE; + break; + default: + fStealItem = FALSE; + break; + } + } + + if (fStealItem == TRUE) + { + pTempItemPool = (ITEM_POOL*)MemAlloc(sizeof(ITEM_POOL)); + ++ubCount; + if (pItemPool == NULL) + { + pItemPool = pTempItemPool; + pItemPool->pPrev = NULL; + } + else + { + pTempItemPool->pPrev = pTempLastItemPool; + pTempLastItemPool->pNext = pTempItemPool; + } + pTempItemPool->pNext = NULL; + pTempItemPool->iItemIndex = i; + //very bad, jack, to test if we are stealing? + pTempItemPool->pLevelNode=NULL;//finally not used + pTempLastItemPool=pTempItemPool; } - pTempItemPool->pNext = NULL; - pTempItemPool->iItemIndex = i; - //very bad, jack, to test if we are stealing? - pTempItemPool->pLevelNode=NULL;//finally not used - pTempLastItemPool=pTempItemPool; } } if (ubCount == 0) diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index 3fdc720d..d6b5bc32 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -6960,6 +6960,8 @@ void ItemPickupOK( GUI_BUTTON *btn, INT32 reason ) DeletePool(gItemPickupMenu.pItemPool); if ((gpOpponent->inv[HANDPOS].usItem == NOTHING ) && (usLastItem!=NOTHING)) ReLoadSoldierAnimationDueToHandItemChange( gpOpponent, usLastItem, NOTHING ); + + PreventFromTheFreezingBug(gItemPickupMenu.pSoldier); } else { @@ -6992,6 +6994,8 @@ void ItemPickupCancel( GUI_BUTTON *btn, INT32 reason ) if (gfStealing) //jackaians modif { DeletePool(gItemPickupMenu.pItemPool); + + PreventFromTheFreezingBug(gItemPickupMenu.pSoldier); } } else if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE ) diff --git a/Tactical/Points.h b/Tactical/Points.h index e302b2ac..8fc6101e 100644 --- a/Tactical/Points.h +++ b/Tactical/Points.h @@ -23,7 +23,7 @@ #define AP_REVERSE_MODIFIER 1 #define AP_STEALTH_MODIFIER 2 -#define AP_STEAL_ITEM 10 // APs to steal item.... +#define AP_STEAL_ITEM 14 // APs to steal item.... #define AP_TAKE_BLOOD 10 diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index b32368fd..742fd8e6 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -2161,11 +2161,13 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, BOOLEAN fStea INT16 sAPCost; EV_S_WEAPONHIT SWeaponHit; INT32 iImpact; - UINT16 usOldItem; + UINT16 usOldItem, usNewItem; UINT8 ubExpGain; UINT8 ubIndexRet; BOOLEAN fFailure; // no stealing occured - BOOLEAN fNoMoreItems; // The enemy has no more items to steal! + BOOLEAN fNoMoreItems = FALSE; // The enemy has no more items to steal! + BOOLEAN fNoMoreItemInHand = FALSE; + BOOLEAN fSoldierCollapsed = FALSE; // Deduct points! // August 13 2002: unless stealing - APs already deducted elsewhere @@ -2207,6 +2209,7 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, BOOLEAN fStea else if ( pTargetSoldier->bLife < OKLIFE || pTargetSoldier->bCollapsed ) { iHitChance = 100; + fSoldierCollapsed = TRUE; } else { @@ -2252,6 +2255,9 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, BOOLEAN fStea // Do we have the chance to steal more than 1 item? if (( iDiceRoll <= iHitChance * 2 / 3) || (pTargetSoldier->bCollapsed)) { + // The item that the enemy holds in his hand before the stealing + usOldItem = pTargetSoldier->inv[HANDPOS].usItem; + INT16 sNumStolenItems = StealItems(pSoldier, pTargetSoldier,&ubIndexRet); // We have only stolen 1 item, because the enemy has not more than one item. @@ -2266,6 +2272,15 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, BOOLEAN fStea AddItemToPool( pSoldier->sGridNo, &(pTargetSoldier->inv[HANDPOS]), 1, pSoldier->bLevel, 0, -1 ); } DeleteObj( &(pTargetSoldier->inv[ubIndexRet]) ); + + // WANNE: NEW + // The item that the enemy holds in his hand before the stealing + usNewItem = pTargetSoldier->inv[HANDPOS].usItem; + + if (usOldItem != usNewItem) + { + ReLoadSoldierAnimationDueToHandItemChange(pTargetSoldier, usOldItem, usNewItem ); + } } // The enemy has no more items to steal else if (sNumStolenItems == 0) @@ -2299,11 +2314,10 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, BOOLEAN fStea // Reload buddy's animation... ReLoadSoldierAnimationDueToHandItemChange( pTargetSoldier, usOldItem, NOTHING ); } - // Steal was successfull, but the enemy had nothing to steal (we had stolen the Nada item) + // Enemy has no item in his hand. else { - fNoMoreItems = TRUE; - //fFailure=TRUE; + fNoMoreItemInHand = TRUE; } // Reload buddy's animation... //ReLoadSoldierAnimationDueToHandItemChange( pTargetSoldier, usOldItem, NOTHING ); @@ -2329,13 +2343,24 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, BOOLEAN fStea DoMercBattleSound( pSoldier, BATTLE_SOUND_CURSE1 ); } } + else + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, + Message[ STR_NO_MORE_ITEM_IN_HAND ]); + } } - // The enemy had no more items to steal, or we had stolen the Nada item - if (fNoMoreItems == TRUE) + // Enemy had no item in its hand + else if (fNoMoreItemInHand == TRUE) { ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, - Message[ STR_NO_MORE_ITEMS_TO_STEAL ], - pSoldier->name, ShortItemNames[ pTargetSoldier->inv[HANDPOS].usItem ] ); + Message[ STR_NO_MORE_ITEM_IN_HAND ]); + } + + // The enemy has no more items to steal + else if (fNoMoreItems == TRUE) + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, + Message[ STR_NO_MORE_ITEMS_TO_STEAL ]); } // Give some experience diff --git a/Utils/Text.h b/Utils/Text.h index 6b7ab2db..ca27f060 100644 --- a/Utils/Text.h +++ b/Utils/Text.h @@ -332,7 +332,8 @@ enum STR_ACCURATE, STR_INACCURATE, STR_NO_SEMI_AUTO, - STR_NO_MORE_ITEMS_TO_STEAL // WANNE + STR_NO_MORE_ITEMS_TO_STEAL, // WANNE + STR_NO_MORE_ITEM_IN_HAND, // WANNE }; // WANNE: Tooltips diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index cba69a5b..8268d58f 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -286,6 +286,7 @@ UINT16 Message[][STRING_LENGTH] = L"automatic", L"no full auto", L"The enemy has no more items to steal!", // WANNE + L"The enemy has no item in its hand!", //WANNE }; diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 7687ffd4..4ad01985 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -286,7 +286,7 @@ UINT16 Message[][STRING_LENGTH] = L"This attachment will be permanent. Go ahead with it?", L"%s feels more energetic!", L"%s slipped on some marbles!", - L"%s failed to grab the %s!", + L"%s failed to grab the %s from enemy's hand!", L"%s has repaired the %s", L"Interrupt for ", L"Surrender?", @@ -301,6 +301,7 @@ UINT16 Message[][STRING_LENGTH] = L"inaccurate", L"no semi auto", L"The enemy has no more items to steal!", // WANNE + L"The enemy has no item in its hand!", //WANNE }; diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 862c40cc..43b23429 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -292,6 +292,7 @@ UINT16 Message[][STRING_LENGTH] = L"automatic", L"no full auto", L"The enemy has no more items to steal!", // WANNE + L"The enemy has no item in its hand!", //WANNE }; diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index 635ba3ca..6436f1b7 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -279,7 +279,7 @@ UINT16 Message[][STRING_LENGTH] = L"Die Modifikation ist permanent. Weitermachen?", L"%s fühlt sich frischer!", L"%s ist auf Murmeln ausgerutscht!", - L"%s konnte %s nicht greifen!", + L"%s konnte %s aus der Hand des Feindes nicht stehlen!", L"%s hat %s repariert", L"Unterbrechung für ", L"Ergeben?", @@ -293,7 +293,8 @@ UINT16 Message[][STRING_LENGTH] = L"genau", L"ungenau", L"kein Einzelschuss", - L"Der Gegner besitzt keine Gegenstände mehr zum Stehlen!", + L"Der Feind besitzt keine Gegenstände mehr zum Stehlen!", + L"Der Feind hat keinen Gegenstand in seiner Hand!", //WANNE }; CHAR16 pTownNames[MAX_TOWNS][MAX_TOWN_NAME_LENGHT] = @@ -1884,7 +1885,7 @@ STR16 pMapErrorString[] = L"Raketenstützpunkt in %s wurde erobert.", //16-20 L"Mine in %s wurde erobert. Ihre Tageseinnahmen wurden reduziert auf %s.", - L"Gegner hat Sektor %s ohne Gegenwehr erobert.", + L"Feind hat Sektor %s ohne Gegenwehr erobert.", L"Mindestens ein Söldner konnte nicht eingeteilt werden.", L"%s konnte sich nicht anschließen, weil %s voll ist", L"%s konnte sich %s nicht anschließen, weil er zu weit weg ist.", diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 9f39bd95..4aa3907f 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -285,6 +285,7 @@ UINT16 Message[][STRING_LENGTH] = L"automatic", L"no full auto", L"The enemy has no more items to steal!", // WANNE + L"The enemy has no item in its hand!", //WANNE }; diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index a39c1010..62b5c107 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -286,6 +286,7 @@ UINT16 Message[][STRING_LENGTH] = L"automatic", L"no full auto", L"The enemy has no more items to steal!", // WANNE + L"The enemy has no item in its hand!", //WANNE }; diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index f85615b9..deed314b 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -293,6 +293,7 @@ UINT16 Message[][STRING_LENGTH] = L"inaccurate", L"no semi auto", L"The enemy has no more items to steal!", // WANNE + L"The enemy has no item in its hand!", //WANNE };