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
This commit is contained in:
Sevenfm
2021-05-06 04:55:08 +00:00
parent 3579d96999
commit a38b3b414f
3 changed files with 9 additions and 10 deletions
+6 -6
View File
@@ -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
+2 -3
View File
@@ -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;
}
+1 -1
View File
@@ -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++ )