mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Merged from revision: 7129
Updates/Improvements (by Sevenfm) 1. Quick inventory items: Press [ALT] + [1..0] for quick access to predefined items in tactical (ja2_options.ini: QUICK_ITEM_0 to QUICK_ITEM_9) Press [ALT] + [`] (tilde key left to [1]) to put item back to inventory and switch hands. The item will be put in the same slot it was taken from (unless it was stacked or game was reloaded). 2. Also a few quick hotkeys: [ALT] + [q] - switch to sling (same as [SHIFT] + [k]) [CTRL] + [q] - switch hands [SHIFT] + [q] - drop item from main hand to the ground Additional info: -some hotkeys do not work in cheat mode -only NIV -only one-handed items supported -stacked items currently not supported -remembered item slot is lost when you reload game 3. A few small fixes for dynamic tooltips and other things git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7130 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -1382,6 +1382,17 @@ void LoadGameExternalOptions()
|
||||
// sevenfm: new mouse commands
|
||||
gGameExternalOptions.bAlternateMouseCommands = iniReader.ReadBoolean("Tactical Interface Settings", "ALTERNATE_MOUSE_COMMANDS", FALSE);
|
||||
|
||||
gGameExternalOptions.iQuickItem1 = iniReader.ReadInteger("Tactical Interface Settings", "QUICK_ITEM_1", 0, -100, MAXITEMS);
|
||||
gGameExternalOptions.iQuickItem2 = iniReader.ReadInteger("Tactical Interface Settings", "QUICK_ITEM_2", 0, -100, MAXITEMS);
|
||||
gGameExternalOptions.iQuickItem3 = iniReader.ReadInteger("Tactical Interface Settings", "QUICK_ITEM_3", 0, -100, MAXITEMS);
|
||||
gGameExternalOptions.iQuickItem4 = iniReader.ReadInteger("Tactical Interface Settings", "QUICK_ITEM_4", 0, -100, MAXITEMS);
|
||||
gGameExternalOptions.iQuickItem5 = iniReader.ReadInteger("Tactical Interface Settings", "QUICK_ITEM_5", 0, -100, MAXITEMS);
|
||||
gGameExternalOptions.iQuickItem6 = iniReader.ReadInteger("Tactical Interface Settings", "QUICK_ITEM_6", 0, -100, MAXITEMS);
|
||||
gGameExternalOptions.iQuickItem7 = iniReader.ReadInteger("Tactical Interface Settings", "QUICK_ITEM_7", 0, -100, MAXITEMS);
|
||||
gGameExternalOptions.iQuickItem8 = iniReader.ReadInteger("Tactical Interface Settings", "QUICK_ITEM_8", 0, -100, MAXITEMS);
|
||||
gGameExternalOptions.iQuickItem9 = iniReader.ReadInteger("Tactical Interface Settings", "QUICK_ITEM_9", 0, -100, MAXITEMS);
|
||||
gGameExternalOptions.iQuickItem0 = iniReader.ReadInteger("Tactical Interface Settings", "QUICK_ITEM_0", 0, -100, MAXITEMS);
|
||||
|
||||
// New setting to change stamina
|
||||
gGameExternalOptions.uStaminaHit = iniReader.ReadInteger("Tactical Interface Settings", "STAMINA_HIT", 10000);
|
||||
|
||||
|
||||
@@ -790,6 +790,17 @@ typedef struct
|
||||
BOOLEAN fExtMouseKeyEnabled;
|
||||
// sevenfm: new mouse commands
|
||||
BOOLEAN bAlternateMouseCommands;
|
||||
INT32 iQuickItem1;
|
||||
INT32 iQuickItem2;
|
||||
INT32 iQuickItem3;
|
||||
INT32 iQuickItem4;
|
||||
INT32 iQuickItem5;
|
||||
INT32 iQuickItem6;
|
||||
INT32 iQuickItem7;
|
||||
INT32 iQuickItem8;
|
||||
INT32 iQuickItem9;
|
||||
INT32 iQuickItem0;
|
||||
|
||||
// for small progress bar
|
||||
BOOLEAN fSmallSizeProgressbar;
|
||||
// stamina multiplier (for all weapons eg knife fist gun
|
||||
|
||||
@@ -2657,6 +2657,9 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
this->iLastBulletImpact = 0;
|
||||
this->iLastArmourProtection = 0;
|
||||
|
||||
this->usQuickItemId = 0;
|
||||
this->ubQuickItemSlot = 0;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -6787,7 +6787,7 @@ BOOLEAN BuildFortification( INT32 sGridNo, UINT32 flag )
|
||||
|
||||
if ( !usUseObjIndex )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"The selected barricade cannot be built in this sector" );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szMTATextStr[ STR_MTA_CANNOT_BUILD ] );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
+33
-11
@@ -1792,7 +1792,7 @@ void DrawSelectedUIAboveGuy( UINT16 usSoldierID )
|
||||
SetBackgroundRectFilled( iBack );
|
||||
}
|
||||
|
||||
if ( ( !pSoldier->aiData.bNeutral && ( pSoldier->bSide != gbPlayerNum ) ) )
|
||||
if ( !pSoldier->aiData.bNeutral && ( pSoldier->bSide != gbPlayerNum ) )
|
||||
{
|
||||
BltVideoObjectFromIndex( FRAME_BUFFER, guiRADIO2, pSoldier->sLocatorFrame, sXPos, sYPos, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
}
|
||||
@@ -1906,8 +1906,11 @@ void DrawSelectedUIAboveGuy( UINT16 usSoldierID )
|
||||
|
||||
BOOLEAN bInCombat = gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT;
|
||||
BOOLEAN bStealth = pSoldier->bStealthMode || pSoldier->bSoldierFlagMask & ( SOLDIER_COVERT_CIV | SOLDIER_COVERT_SOLDIER );
|
||||
// sevenfm: for mercs use name color as cover indicator
|
||||
if( pSoldier->bTeam == OUR_TEAM && ! ( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_ROBOT) ) &&
|
||||
// sevenfm: for mercs use name color as cover indicator
|
||||
// only use color when there is enemy in sector
|
||||
if( pSoldier->bTeam == OUR_TEAM &&
|
||||
(NumEnemyInSector() != 0) &&
|
||||
! ( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_ROBOT) ) &&
|
||||
( ( gGameExternalOptions.ubShowCoverIndicator == 1 && ( bInCombat || bStealth ) ) ||
|
||||
( gGameExternalOptions.ubShowCoverIndicator == 2 && bStealth ) ) )
|
||||
{
|
||||
@@ -3876,8 +3879,8 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor )
|
||||
INT32 iMenuAnchorX, iMenuAnchorY;
|
||||
CHAR16 zDisp[ 100 ];
|
||||
|
||||
iMenuAnchorX = gOpenDoorMenu.sX;
|
||||
iMenuAnchorY = gOpenDoorMenu.sY;
|
||||
//iMenuAnchorX = gOpenDoorMenu.sX;
|
||||
//iMenuAnchorY = gOpenDoorMenu.sY;
|
||||
|
||||
// Blit background!
|
||||
//BltVideoObjectFromIndex( FRAME_BUFFER, guiBUTTONBORDER, 0, iMenuAnchorX, iMenuAnchorY, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
@@ -6219,9 +6222,9 @@ void GetEnemyInfoString( SOLDIERTYPE* pSelectedSoldier, SOLDIERTYPE* pTargetSold
|
||||
else
|
||||
{ // show general name
|
||||
if( Item[pTargetSoldier->inv[HEAD1POS].usItem].gasmask )
|
||||
wcscat( NameStr, L"Mask" );
|
||||
wcscat( NameStr, TacticalStr[ GENERAL_INFO_MASK ] );
|
||||
else if( Item[pTargetSoldier->inv[HEAD1POS].usItem].nightvisionrangebonus || Item[pTargetSoldier->inv[HEAD1POS].usItem].cavevisionrangebonus )
|
||||
wcscat( NameStr, L"NVG" );
|
||||
wcscat( NameStr, TacticalStr[ GENERAL_INFO_NVG ] );
|
||||
}
|
||||
}
|
||||
if( pTargetSoldier->inv[HEAD2POS].exists() )
|
||||
@@ -6235,9 +6238,9 @@ void GetEnemyInfoString( SOLDIERTYPE* pSelectedSoldier, SOLDIERTYPE* pTargetSold
|
||||
else
|
||||
{ // show general name
|
||||
if( Item[pTargetSoldier->inv[HEAD1POS].usItem].gasmask )
|
||||
wcscat( NameStr, L"Mask" );
|
||||
wcscat( NameStr, TacticalStr[ GENERAL_INFO_MASK ] );
|
||||
else if( Item[pTargetSoldier->inv[HEAD1POS].usItem].nightvisionrangebonus || Item[pTargetSoldier->inv[HEAD1POS].usItem].cavevisionrangebonus )
|
||||
wcscat( NameStr, L"NVG" );
|
||||
wcscat( NameStr, TacticalStr[ GENERAL_INFO_NVG ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6249,7 +6252,7 @@ void GetEnemyInfoString( SOLDIERTYPE* pSelectedSoldier, SOLDIERTYPE* pTargetSold
|
||||
{
|
||||
if ( showExactInfo )
|
||||
{
|
||||
swprintf( NameStr, L"%s", ItemNames[ pTargetSoldier->inv[ HANDPOS ].usItem ] );
|
||||
swprintf( NameStr, L"%s", ShortItemNames[ pTargetSoldier->inv[ HANDPOS ].usItem ] );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -6292,7 +6295,7 @@ void GetEnemyInfoString( SOLDIERTYPE* pSelectedSoldier, SOLDIERTYPE* pTargetSold
|
||||
else
|
||||
{
|
||||
if( pTargetSoldier->inv[ HANDPOS ].usItem )
|
||||
swprintf( NameStr, L"%s", L"Item" );
|
||||
swprintf( NameStr, L"%s", TacticalStr[ GENERAL_INFO_ITEM ] );
|
||||
else
|
||||
swprintf( NameStr, L"%s", L"" );
|
||||
}
|
||||
@@ -6373,6 +6376,7 @@ void ShowAdditionalInfo( INT16 sX, INT16 sY, SOLDIERTYPE* pTargetSoldier )
|
||||
SetFontBackground( FONT_MCOLOR_BLACK );
|
||||
// show awareness sign only when in stealth mode or disguised
|
||||
if( ( gusSelectedSoldier != NOBODY ) &&
|
||||
( pTargetSoldier->bTeam == ENEMY_TEAM || pTargetSoldier->bTeam == CIV_TEAM && !pTargetSoldier->aiData.bNeutral ) &&
|
||||
( MercPtrs[ gusSelectedSoldier ]->bStealthMode || MercPtrs[ gusSelectedSoldier ]->bSoldierFlagMask & ( SOLDIER_COVERT_CIV | SOLDIER_COVERT_SOLDIER ) ) )
|
||||
{
|
||||
if( pTargetSoldier->aiData.bOppList[ MercPtrs[ gusSelectedSoldier ]->ubID ] == SEEN_CURRENTLY )
|
||||
@@ -6416,6 +6420,15 @@ void ShowEnemyHealthBar( INT16 sX, INT16 sY, SOLDIERTYPE* pSoldier )
|
||||
UINT8 ubLines = gGameExternalOptions.ubShowEnemyHealth - 1;
|
||||
INT32 iBarWidth = 24;
|
||||
INT32 iBarHeight;
|
||||
SOLDIERTYPE *pSelectedSoldier;
|
||||
|
||||
if ( gusSelectedSoldier != NOBODY )
|
||||
pSelectedSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||
else
|
||||
return;
|
||||
|
||||
if ( pSelectedSoldier->aiData.bOppList[pSoldier->ubID] != SEEN_CURRENTLY )
|
||||
return;
|
||||
|
||||
// show enemy health bar
|
||||
if( gGameExternalOptions.ubShowEnemyHealth > 1 && gTacticalStatus.ubCurrentTeam == OUR_TEAM )
|
||||
@@ -6437,6 +6450,15 @@ void ShowRankIcon( INT16 sXPos, INT16 sYPos, SOLDIERTYPE* pSoldier )
|
||||
{
|
||||
INT32 iBack;
|
||||
INT16 sX, sY;
|
||||
SOLDIERTYPE *pSelectedSoldier;
|
||||
|
||||
if ( gusSelectedSoldier != NOBODY )
|
||||
pSelectedSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||
else
|
||||
return;
|
||||
|
||||
if ( pSelectedSoldier->aiData.bOppList[pSoldier->ubID] != SEEN_CURRENTLY )
|
||||
return;
|
||||
|
||||
if( gGameExternalOptions.ubShowEnemyRankIcon && gTacticalStatus.ubCurrentTeam == OUR_TEAM )
|
||||
//&& (!gGameExternalOptions.fEnemyNames) && (!gGameExternalOptions.fEnemyRank))
|
||||
|
||||
@@ -1876,6 +1876,21 @@ enum
|
||||
MAX_IMP_ITEM_TYPES
|
||||
};
|
||||
|
||||
// sevenfm: types for quick items
|
||||
enum
|
||||
{
|
||||
INV_ITEM_TYPE_UNKNOWN = 0,
|
||||
INV_ITEM_TYPE_HTH = -1,
|
||||
INV_ITEM_TYPE_MELEE = -2,
|
||||
INV_ITEM_TYPE_TASER = -3,
|
||||
INV_ITEM_TYPE_HANDCUFFS = -4,
|
||||
INV_ITEM_TYPE_SIDEARM = -5,
|
||||
INV_ITEM_TYPE_FIRSTAID = -6,
|
||||
INV_ITEM_TYPE_BINOCULARS = -7,
|
||||
INV_ITEM_TYPE_XRAY = -8,
|
||||
INV_ITEM_TYPE_METALDETECTOR = -9,
|
||||
};
|
||||
|
||||
extern IMP_ITEM_CHOICE_TYPE gIMPItemChoices[MAX_IMP_ITEM_TYPES];
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1043,6 +1043,9 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src)
|
||||
this->iLastBulletImpact = 0;
|
||||
this->iLastArmourProtection = 0;
|
||||
|
||||
this->usQuickItemId = 0;
|
||||
this->ubQuickItemSlot = 0;
|
||||
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -1508,6 +1508,9 @@ public:
|
||||
UINT8 ubLastMoraleFromHit;
|
||||
UINT8 iLastBulletImpact;
|
||||
UINT8 iLastArmourProtection;
|
||||
|
||||
UINT16 usQuickItemId;
|
||||
UINT8 ubQuickItemSlot;
|
||||
|
||||
public:
|
||||
// CREATION FUNCTIONS
|
||||
|
||||
@@ -56,6 +56,9 @@ void DrawMouseTooltip(void);
|
||||
|
||||
void SoldierTooltip( SOLDIERTYPE* pSoldier )
|
||||
{
|
||||
if(!pSoldier)
|
||||
return;
|
||||
|
||||
// WANNE: No tooltips on bloodcats, bugs, tanks, roboter
|
||||
if ( CREATURE_OR_BLOODCAT( pSoldier ) || TANK ( pSoldier ) ||
|
||||
AM_A_ROBOT( pSoldier))
|
||||
@@ -141,10 +144,12 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier )
|
||||
if (gGameExternalOptions.fEnableDynamicSoldierTooltips && fMercIsUsingScope == 0 && !gGameExternalOptions.gfAllowUDTRange)
|
||||
{
|
||||
// add 10% to max tooltip viewing distance per level of the merc
|
||||
uiMaxTooltipDistance *= 1 + (EffectiveExpLevel(MercPtrs[ gusSelectedSoldier ])/ 10); // SANDRO - changed to effective level calc
|
||||
// sevenfm: fixed incorrect integer calculation
|
||||
uiMaxTooltipDistance = (INT32)( uiMaxTooltipDistance * ( 1 + ( (FLOAT)( EffectiveExpLevel( MercPtrs[ gusSelectedSoldier ] ) ) / 10.0 ) ) ); // SANDRO - changed to effective level calc
|
||||
|
||||
if ( gGameExternalOptions.gfAllowLimitedVision )
|
||||
uiMaxTooltipDistance *= 1 - (gGameExternalOptions.ubVisDistDecreasePerRainIntensity / 100);
|
||||
// sevenfm: this calculation doesn't make sense: disabled
|
||||
//if ( gGameExternalOptions.gfAllowLimitedVision )
|
||||
// uiMaxTooltipDistance *= 1 - (gGameExternalOptions.ubVisDistDecreasePerRainIntensity / 100);
|
||||
|
||||
if ( !(Item[MercPtrs[gusSelectedSoldier]->inv[HEAD1POS].usItem].nightvisionrangebonus > 0) &&
|
||||
!(Item[MercPtrs[gusSelectedSoldier]->inv[HEAD2POS].usItem].nightvisionrangebonus > 0) &&
|
||||
@@ -337,12 +342,12 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier )
|
||||
swprintf( pStrInfo, gzTooltipStrings[STR_TT_CAT_ARMOR] );
|
||||
if ( ubTooltipDetailLevel == DL_Basic )
|
||||
{
|
||||
if ( gGameExternalOptions.fEnableSoldierTooltipHelmet )
|
||||
swprintf( pStrInfo, L"%s%s", pStrInfo, pSoldier->inv[HELMETPOS].usItem ? gzTooltipStrings[STR_TT_HELMET] : L"" );
|
||||
if ( gGameExternalOptions.fEnableSoldierTooltipVest )
|
||||
swprintf( pStrInfo, L"%s%s", pStrInfo, pSoldier->inv[VESTPOS].usItem ? gzTooltipStrings[STR_TT_VEST] : L"" );
|
||||
if ( gGameExternalOptions.fEnableSoldierTooltipLeggings )
|
||||
swprintf( pStrInfo, L"%s%s", pStrInfo, pSoldier->inv[LEGPOS].usItem ? gzTooltipStrings[STR_TT_LEGGINGS] : L"" );
|
||||
if ( gGameExternalOptions.fEnableSoldierTooltipHelmet && pSoldier->inv[HELMETPOS].usItem )
|
||||
swprintf( pStrInfo, L"%s%s ", pStrInfo, gzTooltipStrings[STR_TT_HELMET] );
|
||||
if ( gGameExternalOptions.fEnableSoldierTooltipVest && pSoldier->inv[VESTPOS].usItem )
|
||||
swprintf( pStrInfo, L"%s%s ", pStrInfo, gzTooltipStrings[STR_TT_VEST] );
|
||||
if ( gGameExternalOptions.fEnableSoldierTooltipLeggings && pSoldier->inv[LEGPOS].usItem )
|
||||
swprintf( pStrInfo, L"%s%s", pStrInfo, gzTooltipStrings[STR_TT_LEGGINGS] );
|
||||
wcscat( pStrInfo, L"\n" );
|
||||
}
|
||||
else // ubTooltipDetailLevel == DL_Limited
|
||||
|
||||
+378
-33
@@ -118,6 +118,7 @@
|
||||
#include "Map Screen Interface Map Inventory.h"//dnl ch75 021113
|
||||
|
||||
#include "DisplayCover.h" // added by Sevenfm
|
||||
#include "InterfaceItemImages.h" // added by Sevenfm
|
||||
|
||||
//forward declarations of common classes to eliminate includes
|
||||
class OBJECTTYPE;
|
||||
@@ -160,6 +161,8 @@ UINT32 guiUITargetSoldierId = NOBODY;
|
||||
extern COVER_DRAW_MODE gubDrawMode;
|
||||
extern MINES_DRAW_MODE gubDrawModeMine;
|
||||
|
||||
extern MOUSE_REGION gMPanelRegion;
|
||||
|
||||
void HandleTalkingMenuKeys( InputAtom *pInputEvent, UINT32 *puiNewEvent );
|
||||
void HandleMenuKeys( InputAtom *pInputEvent, UINT32 *puiNewEvent );
|
||||
void HandleItemMenuKeys( InputAtom *pInputEvent, UINT32 *puiNewEvent );
|
||||
@@ -328,7 +331,13 @@ void HandleTBDropBackpacks( void );
|
||||
void HandleTBPickUpBackpacks( void );
|
||||
void HandleTBSoldierRun( void );
|
||||
|
||||
void HandleTacticalTakeItem( void );
|
||||
void HandleTacticalDropItem( UINT8 ubSlot );
|
||||
void HandleTacticalTakeInvItem( INT32 iType );
|
||||
void HandleTacticalStoreInvItem( void );
|
||||
INT32 InvItemType( UINT16 usItem );
|
||||
void HandleTacticalInventoryMenu( void );
|
||||
void HandleTacticalMoveItems( void );
|
||||
void TacticalInventoryMessageBoxCallBack( UINT8 ubExitValue );
|
||||
void HandleTacticalCoverMenu( void );
|
||||
void TacticalCoverMessageBoxCallBack( UINT8 ubExitValue );
|
||||
@@ -2472,6 +2481,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
// MercPtrs[ gusSelectedSoldier ]->flags.uiStatusFlags |= SOLDIER_CREATURE;
|
||||
//EVENT_InitNewSoldierAnim( MercPtrs[ gusSelectedSoldier ], CRIPPLE_BEG, 0 , TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleTacticalTakeInvItem( gGameExternalOptions.iQuickItem1 );
|
||||
}
|
||||
}
|
||||
else
|
||||
ChangeCurrentSquad( 0 );
|
||||
@@ -2485,6 +2498,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
{
|
||||
ChangeSoldiersBodyType( INFANT_MONSTER, TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleTacticalTakeInvItem( gGameExternalOptions.iQuickItem2 );
|
||||
}
|
||||
}
|
||||
else if( fCtrl ) //toggle between the different npc debug modes
|
||||
{
|
||||
@@ -2510,6 +2527,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
//LocateSoldier( gusSelectedSoldier, FALSE );
|
||||
//EVENT_FireSoldierWeapon( MercPtrs[ gusSelectedSoldier ], sMapPos );
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleTacticalTakeInvItem( gGameExternalOptions.iQuickItem3 );
|
||||
}
|
||||
}
|
||||
else if( fCtrl ) //toggle between the different npc debug modes
|
||||
{
|
||||
@@ -2531,6 +2552,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
{
|
||||
ChangeSoldiersBodyType( CRIPPLECIV, TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleTacticalTakeInvItem( gGameExternalOptions.iQuickItem4 );
|
||||
}
|
||||
}
|
||||
else if( fCtrl ) //remapped squad 14 to here
|
||||
ChangeCurrentSquad( 13 );
|
||||
@@ -2548,6 +2573,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
{
|
||||
ChangeSoldiersBodyType( YAM_MONSTER, TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleTacticalTakeInvItem( gGameExternalOptions.iQuickItem5 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2559,23 +2588,58 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
break;
|
||||
|
||||
case '6':
|
||||
if( fAlt )
|
||||
{
|
||||
HandleTacticalTakeInvItem( gGameExternalOptions.iQuickItem6 );
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeCurrentSquad( 5 );
|
||||
}
|
||||
break;
|
||||
|
||||
case '7':
|
||||
ChangeCurrentSquad( 6 );
|
||||
if( fAlt )
|
||||
{
|
||||
HandleTacticalTakeInvItem( gGameExternalOptions.iQuickItem7 );
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeCurrentSquad( 6 );
|
||||
}
|
||||
break;
|
||||
|
||||
case '8':
|
||||
ChangeCurrentSquad( 7 );
|
||||
if( fAlt )
|
||||
{
|
||||
HandleTacticalTakeInvItem( gGameExternalOptions.iQuickItem8 );
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeCurrentSquad( 7 );
|
||||
}
|
||||
break;
|
||||
|
||||
case '9':
|
||||
ChangeCurrentSquad( 8 );
|
||||
if( fAlt )
|
||||
{
|
||||
HandleTacticalTakeInvItem( gGameExternalOptions.iQuickItem9 );
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeCurrentSquad( 8 );
|
||||
}
|
||||
break;
|
||||
|
||||
case '0':
|
||||
ChangeCurrentSquad( 9 );
|
||||
if( fAlt )
|
||||
{
|
||||
HandleTacticalTakeInvItem( gGameExternalOptions.iQuickItem0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeCurrentSquad( 9 );
|
||||
}
|
||||
break;
|
||||
|
||||
case '!':
|
||||
@@ -3226,18 +3290,32 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
// }
|
||||
break;
|
||||
case 'q':
|
||||
if ( gGameSettings.fOptions[TOPTION_GL_HIGH_ANGLE] )
|
||||
if( fCtrl )
|
||||
{
|
||||
gGameSettings.fOptions[TOPTION_GL_HIGH_ANGLE] = FALSE;
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_GL_LOW_ANGLE ] );
|
||||
HandleTBSwapHands( );
|
||||
}
|
||||
else if ( fAlt )
|
||||
{
|
||||
HandleTBSwapGunsling( );
|
||||
}
|
||||
else
|
||||
{
|
||||
gGameSettings.fOptions[TOPTION_GL_HIGH_ANGLE] = TRUE;
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_GL_HIGH_ANGLE ] );
|
||||
if ( gGameSettings.fOptions[TOPTION_GL_HIGH_ANGLE] )
|
||||
{
|
||||
gGameSettings.fOptions[TOPTION_GL_HIGH_ANGLE] = FALSE;
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_GL_LOW_ANGLE ] );
|
||||
}
|
||||
else
|
||||
{
|
||||
gGameSettings.fOptions[TOPTION_GL_HIGH_ANGLE] = TRUE;
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_GL_HIGH_ANGLE ] );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Q':
|
||||
HandleTacticalDropItem( HANDPOS );
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
if( fCtrl )
|
||||
@@ -3584,26 +3662,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
}
|
||||
else
|
||||
{
|
||||
// Move all sector items to current mercs feet
|
||||
if ( !(gTacticalStatus.fEnemyInSector) )
|
||||
{
|
||||
HandleAllReachAbleItemsInTheSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ );
|
||||
|
||||
SOLDIERTYPE *pSoldier;
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
|
||||
for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; uiLoop++ ) //for all items in sector
|
||||
{
|
||||
if ( (gWorldItems[ uiLoop ].bVisible == TRUE) && (gWorldItems[ uiLoop ].fExists) && (gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_ARMED_BOMB) && (gWorldItems[ uiLoop ].sGridNo != pSoldier->sGridNo) )//item exists and is reachable and is not already on soldiers tile
|
||||
{
|
||||
MoveItemPools(gWorldItems[ uiLoop ].sGridNo, pSoldier->sGridNo, gWorldItems[ uiLoop ].ubLevel, pSoldier->pathing.bLevel);
|
||||
}
|
||||
}
|
||||
|
||||
NotifySoldiersToLookforItems( );
|
||||
}
|
||||
}
|
||||
HandleTacticalMoveItems();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -4261,6 +4320,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
{
|
||||
EnvBeginRainStorm( 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleTacticalStoreInvItem();
|
||||
}
|
||||
}
|
||||
else if( fCtrl )
|
||||
{
|
||||
@@ -4268,6 +4331,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
{
|
||||
EnvEndRainStorm( );
|
||||
}
|
||||
else
|
||||
{
|
||||
//HandleTacticalTakeItem();
|
||||
}
|
||||
}
|
||||
else
|
||||
// Switch panels...
|
||||
@@ -7136,9 +7203,11 @@ void HandleTBSwapHands( void )
|
||||
}
|
||||
void HandleTBSwapGunsling( void )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
if ( gusSelectedSoldier != NOBODY && UsingNewInventorySystem() == true)
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||
pSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||
pSoldier->SwitchWeapons( );
|
||||
}
|
||||
}
|
||||
@@ -7756,7 +7825,9 @@ void HandleTacticalInventoryMenu( void )
|
||||
}
|
||||
|
||||
gzUserDefinedButtonColor[0] = FONT_MCOLOR_LTGRAY;
|
||||
gzUserDefinedButtonColor[1] = FONT_MCOLOR_LTGRAY;
|
||||
gzUserDefinedButtonColor[1] = FONT_MCOLOR_LTGRAY;
|
||||
gzUserDefinedButtonColor[2] = FONT_MCOLOR_LTGRAY;
|
||||
gzUserDefinedButtonColor[3] = FONT_MCOLOR_LTGRAY;
|
||||
gzUserDefinedButtonColor[4] = FONT_ORANGE;
|
||||
gzUserDefinedButtonColor[5] = FONT_ORANGE;
|
||||
gzUserDefinedButtonColor[6] = FONT_ORANGE;
|
||||
@@ -7780,7 +7851,8 @@ void TacticalInventoryMessageBoxCallBack( UINT8 ubExitValue )
|
||||
case 2: // reload ALL
|
||||
HandleTBReloadAll();
|
||||
break;
|
||||
case 3:
|
||||
case 3: // move items (Shift+m)
|
||||
HandleTacticalMoveItems();
|
||||
break;
|
||||
case 4:
|
||||
break;
|
||||
@@ -7911,7 +7983,7 @@ void HandleTacticalTransformItem( void )
|
||||
{
|
||||
UINT16 usItem;
|
||||
TransformInfoStruct *pTransformation;
|
||||
OBJECTTYPE* pObj;
|
||||
//OBJECTTYPE* pObj;
|
||||
|
||||
SOLDIERTYPE* pSoldier;
|
||||
if( !GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
@@ -7982,4 +8054,277 @@ BOOLEAN FindTransformation( UINT16 usItem, TransformInfoStruct **pTransformation
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void HandleTacticalMoveItems( void )
|
||||
{
|
||||
// Move all sector items to current mercs feet
|
||||
if ( !(gTacticalStatus.fEnemyInSector) )
|
||||
{
|
||||
HandleAllReachAbleItemsInTheSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ );
|
||||
|
||||
SOLDIERTYPE *pSoldier;
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
|
||||
for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; uiLoop++ ) //for all items in sector
|
||||
{
|
||||
if ( (gWorldItems[ uiLoop ].bVisible == TRUE) && (gWorldItems[ uiLoop ].fExists) && (gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_ARMED_BOMB) && (gWorldItems[ uiLoop ].sGridNo != pSoldier->sGridNo) )//item exists and is reachable and is not already on soldiers tile
|
||||
{
|
||||
MoveItemPools(gWorldItems[ uiLoop ].sGridNo, pSoldier->sGridNo, gWorldItems[ uiLoop ].ubLevel, pSoldier->pathing.bLevel);
|
||||
}
|
||||
}
|
||||
|
||||
NotifySoldiersToLookforItems( );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HandleTacticalStoreInvItem( void )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT8 ubStoreSlot = 0;
|
||||
UINT16 APTotalCost = 0;
|
||||
|
||||
if( gusSelectedSoldier != NOBODY )
|
||||
pSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||
else
|
||||
return;
|
||||
|
||||
if ( !UsingNewInventorySystem() )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ QUICK_ITEMS_ONLY_NIV ] );
|
||||
return;
|
||||
}
|
||||
|
||||
if( !pSoldier->inv[HANDPOS].exists() )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ QUICK_ITEMS_NO_ITEM_IN_HAND ] );
|
||||
return;
|
||||
}
|
||||
|
||||
if( pSoldier->usQuickItemId == pSoldier->inv[HANDPOS].usItem &&
|
||||
( CanItemFitInPosition(pSoldier, &pSoldier->inv[HANDPOS], pSoldier->ubQuickItemSlot, FALSE) && !pSoldier->inv[pSoldier->ubQuickItemSlot].exists() ) )
|
||||
ubStoreSlot = pSoldier->ubQuickItemSlot;
|
||||
|
||||
// find slot to store HANDPOS in
|
||||
for(UINT8 i = GUNSLINGPOCKPOS; i < NUM_INV_SLOTS && ubStoreSlot == 0; ++i)
|
||||
{
|
||||
// take first slot that hand item would fit
|
||||
if ( ( CanItemFitInPosition(pSoldier, &pSoldier->inv[HANDPOS], i, FALSE) && !pSoldier->inv[i].exists() ) )
|
||||
{
|
||||
ubStoreSlot = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( ubStoreSlot == 0 )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ QUICK_ITEMS_NOWHERE_TO_PLACE ] );
|
||||
return;
|
||||
}
|
||||
|
||||
// calculate needed APs
|
||||
if (gGameOptions.fInventoryCostsAP)
|
||||
{
|
||||
APTotalCost += GetInvMovementCost(&pSoldier->inv[HANDPOS], HANDPOS, ubStoreSlot );
|
||||
if( !EnoughPoints( pSoldier, APTotalCost, 0, TRUE ) )
|
||||
return;
|
||||
}
|
||||
|
||||
// move item from HANDPOS to found ubStoreSlot
|
||||
if (gGameOptions.fInventoryCostsAP)
|
||||
DeductPoints( pSoldier, APTotalCost, 0 );
|
||||
|
||||
pSoldier->inv[HANDPOS].MoveThisObjectTo(pSoldier->inv[ubStoreSlot], 1, pSoldier);
|
||||
|
||||
// swap hands
|
||||
if( pSoldier->inv[SECONDHANDPOS].exists() )
|
||||
SwapHandItems( pSoldier );
|
||||
|
||||
// update interface
|
||||
fCharacterInfoPanelDirty = TRUE;
|
||||
fInterfacePanelDirty = DIRTYLEVEL2;
|
||||
pSoldier->HandleFlashLights();
|
||||
}
|
||||
|
||||
void HandleTacticalTakeInvItem( INT32 iType )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT8 ubItemSlot = HANDPOS;
|
||||
UINT16 APTotalCost = 0;
|
||||
|
||||
if( iType == 0 )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ QUICK_ITEM_NO_DEFINED_ITEM ] );
|
||||
return;
|
||||
}
|
||||
|
||||
if( gusSelectedSoldier != NOBODY )
|
||||
pSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||
else
|
||||
return;
|
||||
|
||||
if ( !UsingNewInventorySystem() )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ QUICK_ITEMS_ONLY_NIV ] );
|
||||
return;
|
||||
}
|
||||
|
||||
// check if item is already in main hand
|
||||
if ( pSoldier->inv[HANDPOS].exists() &&
|
||||
( iType > 0 ? ( pSoldier->inv[HANDPOS].usItem == iType ) : ( InvItemType( pSoldier->inv[HANDPOS].usItem ) == iType ) ) )
|
||||
return;
|
||||
|
||||
if( pSoldier->inv[HANDPOS].exists() && pSoldier->inv[SECONDHANDPOS].exists() )
|
||||
{
|
||||
// try to free HANDPOS for new item
|
||||
HandleTacticalStoreInvItem();
|
||||
}
|
||||
|
||||
// both hands are full
|
||||
if( pSoldier->inv[HANDPOS].exists() && pSoldier->inv[SECONDHANDPOS].exists() )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ QUICK_ITEM_NO_FREE_HAND ] );
|
||||
return;
|
||||
}
|
||||
|
||||
// search for type of item
|
||||
for(UINT8 i = GUNSLINGPOCKPOS; i < NUM_INV_SLOTS; ++i)
|
||||
{
|
||||
if ( pSoldier->inv[i].exists() &&
|
||||
!Item[ pSoldier->inv[i].usItem ].twohanded &&
|
||||
( iType > 0 ? ( pSoldier->inv[i].usItem == iType ) : ( InvItemType( pSoldier->inv[i].usItem ) == iType ) ) )
|
||||
{
|
||||
ubItemSlot = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// if not found item
|
||||
if( ubItemSlot == HANDPOS )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ QUICK_ITEM_NOT_FOUND ]);
|
||||
return;
|
||||
}
|
||||
|
||||
// remember item slot and id
|
||||
pSoldier->usQuickItemId = pSoldier->inv[ubItemSlot].usItem;
|
||||
pSoldier->ubQuickItemSlot = ubItemSlot;
|
||||
|
||||
if (gGameOptions.fInventoryCostsAP)
|
||||
{
|
||||
APTotalCost += GetInvMovementCost(&pSoldier->inv[ubItemSlot], ubItemSlot, HANDPOS);
|
||||
if( !EnoughPoints( pSoldier, APTotalCost, 0, TRUE ) )
|
||||
return;
|
||||
}
|
||||
|
||||
if( !CanItemFitInPosition( pSoldier, &pSoldier->inv[ubItemSlot], HANDPOS, FALSE ) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ QUICK_ITEM_CANNOT_TAKE ] );
|
||||
return;
|
||||
}
|
||||
|
||||
// if item in main hand exists -> move it to second hand
|
||||
if( pSoldier->inv[HANDPOS].exists() )
|
||||
HandleTBSwapHands();
|
||||
|
||||
// move item to handpos
|
||||
if (gGameOptions.fInventoryCostsAP)
|
||||
DeductPoints( pSoldier, APTotalCost, 0 );
|
||||
pSoldier->inv[ubItemSlot].MoveThisObjectTo(pSoldier->inv[HANDPOS], 1, pSoldier);
|
||||
|
||||
// update interface
|
||||
fCharacterInfoPanelDirty = TRUE;
|
||||
fInterfacePanelDirty = DIRTYLEVEL2;
|
||||
pSoldier->HandleFlashLights();
|
||||
}
|
||||
|
||||
INT32 InvItemType( UINT16 usItem )
|
||||
{
|
||||
if( usItem == XRAY_DEVICE )
|
||||
return INV_ITEM_TYPE_XRAY;
|
||||
if( Item[ usItem ].firstaidkit )
|
||||
return INV_ITEM_TYPE_FIRSTAID;
|
||||
if( Item[ usItem ].usItemClass == IC_BLADE )
|
||||
return INV_ITEM_TYPE_MELEE;
|
||||
if( Item[ usItem ].usItemClass == IC_PUNCH && !(Item[ usItem ].usItemFlag & TASER) )
|
||||
return INV_ITEM_TYPE_HTH;
|
||||
if( HasItemFlag( usItem, HANDCUFFS ) )
|
||||
//if( Item[ usItem ].usItemClass == IC_MISC && Item[ usItem ].usItemFlag & HANDCUFFS )
|
||||
return INV_ITEM_TYPE_HANDCUFFS;
|
||||
//Item[ uiItem ].usSpotting
|
||||
if( Item[ usItem ].usItemClass == IC_MISC && Item[ usItem ].dayvisionrangebonus )
|
||||
return INV_ITEM_TYPE_BINOCULARS;
|
||||
if( Item[ usItem ].usItemFlag & TASER )
|
||||
return INV_ITEM_TYPE_TASER;
|
||||
if( Item[ usItem ].usItemClass == IC_GUN && !Item[ usItem ].twohanded && Weapon[Item[ usItem ].ubClassIndex].ubWeaponType <= GUN_SMG )
|
||||
return INV_ITEM_TYPE_SIDEARM;
|
||||
if( Item[ usItem ].usItemClass == IC_MISC && Item[ usItem ].metaldetector )
|
||||
return INV_ITEM_TYPE_METALDETECTOR;
|
||||
|
||||
return INV_ITEM_TYPE_UNKNOWN;
|
||||
}
|
||||
|
||||
void HandleTacticalDropItem( UINT8 ubSlot )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT16 APTotalCost = 0;
|
||||
|
||||
if( gusSelectedSoldier != NOBODY )
|
||||
pSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||
else
|
||||
return;
|
||||
|
||||
if( pSoldier->inv[ ubSlot ].exists() )
|
||||
{
|
||||
if (gGameOptions.fInventoryCostsAP)
|
||||
{
|
||||
APTotalCost += GetInvMovementCost(&pSoldier->inv[ubSlot], ubSlot, HANDPOS);
|
||||
APTotalCost += GetBasicAPsToPickupItem( pSoldier );
|
||||
if( !EnoughPoints( pSoldier, APTotalCost, 0, TRUE ) )
|
||||
return;
|
||||
DeductPoints( pSoldier, APTotalCost, 0 );
|
||||
}
|
||||
|
||||
SoldierDropItem( pSoldier, &pSoldier->inv[ ubSlot ] );
|
||||
DeleteObj( &(pSoldier->inv[ ubSlot ]) );
|
||||
}
|
||||
}
|
||||
|
||||
void HandleTacticalTakeItem( void )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
if( gusSelectedSoldier != NOBODY )
|
||||
pSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||
else
|
||||
return;
|
||||
|
||||
if( gpItemPointer == NULL )
|
||||
{
|
||||
//not holding anything
|
||||
if( pSoldier->inv[HANDPOS].exists() )
|
||||
{
|
||||
pSoldier->inv[HANDPOS].MoveThisObjectTo(gItemPointer);
|
||||
gpItemPointer = &gItemPointer;
|
||||
}
|
||||
}
|
||||
|
||||
// update interface
|
||||
fCharacterInfoPanelDirty = TRUE;
|
||||
fInterfacePanelDirty = DIRTYLEVEL2;
|
||||
pSoldier->HandleFlashLights();
|
||||
|
||||
// Set mouse
|
||||
if( gpItemPointer->exists() )
|
||||
{
|
||||
guiExternVo = GetInterfaceGraphicForItem( &(Item[ gpItemPointer->usItem ]) );
|
||||
gusExternVoSubIndex = g_bUsePngItemImages ? 0 : Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
|
||||
MSYS_ChangeRegionCursor( &gMPanelRegion , EXTERN_CURSOR );
|
||||
MSYS_SetCurrentCursor( EXTERN_CURSOR );
|
||||
|
||||
fMapInventoryItem=TRUE;
|
||||
fTeamPanelDirty=TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -852,6 +852,7 @@ enum
|
||||
STR_MTA_REMOVE_FORTIFY,
|
||||
STR_TA_FILL_SANDBAG,
|
||||
STR_MTA_CANCEL,
|
||||
STR_MTA_CANNOT_BUILD,
|
||||
|
||||
TEXT_NUM_MTA_STR
|
||||
};
|
||||
@@ -1082,6 +1083,18 @@ enum
|
||||
INSPECT_RESULT_DANGEROUS,
|
||||
INSPECT_RESULT_HIGH_DANGER,
|
||||
|
||||
GENERAL_INFO_MASK,
|
||||
GENERAL_INFO_NVG,
|
||||
GENERAL_INFO_ITEM,
|
||||
|
||||
QUICK_ITEMS_ONLY_NIV,
|
||||
QUICK_ITEMS_NO_ITEM_IN_HAND,
|
||||
QUICK_ITEMS_NOWHERE_TO_PLACE,
|
||||
QUICK_ITEM_NO_DEFINED_ITEM,
|
||||
QUICK_ITEM_NO_FREE_HAND,
|
||||
QUICK_ITEM_NOT_FOUND,
|
||||
QUICK_ITEM_CANNOT_TAKE,
|
||||
|
||||
TEXT_NUM_TACTICAL_STR
|
||||
};
|
||||
|
||||
|
||||
+14
-1
@@ -3319,6 +3319,18 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"可能危险",
|
||||
L"危险",
|
||||
L"非常危险!",
|
||||
|
||||
L"Mask", // TODO.Translate
|
||||
L"NVG",
|
||||
L"Item",
|
||||
|
||||
L"This feature works only with New Inventory System",
|
||||
L"No item in your main hand",
|
||||
L"Nowhere to place item from main hand",
|
||||
L"No defined item for this quick slot",
|
||||
L"No free hand for new item",
|
||||
L"Item not found",
|
||||
L"Cannot take item to main hand",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -8023,6 +8035,7 @@ STR16 szMTATextStr[]=
|
||||
L"拆除掩体", //L"removing a fortification",
|
||||
L"填满沙包", //L"filling sandbags",
|
||||
L"%s必须停止%s", //L"%s had to stop %s.",
|
||||
L"The selected barricade cannot be built in this sector", // TODO.Translate
|
||||
};
|
||||
|
||||
STR16 szInventoryArmTextStr[]=
|
||||
@@ -8452,7 +8465,7 @@ STR16 szTacticalInventoryDialogString[]=
|
||||
|
||||
L"NVG",
|
||||
L"Reload All",
|
||||
L"",
|
||||
L"Move", // TODO.Translate
|
||||
L"",
|
||||
|
||||
L"Sort",
|
||||
|
||||
+14
-1
@@ -3316,6 +3316,18 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Risky",
|
||||
L"Dangerous",
|
||||
L"High danger!",
|
||||
|
||||
L"Mask", // TODO.Translate
|
||||
L"NVG",
|
||||
L"Item",
|
||||
|
||||
L"This feature works only with New Inventory System",
|
||||
L"No item in your main hand",
|
||||
L"Nowhere to place item from main hand",
|
||||
L"No defined item for this quick slot",
|
||||
L"No free hand for new item",
|
||||
L"Item not found",
|
||||
L"Cannot take item to main hand",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -8035,6 +8047,7 @@ STR16 szMTATextStr[]= // TODO.Translate
|
||||
L"removing a fortification",
|
||||
L"filling sandbags",
|
||||
L"%s had to stop %s.",
|
||||
L"The selected barricade cannot be built in this sector", // TODO.Translate
|
||||
};
|
||||
|
||||
STR16 szInventoryArmTextStr[]= // TODO.Translate
|
||||
@@ -8466,7 +8479,7 @@ STR16 szTacticalInventoryDialogString[]=
|
||||
|
||||
L"NVG",
|
||||
L"Reload All",
|
||||
L"",
|
||||
L"Move", // TODO.Translate
|
||||
L"",
|
||||
|
||||
L"Sort",
|
||||
|
||||
+14
-1
@@ -3317,6 +3317,18 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Risky",
|
||||
L"Dangerous",
|
||||
L"High danger!",
|
||||
|
||||
L"Mask",
|
||||
L"NVG",
|
||||
L"Item",
|
||||
|
||||
L"This feature works only with New Inventory System",
|
||||
L"No item in your main hand",
|
||||
L"Nowhere to place item from main hand",
|
||||
L"No defined item for this quick slot",
|
||||
L"No free hand for new item",
|
||||
L"Item not found",
|
||||
L"Cannot take item to main hand",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -8020,6 +8032,7 @@ STR16 szMTATextStr[]=
|
||||
L"removing a fortification",
|
||||
L"filling sandbags",
|
||||
L"%s had to stop %s.",
|
||||
L"The selected barricade cannot be built in this sector",
|
||||
};
|
||||
|
||||
STR16 szInventoryArmTextStr[]=
|
||||
@@ -8450,7 +8463,7 @@ STR16 szTacticalInventoryDialogString[]=
|
||||
|
||||
L"NVG",
|
||||
L"Reload All",
|
||||
L"",
|
||||
L"Move",
|
||||
L"",
|
||||
|
||||
L"Sort",
|
||||
|
||||
+14
-1
@@ -3323,6 +3323,18 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Risqué",
|
||||
L"Dangereux",
|
||||
L"Danger élevé !",
|
||||
|
||||
L"Mask", // TODO.Translate
|
||||
L"NVG",
|
||||
L"Item",
|
||||
|
||||
L"This feature works only with New Inventory System",
|
||||
L"No item in your main hand",
|
||||
L"Nowhere to place item from main hand",
|
||||
L"No defined item for this quick slot",
|
||||
L"No free hand for new item",
|
||||
L"Item not found",
|
||||
L"Cannot take item to main hand",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -8017,6 +8029,7 @@ STR16 szMTATextStr[]=
|
||||
L"le retrait d'une fortification",
|
||||
L"le remplissage des sacs de sable",
|
||||
L"%s a dû arrêter... %s",
|
||||
L"The selected barricade cannot be built in this sector", // TODO.Translate
|
||||
};
|
||||
|
||||
STR16 szInventoryArmTextStr[]=
|
||||
@@ -8448,7 +8461,7 @@ STR16 szTacticalInventoryDialogString[]=
|
||||
|
||||
L"LVN",
|
||||
L"Recharger tout",
|
||||
L"",
|
||||
L"Move", // TODO.Translate
|
||||
L"",
|
||||
|
||||
L"Trier",
|
||||
|
||||
+14
-1
@@ -3319,6 +3319,18 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Riskant",
|
||||
L"Gefährlich",
|
||||
L"Hohe Gefahr!",
|
||||
|
||||
L"Mask", // TODO.Translate
|
||||
L"NVG",
|
||||
L"Item",
|
||||
|
||||
L"This feature works only with New Inventory System",
|
||||
L"No item in your main hand",
|
||||
L"Nowhere to place item from main hand",
|
||||
L"No defined item for this quick slot",
|
||||
L"No free hand for new item",
|
||||
L"Item not found",
|
||||
L"Cannot take item to main hand",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -7845,6 +7857,7 @@ STR16 szMTATextStr[]=
|
||||
L"entferne eine Befestigung",
|
||||
L"Sandsäcke befüllen",
|
||||
L"%s musste %s stoppen.",
|
||||
L"The selected barricade cannot be built in this sector", // TODO.Translate
|
||||
};
|
||||
|
||||
STR16 szInventoryArmTextStr[]=
|
||||
@@ -8276,7 +8289,7 @@ STR16 szTacticalInventoryDialogString[]=
|
||||
|
||||
L"NVG",
|
||||
L"Reload All",
|
||||
L"",
|
||||
L"Move", // TODO.Translate
|
||||
L"",
|
||||
|
||||
L"Sort",
|
||||
|
||||
+14
-1
@@ -3311,6 +3311,18 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Risky",
|
||||
L"Dangerous",
|
||||
L"High danger!",
|
||||
|
||||
L"Mask", // TODO.Translate
|
||||
L"NVG",
|
||||
L"Item",
|
||||
|
||||
L"This feature works only with New Inventory System",
|
||||
L"No item in your main hand",
|
||||
L"Nowhere to place item from main hand",
|
||||
L"No defined item for this quick slot",
|
||||
L"No free hand for new item",
|
||||
L"Item not found",
|
||||
L"Cannot take item to main hand",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -8026,6 +8038,7 @@ STR16 szMTATextStr[]= // TODO.Translate
|
||||
L"removing a fortification",
|
||||
L"filling sandbags",
|
||||
L"%s had to stop %s.",
|
||||
L"The selected barricade cannot be built in this sector", // TODO.Translate
|
||||
};
|
||||
|
||||
// TODO.Translate
|
||||
@@ -8458,7 +8471,7 @@ STR16 szTacticalInventoryDialogString[]=
|
||||
|
||||
L"NVG",
|
||||
L"Reload All",
|
||||
L"",
|
||||
L"Move", // TODO.Translate
|
||||
L"",
|
||||
|
||||
L"Sort",
|
||||
|
||||
+14
-1
@@ -3325,6 +3325,18 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Risky",
|
||||
L"Dangerous",
|
||||
L"High danger!",
|
||||
|
||||
L"Mask", // TODO.Translate
|
||||
L"NVG",
|
||||
L"Item",
|
||||
|
||||
L"This feature works only with New Inventory System",
|
||||
L"No item in your main hand",
|
||||
L"Nowhere to place item from main hand",
|
||||
L"No defined item for this quick slot",
|
||||
L"No free hand for new item",
|
||||
L"Item not found",
|
||||
L"Cannot take item to main hand",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -8045,6 +8057,7 @@ STR16 szMTATextStr[]= // TODO.Translate
|
||||
L"removing a fortification",
|
||||
L"filling sandbags",
|
||||
L"%s had to stop %s.",
|
||||
L"The selected barricade cannot be built in this sector", // TODO.Translate
|
||||
};
|
||||
|
||||
STR16 szInventoryArmTextStr[]= // TODO.Translate
|
||||
@@ -8476,7 +8489,7 @@ STR16 szTacticalInventoryDialogString[]=
|
||||
|
||||
L"NVG",
|
||||
L"Reload All",
|
||||
L"",
|
||||
L"Move", // TODO.Translate
|
||||
L"",
|
||||
|
||||
L"Sort",
|
||||
|
||||
+14
-1
@@ -3318,6 +3318,18 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Risky",
|
||||
L"Dangerous",
|
||||
L"High danger!",
|
||||
|
||||
L"Mask", // TODO.Translate
|
||||
L"NVG",
|
||||
L"Item",
|
||||
|
||||
L"This feature works only with New Inventory System",
|
||||
L"No item in your main hand",
|
||||
L"Nowhere to place item from main hand",
|
||||
L"No defined item for this quick slot",
|
||||
L"No free hand for new item",
|
||||
L"Item not found",
|
||||
L"Cannot take item to main hand",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -8024,6 +8036,7 @@ STR16 szMTATextStr[]= // TODO.Translate
|
||||
L"removing a fortification",
|
||||
L"filling sandbags",
|
||||
L"%s had to stop %s.",
|
||||
L"The selected barricade cannot be built in this sector", // TODO.Translate
|
||||
};
|
||||
|
||||
STR16 szInventoryArmTextStr[]= // TODO.Translate
|
||||
@@ -8455,7 +8468,7 @@ STR16 szTacticalInventoryDialogString[]=
|
||||
|
||||
L"NVG",
|
||||
L"Reload All",
|
||||
L"",
|
||||
L"Move", // TODO.Translate
|
||||
L"",
|
||||
|
||||
L"Sort",
|
||||
|
||||
@@ -3321,6 +3321,18 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Risky",
|
||||
L"Dangerous",
|
||||
L"High danger!",
|
||||
|
||||
L"Mask", // TODO.Translate
|
||||
L"NVG",
|
||||
L"Item",
|
||||
|
||||
L"This feature works only with New Inventory System",
|
||||
L"No item in your main hand",
|
||||
L"Nowhere to place item from main hand",
|
||||
L"No defined item for this quick slot",
|
||||
L"No free hand for new item",
|
||||
L"Item not found",
|
||||
L"Cannot take item to main hand",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -8035,6 +8047,7 @@ STR16 szMTATextStr[]= // TODO.Translate
|
||||
L"removing a fortification",
|
||||
L"filling sandbags",
|
||||
L"%s had to stop %s.",
|
||||
L"The selected barricade cannot be built in this sector", // TODO.Translate
|
||||
};
|
||||
|
||||
STR16 szInventoryArmTextStr[]= // TODO.Translate
|
||||
@@ -8466,7 +8479,7 @@ STR16 szTacticalInventoryDialogString[]=
|
||||
|
||||
L"NVG",
|
||||
L"Reload All",
|
||||
L"",
|
||||
L"Move", // TODO.Translate
|
||||
L"",
|
||||
|
||||
L"Sort",
|
||||
|
||||
Reference in New Issue
Block a user