From d02a4ddd7d72ef22820c904311432cb0c93df644 Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Sun, 22 Dec 2019 06:22:23 +0000 Subject: [PATCH] Implemented some of the merc05's fixes (http://thepit.ja-galaxy-forum.com/index.php?t=msg&th=24256): - fix for stopping snitches from preventing misbehavior - fix for stopping snitches reports - improved code for refused handcuffing - fixed item bug with items dropping from backpack after using transformation in turnbased mode - improved code for dart ammotype effect - removed assert in AddCharacterToAnySquad to prevent crash when selecting merc in vehicle and plotting travel route - added EXPLOSV_CREATUREGAS effect in UpdateAniTiles() git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8720 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Strategic/Hourly Update.cpp | 6 +++--- Tactical/Handle Items.cpp | 5 ++++- Tactical/Items.cpp | 2 +- Tactical/Morale.cpp | 13 ++++++++----- Tactical/Squads.cpp | 3 ++- Tactical/opplist.cpp | 9 ++++----- 6 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Strategic/Hourly Update.cpp b/Strategic/Hourly Update.cpp index 527701de..f13f12f4 100644 --- a/Strategic/Hourly Update.cpp +++ b/Strategic/Hourly Update.cpp @@ -419,7 +419,7 @@ void HourlyLarryUpdate() // note - snitches stop others, but can get wasted themselves (if they have drug use specifically set in background...) if( pOtherSoldier && !pOtherSoldier->flags.fBetweenSectors && pOtherSoldier->bActive && !pOtherSoldier->flags.fMercAsleep && pSoldier->ubProfile != pOtherSoldier->ubProfile ) { - if ( ProfileHasSkillTrait( pOtherSoldier->ubProfile, SNITCH_NT ) && !( pSoldier->usSoldierFlagMask2 & SOLDIER_PREVENT_MISBEHAVIOUR_OFF ) ) + if (ProfileHasSkillTrait(pOtherSoldier->ubProfile, SNITCH_NT) && !(pOtherSoldier->usSoldierFlagMask2 & SOLDIER_PREVENT_MISBEHAVIOUR_OFF)) { if( pSoldier->sSectorX == pOtherSoldier->sSectorX && pSoldier->sSectorY == pOtherSoldier->sSectorY && pSoldier->bSectorZ == pOtherSoldier->bSectorZ ) { @@ -597,7 +597,7 @@ void HourlyDisabilityUpdate( ) // note - snitches stop others, but can get wasted themselves (if they have drug use specifically set in background...) if ( pOtherSoldier && !pOtherSoldier->flags.fBetweenSectors && pOtherSoldier->bActive && !pOtherSoldier->flags.fMercAsleep && pSoldier->ubProfile != pOtherSoldier->ubProfile ) { - if ( ProfileHasSkillTrait( pOtherSoldier->ubProfile, SNITCH_NT ) && !(pSoldier->usSoldierFlagMask2 & SOLDIER_PREVENT_MISBEHAVIOUR_OFF) ) + if (ProfileHasSkillTrait(pOtherSoldier->ubProfile, SNITCH_NT) && !(pOtherSoldier->usSoldierFlagMask2 & SOLDIER_PREVENT_MISBEHAVIOUR_OFF)) { if ( pSoldier->sSectorX == pOtherSoldier->sSectorX && pSoldier->sSectorY == pOtherSoldier->sSectorY && pSoldier->bSectorZ == pOtherSoldier->bSectorZ ) { @@ -729,7 +729,7 @@ void HourlyStealUpdate() && !pOtherSoldier->flags.fMercAsleep && pSoldier->ubProfile != pOtherSoldier->ubProfile ) { - if ( ProfileHasSkillTrait( pOtherSoldier->ubProfile, SNITCH_NT ) && !( pSoldier->usSoldierFlagMask2 & SOLDIER_PREVENT_MISBEHAVIOUR_OFF ) ) + if (ProfileHasSkillTrait(pOtherSoldier->ubProfile, SNITCH_NT) && !(pOtherSoldier->usSoldierFlagMask2 & SOLDIER_PREVENT_MISBEHAVIOUR_OFF)) { if ( pSoldier->sSectorX == pOtherSoldier->sSectorX && pSoldier->sSectorY == pOtherSoldier->sSectorY && sectorz == pOtherSoldier->bSectorZ ) { diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index b4e51a83..9600645d 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -1344,8 +1344,11 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa } // Flugente: handcuffing people - if ( gGameExternalOptions.fAllowPrisonerSystem && HasItemFlag( usHandItem, HANDCUFFS ) && pTargetSoldier && pTargetSoldier->CanBeCaptured( ) ) + if (gGameExternalOptions.fAllowPrisonerSystem && HasItemFlag(usHandItem, HANDCUFFS) && pTargetSoldier) { + if (!pTargetSoldier->CanBeCaptured()) + return ITEM_HANDLE_REFUSAL; + // ATE: AI CANNOT GO THROUGH HERE! BOOLEAN fHadToUseCursorPos = FALSE; diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 9b542901..8a5f488c 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -6339,7 +6339,7 @@ BOOLEAN CanItemFitInPosition( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj, INT8 bPos case SMALLPOCK30POS: if( UsingNewInventorySystem() ) { - if(icLBE[bPos] == BPACKPOCKPOS && (!(pSoldier->flags.ZipperFlag) || (pSoldier->flags.ZipperFlag && gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_STAND)) && (gTacticalStatus.uiFlags & INCOMBAT)) + if (icLBE[bPos] == BPACKPOCKPOS && (!(pSoldier->flags.ZipperFlag) || (pSoldier->flags.ZipperFlag && gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_STAND)) && (gTacticalStatus.uiFlags & INCOMBAT) && fDoingPlacement) return( FALSE ); lbePocket = ( !pSoldier->inv[icLBE[bPos]].exists() ) ? LoadBearingEquipment[Item[icDefault[bPos]].ubClassIndex].lbePocketIndex[icPocket[bPos]] : LoadBearingEquipment[Item[pSoldier->inv[icLBE[bPos]].usItem].ubClassIndex].lbePocketIndex[icPocket[bPos]]; diff --git a/Tactical/Morale.cpp b/Tactical/Morale.cpp index 0efd7fbd..5a106cbd 100644 --- a/Tactical/Morale.cpp +++ b/Tactical/Morale.cpp @@ -1469,18 +1469,21 @@ void HandleSnitchesReports( std::vector& aVec ) bSnitchID = event.ubSnitchID; pSnitch = FindSoldierByProfileID( bSnitchID, TRUE ); - if ( pSnitch == NULL ) + if (pSnitch == NULL) continue; - if ( !(pSnitch->bActive) ) + if (!pSnitch->bActive) continue; - if ( pSnitch->flags.fMercAsleep ) + if (pSnitch->flags.fMercAsleep) fSleepingSnitch = TRUE; + if (pSnitch->usSoldierFlagMask2 & SOLDIER_SNITCHING_OFF) + continue; + // snitch introduction - if ( fSleepingSnitch ) - TacticalCharacterDialogueWithSpecialEvent( pSnitch, 0, DIALOGUE_SPECIAL_EVENT_SLEEP, 0, 0 ); + if (fSleepingSnitch) + TacticalCharacterDialogueWithSpecialEvent(pSnitch, 0, DIALOGUE_SPECIAL_EVENT_SLEEP, 0, 0); SnitchTacticalCharacterDialogue( pSnitch, 0, SNITCH_INTRODUCTION, NO_PROFILE, NO_PROFILE ); diff --git a/Tactical/Squads.cpp b/Tactical/Squads.cpp index 9bd98ee2..47f455c9 100644 --- a/Tactical/Squads.cpp +++ b/Tactical/Squads.cpp @@ -451,7 +451,8 @@ BOOLEAN AddCharacterToAnySquad( SOLDIERTYPE *pCharacter ) } // should never happen! - Assert( FALSE ); + //Assert( FALSE ); + return( FALSE ); } diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index dc539cf0..a7436893 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -7279,23 +7279,22 @@ void NoticeUnseenAttacker( SOLDIERTYPE * pAttacker, SOLDIERTYPE * pDefender, INT INT8 bDirection; BOOLEAN fMuzzleFlash = FALSE; - if ( !(gTacticalStatus.uiFlags & INCOMBAT) ) + if (!(gTacticalStatus.uiFlags & INCOMBAT)) { return; } - if ( pAttacker->usAttackingWeapon == DART_GUN ) + if (AmmoTypes[pAttacker->inv[pAttacker->ubAttackingHand][0]->data.gun.ubGunAmmoType].dart) { // rarely noticed - if ( SkillCheck( pDefender, NOTICE_DART_CHECK, 0 ) < 0) + if (SkillCheck(pDefender, NOTICE_DART_CHECK, 0) < 0) { return; } } // do we need to do checks for life/breath here? - - if ( pDefender->ubBodyType == LARVAE_MONSTER || (pDefender->flags.uiStatusFlags & SOLDIER_VEHICLE && pDefender->bTeam == OUR_TEAM) ) + if (pDefender->ubBodyType == LARVAE_MONSTER || (pDefender->flags.uiStatusFlags & SOLDIER_VEHICLE && pDefender->bTeam == OUR_TEAM)) { return; }