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 127fb8e8..9cccb8de 100644 Binary files a/JA2.suo and b/JA2.suo differ 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 };