From 08f5b05c8250e72f5124cf17caf0f43f285d2135 Mon Sep 17 00:00:00 2001 From: silversurfer Date: Tue, 24 Sep 2013 15:13:56 +0000 Subject: [PATCH] When checking if a gun barrel extender should be damaged and fall off the game will not use item ID GUN_BARREL_EXTENDER anymore because that was tied to item 310. Instead the game will now use the attachment class AC_EXTENDER. With this we can have more extenders that can be damaged and fall off and also other extenders that are not damaged by shooting. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6438 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Items.cpp | 13 +++++++++++++ Tactical/Items.h | 1 + Tactical/Weapons.cpp | 10 ++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 96a15da5..687b8730 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -1914,6 +1914,19 @@ OBJECTTYPE* FindAttachmentByClass( OBJECTTYPE * pObj, UINT32 uiItemClass, UINT8 return( 0 ); } +OBJECTTYPE* FindAttachmentByAttachmentClass( OBJECTTYPE * pObj, UINT32 uiAttachmentClass, UINT8 subObject ) +{ + if (pObj->exists() == true) { + for (attachmentList::iterator iter = (*pObj)[subObject]->attachments.begin(); iter != (*pObj)[subObject]->attachments.end(); ++iter) { + if (Item[iter->usItem].attachmentclass == uiAttachmentClass && iter->exists()) + { + return &(*iter); + } + } + } + return( 0 ); +} + INT8 FindLaunchable( SOLDIERTYPE * pSoldier, UINT16 usWeapon ) { INT8 bLoop; diff --git a/Tactical/Items.h b/Tactical/Items.h index 2de92999..3a06bcb6 100644 --- a/Tactical/Items.h +++ b/Tactical/Items.h @@ -191,6 +191,7 @@ void SwapOutHandItem( SOLDIERTYPE * pSoldier ); void SwapHandItems( SOLDIERTYPE * pSoldier ); OBJECTTYPE* FindAttachmentByClass( OBJECTTYPE * pObj, UINT32 uiItemClass, UINT8 subObject = 0 ); +OBJECTTYPE* FindAttachmentByAttachmentClass( OBJECTTYPE * pObj, UINT32 uiAttachmentClass, UINT8 subObject = 0 ); void WaterDamage( SOLDIERTYPE *pSoldier ); INT8 FindObj( SOLDIERTYPE * pSoldier, UINT16 usItem, INT8 bLower = 0, INT8 bUpper = NUM_INV_SLOTS ); diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 530d9005..1a0c5d04 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -1938,7 +1938,10 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) if ( Item[ usUBItem ].usItemClass == IC_GUN ) { // lalien: search for barrel extender not for any item with range bonus. (else barrel extender will fall off even when none is attached) - OBJECTTYPE* pAttachment = FindAttachment( pObjHand, GUN_BARREL_EXTENDER ); + // silversurfer: Instead of searching for one single item we can also search for attachment class "AC_EXTENDER". + // With this a barrel extender doesn't need to have item ID 310 anymore. + //OBJECTTYPE* pAttachment = FindAttachment( pObjHand, GUN_BARREL_EXTENDER ); + OBJECTTYPE* pAttachment = FindAttachmentByAttachmentClass( pObjHand, AC_EXTENDER ); if ( pAttachment ) { @@ -2531,7 +2534,10 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) if ( Item[ usUBItem ].usItemClass == IC_GUN ) { // lalien: search for barrel extender not for any item with range bonus. (else barrel extender will fall off even when none is attached) - OBJECTTYPE* pAttachment = FindAttachment( pObjUsed, GUN_BARREL_EXTENDER ); + // silversurfer: Instead of searching for one single item we can also search for attachment class "AC_EXTENDER". + // With this a barrel extender doesn't need to have item ID 310 anymore. + //OBJECTTYPE* pAttachment = FindAttachment( pObjUsed, GUN_BARREL_EXTENDER ); + OBJECTTYPE* pAttachment = FindAttachmentByAttachmentClass( pObjUsed, AC_EXTENDER ); if ( pAttachment->exists() ) {