mirror of
https://github.com/1dot13/source.git
synced 2026-08-05 14:00:23 +02:00
new feature: fixed bayonets (still in need of animation)
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6065 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -3740,24 +3740,47 @@ void INVRenderItem( UINT32 uiBuffer, SOLDIERTYPE * pSoldier, OBJECTTYPE *pObjec
|
||||
// Flugente: check for underbarrel weapons and use that object if necessary
|
||||
OBJECTTYPE* pObjShown = pObject;
|
||||
INVTYPE *pItemShown = pItem;
|
||||
if ( pItem->usItemClass == IC_GUN && pSoldier && ( pSoldier->bWeaponMode == WM_ATTACHED_UB || pSoldier->bWeaponMode == WM_ATTACHED_UB_BURST || pSoldier->bWeaponMode == WM_ATTACHED_UB_AUTO ) )
|
||||
if ( pItem->usItemClass == IC_GUN && pSoldier )
|
||||
{
|
||||
OBJECTTYPE *pObjectUnderBarrel = FindAttachment_UnderBarrel( pObject );
|
||||
|
||||
if ( pObjectUnderBarrel )
|
||||
if ( pSoldier->bWeaponMode == WM_ATTACHED_UB || pSoldier->bWeaponMode == WM_ATTACHED_UB_BURST || pSoldier->bWeaponMode == WM_ATTACHED_UB_AUTO )
|
||||
{
|
||||
INVTYPE *pItemUnderBarrel;
|
||||
if ( ubStatusIndex < RENDER_ITEM_ATTACHMENT1 )
|
||||
{
|
||||
pItemUnderBarrel = &Item[ pObjectUnderBarrel->usItem ];
|
||||
}
|
||||
else
|
||||
{
|
||||
pItemUnderBarrel = &Item[ (*pObjectUnderBarrel)[iter]->GetAttachmentAtIndex( ubStatusIndex - RENDER_ITEM_ATTACHMENT1 )->usItem ];
|
||||
}
|
||||
OBJECTTYPE *pObjectUnderBarrel = FindAttachedWeapon( pObject, IC_GUN );
|
||||
|
||||
pObjShown = pObjectUnderBarrel;
|
||||
pItemShown = pItemUnderBarrel;
|
||||
if ( pObjectUnderBarrel )
|
||||
{
|
||||
INVTYPE *pItemUnderBarrel;
|
||||
if ( ubStatusIndex < RENDER_ITEM_ATTACHMENT1 )
|
||||
{
|
||||
pItemUnderBarrel = &Item[ pObjectUnderBarrel->usItem ];
|
||||
}
|
||||
else
|
||||
{
|
||||
pItemUnderBarrel = &Item[ (*pObjectUnderBarrel)[iter]->GetAttachmentAtIndex( ubStatusIndex - RENDER_ITEM_ATTACHMENT1 )->usItem ];
|
||||
}
|
||||
|
||||
pObjShown = pObjectUnderBarrel;
|
||||
pItemShown = pItemUnderBarrel;
|
||||
}
|
||||
}
|
||||
else if ( pSoldier->bWeaponMode == WM_ATTACHED_BAYONET )
|
||||
{
|
||||
OBJECTTYPE *pObjectUnderBarrel = FindAttachedWeapon( pObject, IC_BLADE );
|
||||
|
||||
if ( pObjectUnderBarrel )
|
||||
{
|
||||
INVTYPE *pItemUnderBarrel;
|
||||
if ( ubStatusIndex < RENDER_ITEM_ATTACHMENT1 )
|
||||
{
|
||||
pItemUnderBarrel = &Item[ pObjectUnderBarrel->usItem ];
|
||||
}
|
||||
else
|
||||
{
|
||||
pItemUnderBarrel = &Item[ (*pObjectUnderBarrel)[iter]->GetAttachmentAtIndex( ubStatusIndex - RENDER_ITEM_ATTACHMENT1 )->usItem ];
|
||||
}
|
||||
|
||||
pObjShown = pObjectUnderBarrel;
|
||||
pItemShown = pItemUnderBarrel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4083,7 +4106,12 @@ void INVRenderItem( UINT32 uiBuffer, SOLDIERTYPE * pSoldier, OBJECTTYPE *pObjec
|
||||
swprintf( pStr, New113Message[MSG113_UB_AUTO] );
|
||||
SetFontForeground( FONT_ORANGE );
|
||||
}
|
||||
|
||||
else if(pSoldier->bWeaponMode == WM_ATTACHED_BAYONET)
|
||||
{
|
||||
swprintf( pStr, New113Message[MSG113_BAYONET] );
|
||||
SetFontForeground( FONT_ORANGE );
|
||||
}
|
||||
|
||||
// Get length of string
|
||||
uiStringLength=StringPixLength(pStr, ITEM_FONT );
|
||||
|
||||
|
||||
@@ -1099,7 +1099,7 @@ void UpdateSMPanel( )
|
||||
// Enable some buttons!
|
||||
// Changed by ADB, rev 1513
|
||||
//if ( ((IsGunAutofireCapable( gpSMCurrentMerc, HANDPOS ) || IsGunBurstCapable( gpSMCurrentMerc, HANDPOS , FALSE )) && !Weapon[gpSMCurrentMerc->inv[HANDPOS].usItem].NoSemiAuto ) || IsGrenadeLauncherAttached ( &(gpSMCurrentMerc->inv[HANDPOS]) ) )
|
||||
if ( ((IsGunAutofireCapable( &gpSMCurrentMerc->inv[HANDPOS] ) || IsGunBurstCapable( &gpSMCurrentMerc->inv[HANDPOS], FALSE, gpSMCurrentMerc )) && !Weapon[gpSMCurrentMerc->inv[HANDPOS].usItem].NoSemiAuto ) || IsGrenadeLauncherAttached ( &(gpSMCurrentMerc->inv[HANDPOS]) ) || IsUnderBarrelAttached( &(gpSMCurrentMerc->inv[HANDPOS]) ) )
|
||||
if ( ((IsGunAutofireCapable( &gpSMCurrentMerc->inv[HANDPOS] ) || IsGunBurstCapable( &gpSMCurrentMerc->inv[HANDPOS], FALSE, gpSMCurrentMerc )) && !Weapon[gpSMCurrentMerc->inv[HANDPOS].usItem].NoSemiAuto ) || IsGrenadeLauncherAttached ( &(gpSMCurrentMerc->inv[HANDPOS]) ) || IsWeaponAttached( &(gpSMCurrentMerc->inv[HANDPOS]), IC_GUN ) )
|
||||
{
|
||||
EnableButton( iSMPanelButtons[ BURSTMODE_BUTTON ] );
|
||||
}
|
||||
@@ -2189,6 +2189,7 @@ BOOLEAN CreateSMPanelButtons( )
|
||||
iBurstButtonImages[ WM_ATTACHED_UB ] = UseLoadedButtonImage( iSMPanelImages[ STANCEUP_IMAGES ], -1, 7, -1, -1, -1 );
|
||||
iBurstButtonImages[ WM_ATTACHED_UB_BURST ] = UseLoadedButtonImage( iSMPanelImages[ STANCEUP_IMAGES ], -1, 17, -1, -1, -1 );
|
||||
iBurstButtonImages[ WM_ATTACHED_UB_AUTO ] = UseLoadedButtonImage( iSMPanelImages[ STANCEUP_IMAGES ], -1, 17, -1, -1, -1 );
|
||||
iBurstButtonImages[ WM_ATTACHED_BAYONET ] = UseLoadedButtonImage( iSMPanelImages[ STANCEUP_IMAGES ], -1, 17, -1, -1, -1 );
|
||||
|
||||
FilenameForBPP("INTERFACE\\invadd-ons.sti", ubString);
|
||||
// Load button Graphics
|
||||
@@ -2415,7 +2416,7 @@ void RemoveSMPanelButtons( )
|
||||
UnloadButtonImage( iBurstButtonImages[ WM_ATTACHED_UB ] );
|
||||
UnloadButtonImage( iBurstButtonImages[ WM_ATTACHED_UB_BURST ] );
|
||||
UnloadButtonImage( iBurstButtonImages[ WM_ATTACHED_UB_AUTO ] );
|
||||
|
||||
UnloadButtonImage( iBurstButtonImages[ WM_ATTACHED_BAYONET ] );
|
||||
}
|
||||
|
||||
|
||||
|
||||
+16
-14
@@ -8035,8 +8035,9 @@ BOOLEAN OBJECTTYPE::RemoveAttachment( OBJECTTYPE* pAttachment, OBJECTTYPE * pNew
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
// if in attached weapon mode and don't have weapon with GL attached in hand, reset weapon mode
|
||||
if ( ( (pSoldier->bWeaponMode == WM_ATTACHED_GL || pSoldier->bWeaponMode == WM_ATTACHED_GL_BURST || pSoldier->bWeaponMode == WM_ATTACHED_GL_AUTO )&& !IsGrenadeLauncherAttached( &(pSoldier->inv[ HANDPOS ]) ) ) ||
|
||||
( (pSoldier->bWeaponMode == WM_ATTACHED_UB || pSoldier->bWeaponMode == WM_ATTACHED_UB_BURST || pSoldier->bWeaponMode == WM_ATTACHED_UB_AUTO )&& !IsUnderBarrelAttached( &(pSoldier->inv[ HANDPOS ] ) ) ) )
|
||||
if ( ( (pSoldier->bWeaponMode == WM_ATTACHED_GL || pSoldier->bWeaponMode == WM_ATTACHED_GL_BURST || pSoldier->bWeaponMode == WM_ATTACHED_GL_AUTO ) && !IsGrenadeLauncherAttached( &(pSoldier->inv[ HANDPOS ] ) ) ) ||
|
||||
( (pSoldier->bWeaponMode == WM_ATTACHED_UB || pSoldier->bWeaponMode == WM_ATTACHED_UB_BURST || pSoldier->bWeaponMode == WM_ATTACHED_UB_AUTO ) && !IsWeaponAttached( &(pSoldier->inv[ HANDPOS ]), IC_GUN ) ) ||
|
||||
( (pSoldier->bWeaponMode == WM_ATTACHED_BAYONET ) && !IsWeaponAttached( &(pSoldier->inv[ HANDPOS ]), IC_BLADE ) ) )
|
||||
{
|
||||
if ( !Weapon[pSoldier->inv[ HANDPOS ].usItem].NoSemiAuto )
|
||||
{
|
||||
@@ -11740,27 +11741,28 @@ UINT16 GetAttachedGrenadeLauncher( OBJECTTYPE * pObj )
|
||||
return( NONE );
|
||||
}
|
||||
|
||||
UINT16 GetAttachedUnderBarrel( OBJECTTYPE * pObj )
|
||||
INT16 GetUnderBarrelStatus( OBJECTTYPE * pObj, UINT32 usFlag )
|
||||
{
|
||||
if (pObj->exists() == true) {
|
||||
|
||||
for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter)
|
||||
{
|
||||
if (iter->exists() && (Item[iter->usItem].usItemClass & (IC_GUN | IC_BLADE) ))
|
||||
if (iter->exists() && Item[iter->usItem].usItemClass & usFlag )
|
||||
{
|
||||
return( (UINT16) Item[iter->usItem].uiIndex );
|
||||
return( (*iter)[0]->data.objectStatus );
|
||||
}
|
||||
}
|
||||
}
|
||||
return( NONE );
|
||||
return( ITEM_NOT_FOUND );
|
||||
}
|
||||
BOOLEAN IsUnderBarrelAttached( OBJECTTYPE * pObj, UINT8 subObject )
|
||||
|
||||
BOOLEAN IsWeaponAttached( OBJECTTYPE * pObj, UINT32 usFlag, UINT8 subObject )
|
||||
{
|
||||
if (pObj->exists() == true) {
|
||||
|
||||
for (attachmentList::iterator iter = (*pObj)[subObject]->attachments.begin(); iter != (*pObj)[subObject]->attachments.end(); ++iter)
|
||||
{
|
||||
if (iter->exists() && Item[iter->usItem].usItemClass & (IC_GUN | IC_BLADE) )
|
||||
if (iter->exists() && Item[iter->usItem].usItemClass & usFlag )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
@@ -11769,13 +11771,13 @@ BOOLEAN IsUnderBarrelAttached( OBJECTTYPE * pObj, UINT8 subObject )
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
OBJECTTYPE* FindAttachment_UnderBarrel( OBJECTTYPE * pObj )
|
||||
OBJECTTYPE* FindAttachedWeapon( OBJECTTYPE * pObj, UINT32 usFlag )
|
||||
{
|
||||
if (pObj->exists() == true) {
|
||||
|
||||
for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter)
|
||||
{
|
||||
if (iter->exists() && Item[iter->usItem].usItemClass & (IC_GUN | IC_BLADE) )
|
||||
if (iter->exists() && Item[iter->usItem].usItemClass & usFlag )
|
||||
{
|
||||
return( &(*iter) );
|
||||
}
|
||||
@@ -11784,19 +11786,19 @@ OBJECTTYPE* FindAttachment_UnderBarrel( OBJECTTYPE * pObj )
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
INT16 GetUnderBarrelStatus( OBJECTTYPE * pObj )
|
||||
UINT16 GetAttachedWeapon( OBJECTTYPE * pObj, UINT32 usFlag )
|
||||
{
|
||||
if (pObj->exists() == true) {
|
||||
|
||||
for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter)
|
||||
{
|
||||
if (iter->exists() && Item[iter->usItem].usItemClass & (IC_GUN | IC_BLADE) )
|
||||
if (iter->exists() && (Item[iter->usItem].usItemClass & usFlag ) )
|
||||
{
|
||||
return( (*iter)[0]->data.objectStatus );
|
||||
return( (UINT16) Item[iter->usItem].uiIndex );
|
||||
}
|
||||
}
|
||||
}
|
||||
return( ITEM_NOT_FOUND );
|
||||
return( NONE );
|
||||
}
|
||||
|
||||
INT16 GetAttachedArmourBonus( OBJECTTYPE * pObj )
|
||||
|
||||
+6
-6
@@ -346,12 +346,12 @@ BOOLEAN IsGrenadeLauncherAttached( OBJECTTYPE * pObj, UINT8 subObject = 0 );
|
||||
OBJECTTYPE* FindAttachment_GrenadeLauncher( OBJECTTYPE * pObj );
|
||||
UINT16 GetAttachedGrenadeLauncher( OBJECTTYPE * pObj );
|
||||
|
||||
// JMich & Flugente: functions for underbarrel weapons
|
||||
INT16 GetUnderBarrelStatus( OBJECTTYPE * pObj );
|
||||
BOOLEAN IsUnderBarrelAttached( OBJECTTYPE * pObj, UINT8 subObject = 0 );
|
||||
OBJECTTYPE* FindAttachment_UnderBarrel( OBJECTTYPE * pObj );
|
||||
UINT16 GetAttachedUnderBarrel( OBJECTTYPE * pObj );
|
||||
OBJECTTYPE* GetUsedWeapon( OBJECTTYPE * pObj );
|
||||
// JMich & Flugente: functions for underbarrel weapons and bayonets
|
||||
// As we can have both underbarrel gun and a bayonet, use usFlag to specify (IC_GUN or IC_BLADE are used here, or both)
|
||||
INT16 GetUnderBarrelStatus( OBJECTTYPE * pObj, UINT32 usFlag );
|
||||
BOOLEAN IsWeaponAttached( OBJECTTYPE * pObj, UINT32 usFlag, UINT8 subObject = 0 );
|
||||
OBJECTTYPE* FindAttachedWeapon( OBJECTTYPE * pObj, UINT32 usFlag );
|
||||
UINT16 GetAttachedWeapon( OBJECTTYPE * pObj, UINT32 usFlag );
|
||||
|
||||
INT8 FindRocketLauncher( SOLDIERTYPE * pSoldier );
|
||||
INT8 FindRocketLauncherOrCannon( SOLDIERTYPE * pSoldier );
|
||||
|
||||
@@ -11682,8 +11682,14 @@ void SOLDIERTYPE::EVENT_SoldierBeginBladeAttack( INT32 sGridNo, UINT8 ubDirectio
|
||||
{
|
||||
GetSoldier( &pTSoldier, usSoldierIndex );
|
||||
|
||||
// Flugente: if we attack with a bayonet, we don't need to change stance if even if we are stadning and the target is prone...
|
||||
// so we simulate here that the target is still standing
|
||||
UINT8 targetheight = gAnimControl[ pTSoldier->usAnimState ].ubEndHeight;
|
||||
if ( this->bWeaponMode == WM_ATTACHED_BAYONET )
|
||||
targetheight = ANIM_STAND;
|
||||
|
||||
// Look at stance of target
|
||||
switch( gAnimControl[ pTSoldier->usAnimState ].ubEndHeight )
|
||||
switch( targetheight )
|
||||
{
|
||||
case ANIM_STAND:
|
||||
case ANIM_CROUCH:
|
||||
@@ -13945,7 +13951,14 @@ OBJECTTYPE* SOLDIERTYPE::GetUsedWeapon( OBJECTTYPE * pObj )
|
||||
{
|
||||
if ( bWeaponMode == WM_ATTACHED_UB || bWeaponMode == WM_ATTACHED_UB_BURST || bWeaponMode == WM_ATTACHED_UB_AUTO )
|
||||
{
|
||||
OBJECTTYPE* pObjUnderBarrel = FindAttachment_UnderBarrel(pObj);
|
||||
OBJECTTYPE* pObjUnderBarrel = FindAttachedWeapon(pObj, IC_GUN);
|
||||
|
||||
if ( pObjUnderBarrel )
|
||||
return( pObjUnderBarrel );
|
||||
}
|
||||
else if ( bWeaponMode == WM_ATTACHED_BAYONET )
|
||||
{
|
||||
OBJECTTYPE* pObjUnderBarrel = FindAttachedWeapon(pObj, IC_BLADE);
|
||||
|
||||
if ( pObjUnderBarrel )
|
||||
return( pObjUnderBarrel );
|
||||
@@ -13958,7 +13971,14 @@ UINT16 SOLDIERTYPE::GetUsedWeaponNumber( OBJECTTYPE * pObj )
|
||||
{
|
||||
if ( bWeaponMode == WM_ATTACHED_UB || bWeaponMode == WM_ATTACHED_UB_BURST || bWeaponMode == WM_ATTACHED_UB_AUTO )
|
||||
{
|
||||
UINT16 weaponnr = GetAttachedUnderBarrel(pObj);
|
||||
UINT16 weaponnr = GetAttachedWeapon(pObj, IC_GUN);
|
||||
|
||||
if ( weaponnr != NONE )
|
||||
return( weaponnr );
|
||||
}
|
||||
else if ( bWeaponMode == WM_ATTACHED_BAYONET )
|
||||
{
|
||||
UINT16 weaponnr = GetAttachedWeapon(pObj, IC_BLADE);
|
||||
|
||||
if ( weaponnr != NONE )
|
||||
return( weaponnr );
|
||||
|
||||
@@ -4025,9 +4025,9 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
}
|
||||
}
|
||||
}
|
||||
if (IsUnderBarrelAttached(pGun))
|
||||
if (IsWeaponAttached(pGun, IC_GUN))
|
||||
{
|
||||
OBJECTTYPE *pGun2 = FindAttachment_UnderBarrel(pGun);
|
||||
OBJECTTYPE *pGun2 = FindAttachedWeapon(pGun, IC_GUN);
|
||||
if ( (*pGun2)[0]->data.gun.ubGunShotsLeft < GetMagSize( pGun2 ) )
|
||||
{
|
||||
|
||||
|
||||
+17
-7
@@ -1388,6 +1388,8 @@ BOOLEAN FireWeapon( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
||||
UINT32 usItemClass = Item[ pSoldier->usAttackingWeapon ].usItemClass;
|
||||
if ( pSoldier->bWeaponMode == WM_ATTACHED_GL || pSoldier->bWeaponMode == WM_ATTACHED_GL_BURST || pSoldier->bWeaponMode == WM_ATTACHED_GL_AUTO )
|
||||
usItemClass = IC_LAUNCHER;
|
||||
if ( pSoldier->bWeaponMode == WM_ATTACHED_BAYONET )
|
||||
usItemClass = IC_BLADE;
|
||||
|
||||
switch( usItemClass )
|
||||
{
|
||||
@@ -9556,6 +9558,10 @@ UINT32 CalcChanceHTH( SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, INT16 ubAi
|
||||
|
||||
usInHand = pAttacker->usAttackingWeapon;
|
||||
|
||||
// Flugente: we might be using a bayonet, we should check that
|
||||
if ( pAttacker->bWeaponMode == WM_ATTACHED_BAYONET )
|
||||
usInHand = pAttacker->GetUsedWeaponNumber( &(pAttacker->inv[HANDPOS]) );
|
||||
|
||||
if ( (usInHand != CREATURE_QUEEN_TENTACLES ) && (pDefender->stats.bLife < OKLIFE || pDefender->bBreath < OKBREATH) )
|
||||
{
|
||||
// there is NO way to miss
|
||||
@@ -10167,9 +10173,9 @@ void ReloadWeapon( SOLDIERTYPE *pSoldier, UINT8 ubHandPos )
|
||||
{
|
||||
pSoldier->inv[ ubHandPos ][0]->data.gun.ubGunShotsLeft = GetMagSize(&pSoldier->inv[ ubHandPos ]);
|
||||
// Dirty Bars
|
||||
if ( IsUnderBarrelAttached(&pSoldier->inv[ ubHandPos ]))
|
||||
if ( IsWeaponAttached(&pSoldier->inv[ ubHandPos ], IC_GUN) )
|
||||
{
|
||||
(*FindAttachment_UnderBarrel(&pSoldier->inv[ ubHandPos ]))[0]->data.gun.ubGunShotsLeft = GetMagSize(FindAttachment_UnderBarrel(&pSoldier->inv[ ubHandPos ]));
|
||||
(*FindAttachedWeapon(&pSoldier->inv[ ubHandPos ], IC_GUN))[0]->data.gun.ubGunShotsLeft = GetMagSize(FindAttachedWeapon(&pSoldier->inv[ ubHandPos ], IC_GUN));
|
||||
}
|
||||
DirtyMercPanelInterface( pSoldier, DIRTYLEVEL1 );
|
||||
}
|
||||
@@ -10226,13 +10232,16 @@ BOOLEAN IsGunWeaponModeCapable( OBJECTTYPE* pObject, WeaponMode bWpnMode, SOLDIE
|
||||
// return (!Item[pSoldier->inv[ubHandPos].usItem].grenadelauncher && Weapon[GetAttachedGrenadeLauncher(&pSoldier->inv[ubHandPos])].bAutofireShotsPerFiveAP > 0 && FindLaunchableAttachment( &(pSoldier->inv[ubHandPos]), GetAttachedGrenadeLauncher( &(pSoldier->inv[ubHandPos]) ) != ITEM_NOT_FOUND );
|
||||
|
||||
case WM_ATTACHED_UB:
|
||||
return (IsUnderBarrelAttached( pObject ) && !Weapon[FindAttachment_UnderBarrel(pObject)->usItem].NoSemiAuto );
|
||||
return (IsWeaponAttached( pObject, IC_GUN ) && !Weapon[FindAttachedWeapon(pObject, IC_GUN)->usItem].NoSemiAuto );
|
||||
|
||||
case WM_ATTACHED_UB_BURST:
|
||||
return (IsUnderBarrelAttached( pObject ) && IsGunBurstCapable(FindAttachment_UnderBarrel(pObject), FALSE, pSoldier));
|
||||
return (IsWeaponAttached( pObject, IC_GUN ) && IsGunBurstCapable(FindAttachedWeapon(pObject, IC_GUN), FALSE, pSoldier));
|
||||
|
||||
case WM_ATTACHED_UB_AUTO:
|
||||
return (IsUnderBarrelAttached( pObject ) && (IsGunAutofireCapable(FindAttachment_UnderBarrel(pObject)) || Weapon[FindAttachment_UnderBarrel(pObject)->usItem].NoSemiAuto));
|
||||
return (IsWeaponAttached( pObject, IC_GUN ) && (IsGunAutofireCapable(FindAttachedWeapon(pObject, IC_GUN)) || Weapon[FindAttachedWeapon(pObject, IC_GUN)->usItem].NoSemiAuto));
|
||||
|
||||
case WM_ATTACHED_BAYONET:
|
||||
return IsWeaponAttached( pObject, IC_BLADE );
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
@@ -10300,8 +10309,9 @@ void HandleTacticalEffectsOfEquipmentChange( SOLDIERTYPE *pSoldier, UINT32 uiInv
|
||||
SetBurstAndAutoFireMode(pSoldier, GetWeaponMode(&pSoldier->inv[uiInvPos]));
|
||||
#endif
|
||||
// if in attached weapon mode and don't have weapon with GL attached in hand, reset weapon mode
|
||||
if ( ( (pSoldier->bWeaponMode == WM_ATTACHED_GL || pSoldier->bWeaponMode == WM_ATTACHED_GL_BURST || pSoldier->bWeaponMode == WM_ATTACHED_GL_AUTO )&& !IsGrenadeLauncherAttached( &(pSoldier->inv[ HANDPOS ]) ) ) ||
|
||||
( (pSoldier->bWeaponMode == WM_ATTACHED_UB || pSoldier->bWeaponMode == WM_ATTACHED_UB_BURST || pSoldier->bWeaponMode == WM_ATTACHED_UB_AUTO )&& !IsUnderBarrelAttached( &(pSoldier->inv[ HANDPOS ] ) ) ) )
|
||||
if ( ( (pSoldier->bWeaponMode == WM_ATTACHED_GL || pSoldier->bWeaponMode == WM_ATTACHED_GL_BURST || pSoldier->bWeaponMode == WM_ATTACHED_GL_AUTO ) && !IsGrenadeLauncherAttached( &(pSoldier->inv[ HANDPOS ] ) ) ) ||
|
||||
( (pSoldier->bWeaponMode == WM_ATTACHED_UB || pSoldier->bWeaponMode == WM_ATTACHED_UB_BURST || pSoldier->bWeaponMode == WM_ATTACHED_UB_AUTO ) && !IsWeaponAttached( &(pSoldier->inv[ HANDPOS ]), IC_GUN ) ) ||
|
||||
( (pSoldier->bWeaponMode == WM_ATTACHED_BAYONET ) && !IsWeaponAttached( &(pSoldier->inv[ HANDPOS ]), IC_BLADE ) ) )
|
||||
{
|
||||
if ( !Weapon[pSoldier->inv[ HANDPOS ].usItem].NoSemiAuto )
|
||||
{
|
||||
|
||||
@@ -15,6 +15,7 @@ enum WeaponMode
|
||||
WM_ATTACHED_UB,
|
||||
WM_ATTACHED_UB_BURST,
|
||||
WM_ATTACHED_UB_AUTO,
|
||||
WM_ATTACHED_BAYONET,
|
||||
NUM_WEAPON_MODES
|
||||
} ;
|
||||
|
||||
|
||||
@@ -2271,6 +2271,7 @@ enum
|
||||
MSG113_UB,
|
||||
MSG113_UB_BRST,
|
||||
MSG113_UB_AUTO,
|
||||
MSG113_BAYONET,
|
||||
MSG113_SNIPER,
|
||||
MSG113_UNABLETOSPLITMONEY,
|
||||
MSG113_ARRIVINGREROUTED,
|
||||
|
||||
@@ -6169,6 +6169,7 @@ STR16 New113Message[] =
|
||||
L"UB", // INFO: UB = Under Barrel
|
||||
L"UBRST",
|
||||
L"UAUTO",
|
||||
L"BAYONET",
|
||||
L"狙击手!",
|
||||
L"已经点选物品,此时无法分钱。",
|
||||
L"新兵的会合地被挪至 %s, 因降落地点 %s 目前由敌人占据。",
|
||||
|
||||
@@ -6174,6 +6174,7 @@ STR16 New113Message[] =
|
||||
L"UB",
|
||||
L"UBRST",
|
||||
L"UAUTO",
|
||||
L"BAYONET",
|
||||
L"Sniper!",
|
||||
L"Unable to split money due to having an item on your cursor.",
|
||||
L"Arrival of new recruits is being rerouted to sector %s, as scheduled drop-off point of sector %s is enemy occupied.",
|
||||
|
||||
@@ -6169,6 +6169,7 @@ STR16 New113Message[] =
|
||||
L"UB",
|
||||
L"UBRST",
|
||||
L"UAUTO",
|
||||
L"BAYONET",
|
||||
L"Sniper!",
|
||||
L"Unable to split money due to having an item on your cursor.",
|
||||
L"Arrival of new recruits is being rerouted to sector %s, as scheduled drop-off point of sector %s is enemy occupied.",
|
||||
|
||||
@@ -6165,6 +6165,7 @@ STR16 New113Message[] =
|
||||
L"UB", // TODO.Translate
|
||||
L"UBRST",
|
||||
L"UAUTO",
|
||||
L"BAYONET",
|
||||
L"Tireur embusqué !",
|
||||
L"Unable to split money due to having an item on your cursor.",
|
||||
L"Arrivée de nouvelles recrues est déroutée au secteur %s, car le point d'arrivée prévu %s est sous contrôle ennemi.",
|
||||
|
||||
@@ -5996,6 +5996,7 @@ STR16 New113Message[] =
|
||||
L"UB",
|
||||
L"UBRST",
|
||||
L"UAUTO",
|
||||
L"BAYONET",
|
||||
L"Scharfschütze!",
|
||||
L"Geld kann nicht aufgeteilt werden, weil ein Gegenstand am Cursor ist.",
|
||||
L"Ankunft der neuen Söldner wurde in den Sektor %s verlegt, weil der geplante Sektor %s von Feinden belagert ist.",
|
||||
|
||||
@@ -6160,6 +6160,7 @@ STR16 New113Message[] =
|
||||
L"UB",
|
||||
L"UBRST",
|
||||
L"UAUTO",
|
||||
L"BAYONET",
|
||||
L"Sniper!",
|
||||
L"Unable to split money due to having an item on your cursor.",
|
||||
L"Arrival of new recruits is being rerouted to sector %s, as scheduled drop-off point of sector %s is enemy occupied.",
|
||||
|
||||
@@ -6175,6 +6175,7 @@ STR16 New113Message[] =
|
||||
L"UB", // TODO.Translate
|
||||
L"UBRST",
|
||||
L"UAUTO",
|
||||
L"BAYONET",
|
||||
L"Snajper!",
|
||||
L"Nie można podzielić pieniędzy z powodu przedmiotu na kursorze.",
|
||||
L"Przybycie nowych rekrutów zostało przekierowane do sektora %s , z uwagi na to, że poprzedni punkt zrzutu w sektorze %s jest zajęty przez wroga.",
|
||||
|
||||
@@ -6167,6 +6167,7 @@ STR16 New113Message[] =
|
||||
L"UB", // TODO.Translate
|
||||
L"UBRST",
|
||||
L"UAUTO",
|
||||
L"BAYONET",
|
||||
L"Снайпер!",
|
||||
L"Невозможно разделить деньги из-за предмета на курсоре.",
|
||||
L"Точка высадки прибывающих наёмников перенесена в %s, так как запланированное место высадки %s захвачено противником.",
|
||||
|
||||
@@ -6177,6 +6177,7 @@ STR16 New113Message[] =
|
||||
L"UB",
|
||||
L"UBRST",
|
||||
L"UAUTO",
|
||||
L"BAYONET",
|
||||
L"Sniper!",
|
||||
L"Unable to split money due to having an item on your cursor.",
|
||||
L"Arrival of new recruits is being rerouted to sector %s, as scheduled drop-off point of sector %s is enemy occupied.",
|
||||
|
||||
Reference in New Issue
Block a user