FindSoldierByProfileID fix: check last soldier in player team

RenderOverheadOverlays fix: last soldier in player team
StartInterrupt fix: all interrupts in original interrupt system start as hidden and revealed later if soldier decides something
StartInterrupt fix: don't show hidden interrupt
DeductPoints, ResolvePendingInterrupt, StartInterrupt: MAX_NUM_SOLDIERS fix
SoldierCollapse: replace chosen one if soldier is collapsed

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8259 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Sevenfm
2016-06-25 09:44:25 +00:00
parent fea2a0d12b
commit b1eb11941a
5 changed files with 38 additions and 22 deletions
+4 -3
View File
@@ -1024,7 +1024,7 @@ void DeductPoints( SOLDIERTYPE *pSoldier, INT16 sAPCost, INT32 iBPCost, UINT8 ub
SOLDIERTYPE *pOpponent; SOLDIERTYPE *pOpponent;
BOOLEAN fFoundInterrupter = FALSE; BOOLEAN fFoundInterrupter = FALSE;
for ( uCnt = 0; uCnt <= MAX_NUM_SOLDIERS; uCnt++ ) for ( uCnt = 0; uCnt < MAX_NUM_SOLDIERS; uCnt++ )
{ {
// first find all guys who watch us // first find all guys who watch us
pOpponent = MercPtrs[ uCnt ]; pOpponent = MercPtrs[ uCnt ];
@@ -4020,11 +4020,12 @@ INT16 GetAPsToJumpOver( SOLDIERTYPE *pSoldier )
// APBP Constants and extra game features. // APBP Constants and extra game features.
INT32 CalcAPCostForAiming( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, INT8 bAimTime ) INT32 CalcAPCostForAiming( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, INT8 bAimTime )
{ {
Assert(pSoldier != NULL);
Assert(&pSoldier->inv[HANDPOS] != NULL);
INT16 sAPCost = 0; INT16 sAPCost = 0;
UINT16 usItemNum = pSoldier->inv[HANDPOS].usItem; UINT16 usItemNum = pSoldier->inv[HANDPOS].usItem;
Assert(pSoldier != NULL);
Assert(&pSoldier->inv[HANDPOS] != NULL);
#ifndef dnlCALCBESTSHOT//dnl ch69 150913 if this is turn on we get incorrect APs as MinAPsToShootOrStab always include raise gun cost #ifndef dnlCALCBESTSHOT//dnl ch69 150913 if this is turn on we get incorrect APs as MinAPsToShootOrStab always include raise gun cost
if (!ARMED_VEHICLE(pSoldier) && !( gAnimControl[ pSoldier->usAnimState ].uiFlags & ( ANIM_FIREREADY | ANIM_FIRE )))//dnl ch64 310813 if (!ARMED_VEHICLE(pSoldier) && !( gAnimControl[ pSoldier->usAnimState ].uiFlags & ( ANIM_FIREREADY | ANIM_FIRE )))//dnl ch64 310813
{ {
+4 -3
View File
@@ -19384,8 +19384,9 @@ void SoldierCollapse( SOLDIERTYPE *pSoldier )
if ( pSoldier->flags.uiStatusFlags & SOLDIER_ENEMY ) if ( pSoldier->flags.uiStatusFlags & SOLDIER_ENEMY )
{ {
// sevenfm: bPanicTriggerIsAlarm is always not NULL pointer
if ( !(gTacticalStatus.bPanicTriggerIsAlarm) && (gTacticalStatus.ubTheChosenOne == pSoldier->ubID) ) //if ( !(gTacticalStatus.bPanicTriggerIsAlarm) && (gTacticalStatus.ubTheChosenOne == pSoldier->ubID) )
if ( gTacticalStatus.ubTheChosenOne == pSoldier->ubID )
{ {
// replace this guy as the chosen one! // replace this guy as the chosen one!
gTacticalStatus.ubTheChosenOne = NOBODY; gTacticalStatus.ubTheChosenOne = NOBODY;
@@ -21909,7 +21910,7 @@ BOOLEAN ResolvePendingInterrupt( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType )
UINT16 uCnt = 0, uiReactionTime; UINT16 uCnt = 0, uiReactionTime;
INT16 iInjuryPenalty; INT16 iInjuryPenalty;
for ( uCnt = 0; uCnt <= MAX_NUM_SOLDIERS; uCnt++ ) for ( uCnt = 0; uCnt < MAX_NUM_SOLDIERS; uCnt++ )
{ {
// first find all guys who can see us // first find all guys who can see us
pInterrupter = MercPtrs[uCnt]; pInterrupter = MercPtrs[uCnt];
+8 -3
View File
@@ -491,8 +491,10 @@ void RandomStats()
pProfile->bExpLevel = RandomAbsoluteRange( pProfile->bExpLevel, 1, 10, Exp, Type ); pProfile->bExpLevel = RandomAbsoluteRange( pProfile->bExpLevel, 1, 10, Exp, Type );
if ( gRandomStatsValue[cnt].RandomLife == TRUE ) if ( gRandomStatsValue[cnt].RandomLife == TRUE )
{
pProfile->bLifeMax = RandomAbsoluteRange( pProfile->bLifeMax, 1, 100, Stats, Type ); pProfile->bLifeMax = RandomAbsoluteRange( pProfile->bLifeMax, 1, 100, Stats, Type );
pProfile->bLife = pProfile->bLifeMax; pProfile->bLife = pProfile->bLifeMax;
}
if ( gRandomStatsValue[cnt].RandomAgility == TRUE ) if ( gRandomStatsValue[cnt].RandomAgility == TRUE )
pProfile->bAgility = RandomAbsoluteRange( pProfile->bAgility, 1, 100, Stats, Type ); pProfile->bAgility = RandomAbsoluteRange( pProfile->bAgility, 1, 100, Stats, Type );
@@ -1647,17 +1649,20 @@ SOLDIERTYPE * FindSoldierByProfileID( UINT8 ubProfileID, BOOLEAN fPlayerMercsOnl
UINT8 ubLoop, ubLoopLimit; UINT8 ubLoop, ubLoopLimit;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
// sevenfm: fix for last soldier in player team
if (fPlayerMercsOnly) if (fPlayerMercsOnly)
{ {
ubLoopLimit = gTacticalStatus.Team[0].bLastID; ubLoopLimit = gTacticalStatus.Team[0].bLastID + 1;
} }
else else
{ {
ubLoopLimit = MAX_NUM_SOLDIERS; ubLoopLimit = MAX_NUM_SOLDIERS;
} }
for (ubLoop = 0, pSoldier = MercPtrs[0]; ubLoop < ubLoopLimit; ubLoop++, pSoldier++) for (ubLoop = 0; ubLoop < ubLoopLimit; ubLoop++)
{ {
pSoldier = MercPtrs[ubLoop];
if (pSoldier->bActive && pSoldier->ubProfile == ubProfileID) if (pSoldier->bActive && pSoldier->ubProfile == ubProfileID)
{ {
return( pSoldier ); return( pSoldier );
@@ -2395,7 +2400,7 @@ SOLDIERTYPE * SwapLarrysProfiles( SOLDIERTYPE * pSoldier )
pNewProfile->records.usExpDetonated = gMercProfiles[ ubSrcProfile ].records.usExpDetonated; pNewProfile->records.usExpDetonated = gMercProfiles[ ubSrcProfile ].records.usExpDetonated;
pNewProfile->records.usItemsRepaired = gMercProfiles[ ubSrcProfile ].records.usItemsRepaired; pNewProfile->records.usItemsRepaired = gMercProfiles[ ubSrcProfile ].records.usItemsRepaired;
pNewProfile->records.usItemsCombined = gMercProfiles[ ubSrcProfile ].records.usItemsCombined; pNewProfile->records.usItemsCombined = gMercProfiles[ ubSrcProfile ].records.usItemsCombined;
pNewProfile->records.usItemsCombined = gMercProfiles[ ubSrcProfile ].records.usItemsStolen; pNewProfile->records.usItemsStolen = gMercProfiles[ ubSrcProfile ].records.usItemsStolen;
pNewProfile->records.usMercsBandaged = gMercProfiles[ ubSrcProfile ].records.usMercsBandaged; pNewProfile->records.usMercsBandaged = gMercProfiles[ ubSrcProfile ].records.usMercsBandaged;
pNewProfile->records.usSurgeriesMade = gMercProfiles[ ubSrcProfile ].records.usSurgeriesMade; pNewProfile->records.usSurgeriesMade = gMercProfiles[ ubSrcProfile ].records.usSurgeriesMade;
pNewProfile->records.usNPCsDiscovered = gMercProfiles[ ubSrcProfile ].records.usNPCsDiscovered; pNewProfile->records.usNPCsDiscovered = gMercProfiles[ ubSrcProfile ].records.usNPCsDiscovered;
+21 -11
View File
@@ -836,7 +836,7 @@ void StartInterrupt( void )
gTacticalStatus.fInterruptOccurred = TRUE; gTacticalStatus.fInterruptOccurred = TRUE;
cnt = 0; cnt = 0;
for ( pTempSoldier = MercPtrs[ cnt ]; cnt <= MAX_NUM_SOLDIERS; cnt++,pTempSoldier++) for ( pTempSoldier = MercPtrs[ cnt ]; cnt < MAX_NUM_SOLDIERS; cnt++,pTempSoldier++)
{ {
if ( pTempSoldier->bActive ) if ( pTempSoldier->bActive )
{ {
@@ -858,7 +858,7 @@ void StartInterrupt( void )
// build string for display of who gets interrupt // build string for display of who gets interrupt
//while( 1 ) //while( 1 )
for( iCounter = 0; iCounter <= MAX_NUM_SOLDIERS; iCounter++ ) for( iCounter = 0; iCounter < MAX_NUM_SOLDIERS; iCounter++ )
{ {
MercPtrs[ubInterrupter]->aiData.bMoved = FALSE; MercPtrs[ubInterrupter]->aiData.bMoved = FALSE;
DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: popping %d off of the interrupt queue", ubInterrupter ) ); DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: popping %d off of the interrupt queue", ubInterrupter ) );
@@ -1017,7 +1017,7 @@ void StartInterrupt( void )
//while( 1 ) //while( 1 )
UINT16 usCounter; UINT16 usCounter;
for( usCounter = 0; usCounter <= MAX_NUM_SOLDIERS; usCounter++ ) for( usCounter = 0; usCounter < MAX_NUM_SOLDIERS; usCounter++ )
{ {
MercPtrs[ubInterrupter]->aiData.bMoved = FALSE; MercPtrs[ubInterrupter]->aiData.bMoved = FALSE;
@@ -1049,12 +1049,17 @@ void StartInterrupt( void )
pTempSoldier = MercPtrs[ cnt ]; pTempSoldier = MercPtrs[ cnt ];
// pSoldier = MercPtrs[ubFirstInterrupter]; // pSoldier = MercPtrs[ubFirstInterrupter];
// sevenfm: check that soldier is not NULL
Assert(pTempSoldier);
//if ( gTacticalStatus.ubCurrentTeam == OUR_TEAM )//hayden //if ( gTacticalStatus.ubCurrentTeam == OUR_TEAM )//hayden
// if ( pSoldier->bTeam > OUR_TEAM && pSoldier->bTeam < 6) // cheap disable // if ( pSoldier->bTeam > OUR_TEAM && pSoldier->bTeam < 6) // cheap disable
// SANDRO - we don't use the "hidden interrupt" feature with IIS // SANDRO - we don't use the "hidden interrupt" feature with IIS
if (!is_networked && gTacticalStatus.ubCurrentTeam == OUR_TEAM && !gGameOptions.fImprovedInterruptSystem // sevenfm: all interrupts in original interrupt system start as hidden and revealed later if soldier decides something
/*if (!is_networked && gTacticalStatus.ubCurrentTeam == OUR_TEAM && !gGameOptions.fImprovedInterruptSystem
&& MercPtrs[ LATEST_INTERRUPT_GUY ]->aiData.bOppList[pTempSoldier->ubID] != SEEN_CURRENTLY && MercPtrs[ LATEST_INTERRUPT_GUY ]->aiData.bOppList[pTempSoldier->ubID] != SEEN_CURRENTLY
&& MercPtrs[ LATEST_INTERRUPT_GUY ]->aiData.bOppList[pTempSoldier->ubID] != SEEN_THIS_TURN ) && MercPtrs[ LATEST_INTERRUPT_GUY ]->aiData.bOppList[pTempSoldier->ubID] != SEEN_THIS_TURN )*/
if ( !is_networked && pSoldier->bTeam != OUR_TEAM && !gGameOptions.fImprovedInterruptSystem )
{ {
// we're being interrupted by the computer! // we're being interrupted by the computer!
// we delay displaying any interrupt message until the computer // we delay displaying any interrupt message until the computer
@@ -1073,11 +1078,16 @@ void StartInterrupt( void )
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_TESTVERSION, L"Interrupt ( could be hidden )" ); ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_TESTVERSION, L"Interrupt ( could be hidden )" );
#endif #endif
} }
// SANDRO - show correct top message
if (pTempSoldier->bTeam == MILITIA_TEAM ) // sevenfm: don't show hidden interrupt
AddTopMessage( MILITIA_INTERRUPT_MESSAGE, Message[STR_INTERRUPT] ); if( !gfHiddenInterrupt )
else {
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, Message[STR_INTERRUPT] ); // SANDRO - show correct top message
if (pTempSoldier->bTeam == MILITIA_TEAM )
AddTopMessage( MILITIA_INTERRUPT_MESSAGE, Message[STR_INTERRUPT] );
else
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, Message[STR_INTERRUPT] );
}
if (pTempSoldier != NULL) if (pTempSoldier != NULL)
{ {
@@ -1221,7 +1231,7 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
pSoldier = MercPtrs[ubInterruptedSoldier]; pSoldier = MercPtrs[ubInterruptedSoldier];
cnt = 0; cnt = 0;
for ( pTempSoldier = MercPtrs[ cnt ]; cnt <= MAX_NUM_SOLDIERS; cnt++,pTempSoldier++) for ( pTempSoldier = MercPtrs[ cnt ]; cnt < MAX_NUM_SOLDIERS; cnt++,pTempSoldier++)
{ {
if ( pTempSoldier->bActive ) if ( pTempSoldier->bActive )
{ {
+1 -2
View File
@@ -1165,7 +1165,6 @@ void RenderOverheadMap( INT16 sStartPointX_M, INT16 sStartPointY_M, INT16 sStart
pTile = &( gSmTileDB[ pNode->usIndex ] ); pTile = &( gSmTileDB[ pNode->usIndex ] );
sX = sTempPosX_S; sX = sTempPosX_S;
sY = sTempPosY_S - sHeight;
//dnl ch82 081213 //dnl ch82 081213
sY = sTempPosY_S; sY = sTempPosY_S;
if(gTileDatabase[pNode->usIndex].uiFlags & IGNORE_WORLD_HEIGHT) if(gTileDatabase[pNode->usIndex].uiFlags & IGNORE_WORLD_HEIGHT)
@@ -1395,7 +1394,7 @@ void RenderOverheadOverlays()
//SOLDIER OVERLAY //SOLDIER OVERLAY
if( gfTacticalPlacementGUIActive ) if( gfTacticalPlacementGUIActive )
{ //loop through only the player soldiers { //loop through only the player soldiers
end = gTacticalStatus.Team[ OUR_TEAM ].bLastID; end = gTacticalStatus.Team[ OUR_TEAM ].bLastID + 1;
} }
else else
{ //loop through all soldiers. { //loop through all soldiers.