From a38b3b414f6b729e9bd380b942bc807901dde408 Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Thu, 6 May 2021 04:55:08 +0000 Subject: [PATCH] Fixes by Shadooow: - robot has no (dynamic) opinions anymore. For now I allowed other mercs to have opinion about robot, but that is also a bit odd - fixed Not Enough Action Points error triggering needlessly, when doing stuff like reloading ammo, using consumables or changing attachments in map screen during battle with mercs that are not in the sector where battle is occuring - fix for RPCs sometimes repeating last spoken line after victory in the sector git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9005 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/DynamicDialogue.cpp | 12 ++++++------ Tactical/Points.cpp | 5 ++--- Tactical/Tactical Turns.cpp | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/Tactical/DynamicDialogue.cpp b/Tactical/DynamicDialogue.cpp index b17b35f83..8b81ffc7b 100644 --- a/Tactical/DynamicDialogue.cpp +++ b/Tactical/DynamicDialogue.cpp @@ -1119,7 +1119,7 @@ void AddOpinionEvent( UINT8 usProfileA, UINT8 usProfileB, UINT8 usEvent, BOOLEAN // we don't want any events for people not on our team or vehicles SOLDIERTYPE* pSoldier = FindSoldierByProfileID( usProfileA, TRUE ); - if ( !pSoldier || pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) + if ( !pSoldier || pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT(pSoldier)) return; pSoldier = FindSoldierByProfileID( usProfileB, TRUE ); @@ -1632,7 +1632,7 @@ void HandleDynamicOpinionsDailyRefresh( ) for ( pSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pSoldier++ ) { if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && - !(pSoldier->bAssignment == IN_TRANSIT || + !(pSoldier->bAssignment == IN_TRANSIT || AM_A_ROBOT(pSoldier) || pSoldier->bAssignment == ASSIGNMENT_DEAD) ) { // or each profile, check wether everyone else is a friend of someone else we hate @@ -1674,7 +1674,7 @@ void CheckForFriendsofHated( SOLDIERTYPE* pSoldier ) SOLDIERTYPE* pThirdSoldier; // make sure we ourselves aren't in transit - if ( !pSoldier->bActive || pSoldier->ubProfile == NO_PROFILE || pSoldier->bAssignment == IN_TRANSIT || pSoldier->bAssignment == ASSIGNMENT_DEAD ) + if ( !pSoldier->bActive || pSoldier->ubProfile == NO_PROFILE || AM_A_ROBOT(pSoldier) || pSoldier->bAssignment == IN_TRANSIT || pSoldier->bAssignment == ASSIGNMENT_DEAD ) return; bMercID = pSoldier->ubID; @@ -1835,7 +1835,7 @@ void HandleDynamicOpinionRetreat( ) void HandleDynamicOpinionTeamDrinking( SOLDIERTYPE* pSoldier ) { // need to be drunk for this - if ( !pSoldier || pSoldier->ubProfile == NO_PROFILE || pSoldier->newdrugs.drinkstaken <= 0.0 ) + if ( !pSoldier || pSoldier->ubProfile == NO_PROFILE || AM_A_ROBOT(pSoldier) || pSoldier->newdrugs.drinkstaken <= 0.0 ) return; SOLDIERTYPE* pTeamSoldier = NULL; @@ -1873,7 +1873,7 @@ void HandleDynamicOpinionTeamDrinking( SOLDIERTYPE* pSoldier ) void HandleDynamicOpinionTeaching( SOLDIERTYPE* pSoldier, UINT8 ubStat ) { - if ( !pSoldier || pSoldier->ubProfile == NO_PROFILE ) + if ( !pSoldier || pSoldier->ubProfile == NO_PROFILE || AM_A_ROBOT(pSoldier)) return; // because this code is as annoying as it is, ubStat has a different numbering than bTrainStat. The only reasonable explanation for that is that the designers decided to be jerks on purpose @@ -2079,7 +2079,7 @@ UINT8 HighestInventoryCoolness( SOLDIERTYPE* pSoldier ) void HandleDynamicOpinionChange( SOLDIERTYPE* pSoldier, UINT8 usEvent, BOOLEAN fOffender, BOOLEAN fStartDialogue ) { - if ( !pSoldier || pSoldier->ubProfile == NO_PROFILE ) + if ( !pSoldier || pSoldier->ubProfile == NO_PROFILE || AM_A_ROBOT(pSoldier)) return; // we might have to compare the soldier to other teammates, determine relevant values diff --git a/Tactical/Points.cpp b/Tactical/Points.cpp index 29de69226..ba157d8f9 100644 --- a/Tactical/Points.cpp +++ b/Tactical/Points.cpp @@ -933,9 +933,8 @@ BOOLEAN EnoughPoints( SOLDIERTYPE *pSoldier, INT16 sAPCost, INT32 iBPCost, BOOLE // AI guy on special move off map return( TRUE ); } - // IN realtime.. only care about BPs - if ( ( gTacticalStatus.uiFlags & REALTIME ) || !(gTacticalStatus.uiFlags & INCOMBAT ) ) + if ( ( gTacticalStatus.uiFlags & REALTIME ) || !(gTacticalStatus.uiFlags & INCOMBAT ) || !pSoldier->bInSector) { sAPCost = 0; } @@ -1001,7 +1000,7 @@ void DeductPoints( SOLDIERTYPE *pSoldier, INT16 sAPCost, INT32 iBPCost, UINT8 ub } // in real time, there IS no AP cost, (only breath cost) - if (!(gTacticalStatus.uiFlags & TURNBASED) || !(gTacticalStatus.uiFlags & INCOMBAT ) ) + if (!(gTacticalStatus.uiFlags & TURNBASED) || !(gTacticalStatus.uiFlags & INCOMBAT ) || !pSoldier->bInSector) { sAPCost = 0; } diff --git a/Tactical/Tactical Turns.cpp b/Tactical/Tactical Turns.cpp index 3be556498..64836d5e8 100644 --- a/Tactical/Tactical Turns.cpp +++ b/Tactical/Tactical Turns.cpp @@ -102,7 +102,7 @@ void HandleRPCDescription( ) // OK, count how many rpc guys we have.... // set up soldier ptr as first element in mercptrs list cnt2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - + if (gTacticalStatus.ubGuideDescriptionToUse != 100) { // run through list for ( pTeamSoldier = MercPtrs[cnt2]; cnt2 <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt2, pTeamSoldier++ )