From c38e079edccf8220089cdc0f8a052673e50c0feb Mon Sep 17 00:00:00 2001 From: Flugente Date: Tue, 28 May 2013 21:32:40 +0000 Subject: [PATCH] - interrogation point calculation was suboptimal - Fix: removed unnecessary check - robots cannot climb roofs, windows, fences or walls anymore git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6103 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Strategic/Assignments.cpp | 14 ++++++++------ Strategic/Strategic AI.cpp | 3 --- Tactical/Turn Based Input.cpp | 16 ++++++++++++---- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index cf86e992..f2be0a68 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -2616,16 +2616,18 @@ extern INT32 CalcThreateningEffectiveness( UINT8 ubMerc ); // Flugente: calculate interrogation value UINT32 CalculateInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ) { - UINT32 usInterrogationPoints = 0; + UINT32 usInterrogationPoints = 0; // for max points we display the maximum amount of prisoners instead *pusMaxPts = 0; - if ( !pSoldier || !pSoldier->bSectorZ ) // FIXME: Dereferencing null pointer - { - SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( pSoldier->sSectorX, pSoldier->sSectorY ) ] ); - *pusMaxPts = (UINT16)(pSectorInfo->uiNumberOfPrisonersOfWar); - } + // no soldier (how does that happen?) or underground -> no interrogation points, as there are no underground prisons + if ( !pSoldier || pSoldier->bSectorZ ) + return 0; + + SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( pSoldier->sSectorX, pSoldier->sSectorY ) ] ); + + *pusMaxPts = (UINT16)(pSectorInfo->uiNumberOfPrisonersOfWar); // no prisoners -> no interrogation (this should not happen) if ( !*pusMaxPts ) diff --git a/Strategic/Strategic AI.cpp b/Strategic/Strategic AI.cpp index 1d52ff03..02773c17 100644 --- a/Strategic/Strategic AI.cpp +++ b/Strategic/Strategic AI.cpp @@ -6479,9 +6479,6 @@ void MoveSAIGroupToSector( GROUP **pGroup, UINT8 ubSectorID, UINT32 uiMoveCode, (*pGroup)->pEnemyGroup->ubIntention = ubIntention; (*pGroup)->ubMoveType = ONE_WAY; - //Make sure that the group isn't moving into a garrison sector. These sectors should be using ASSAULT intentions! - Assert(ubIntention != PURSUIT && SectorInfo[ ubSectorID ].ubGarrisonID != NO_GARRISON ); - if( (*pGroup)->ubSectorX == ubDstSectorX && (*pGroup)->ubSectorY == ubDstSectorY ) { //The destination sector is the current location. Instead of causing code logic problems, //simply process them as if they just arrived. diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 7764d421..895ca454 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -2840,6 +2840,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) if ( GetSoldier( &lSoldier, gusSelectedSoldier ) ) { + // Flugente: robots do not climb + if ( AM_A_ROBOT( lSoldier ) ) + break; + if ( FindWindowJumpDirection( lSoldier, lSoldier->sGridNo, lSoldier->ubDirection, &bDirection ) ) { if((UsingNewInventorySystem() == true) && lSoldier->inv[BPACKPOCKPOS].exists() == true) @@ -2882,6 +2886,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) SOLDIERTYPE *pjSoldier; if ( GetSoldier( &pjSoldier, gusSelectedSoldier ) ) { + // Flugente: robots do not climb + if ( AM_A_ROBOT( pjSoldier ) ) + break; + INT16 sAPCost; INT16 sBPCost; BOOLEAN fNearHeigherLevel; @@ -2948,12 +2956,12 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // Climb on walls if (gGameExternalOptions.fCanClimbOnWalls == TRUE) { + // No climbing when wearing a backpack! + if((UsingNewInventorySystem() == true) && pjSoldier->inv[BPACKPOCKPOS].exists() == true) + return; + if ( FindWallJumpDirection( pjSoldier, pjSoldier->sGridNo, pjSoldier->ubDirection, &bDirection ) ) { - // No climbing when wearing a backpack! - if((UsingNewInventorySystem() == true) && pjSoldier->inv[BPACKPOCKPOS].exists() == true) - return; - if ( EnoughPoints( pjSoldier, GetAPsToJumpWall( pjSoldier, FALSE ), GetBPsToJumpWall( pjSoldier, FALSE ), FALSE ) ) { pjSoldier->BeginSoldierClimbWall( );