diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index 81ee30b5..7424f2d9 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -2383,7 +2383,10 @@ SOLDIERTYPE* TacticalCreateMilitia( UINT8 ubMilitiaClass ) UINT8 ubID; SOLDIERTYPE * pSoldier; - if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) + if (gpBattleGroup->ubSectorZ == gbWorldSectorZ && + gpBattleGroup->ubSectorX == gWorldSectorX && + gpBattleGroup->ubSectorY == gWorldSectorY && + guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) { pSoldier = ReserveTacticalMilitiaSoldierForAutoresolve( ubMilitiaClass ); if( pSoldier ) return pSoldier; diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index eba20565..6d32fac5 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -2834,7 +2834,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // WANNE: Commented this out, because the interface panel is not correctly redrawn! // I do not know the bug ;( - //GoIntoOverheadMap(); + GoIntoOverheadMap(); break; // Lalien: commented out, to fix "end move & LOS bug" (same button has two different actions) diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 79a660aa..718b0b79 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -3649,7 +3649,8 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, UINT16 sGridNo, UINT8 ubAimTime iChance -= iPenalty; } - sDistVis = DistanceVisible( pSoldier, DIRECTION_IRRELEVANT, DIRECTION_IRRELEVANT, sGridNo, 0, pSoldier ); + // 0verhaul: Changed to take expanded range from shooting at different levels into account + sDistVis = DistanceVisible( pSoldier, DIRECTION_IRRELEVANT, DIRECTION_IRRELEVANT, sGridNo, pSoldier->bTargetLevel, pSoldier ); // give some leeway to allow people to spot for each other... // use distance limitation for LOS routine of 2 x maximum distance EVER visible, so that we get accurate @@ -3664,14 +3665,15 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, UINT16 sGridNo, UINT8 ubAimTime ubTargetID = WhoIsThere2( sGridNo, pSoldier->bTargetLevel ); // best to use team knowledge as well, in case of spotting for someone else + // 0verhaul: Why not use the distance visible as the max for line of sight testing? if (ubTargetID != NOBODY && pSoldier->bOppList[ubTargetID] == SEEN_CURRENTLY || gbPublicOpplist[pSoldier->bTeam][ubTargetID] == SEEN_CURRENTLY) { - iSightRange = SoldierToBodyPartLineOfSightTest( pSoldier, sGridNo, pSoldier->bTargetLevel, pSoldier->bAimShotLocation, (UINT8) (MaxDistanceVisible() * 2), TRUE ); + iSightRange = SoldierToBodyPartLineOfSightTest( pSoldier, sGridNo, pSoldier->bTargetLevel, pSoldier->bAimShotLocation, (UINT8) sDistVis /*(MaxDistanceVisible() * 2) */, TRUE ); } if (iSightRange == -1) // didn't do a bodypart-based test { - iSightRange = SoldierTo3DLocationLineOfSightTest( pSoldier, sGridNo, pSoldier->bTargetLevel, pSoldier->bTargetCubeLevel, (UINT8) (MaxDistanceVisible() * 2), TRUE ); + iSightRange = SoldierTo3DLocationLineOfSightTest( pSoldier, sGridNo, pSoldier->bTargetLevel, pSoldier->bTargetCubeLevel, (UINT8) sDistVis /* (MaxDistanceVisible() * 2) */, TRUE ); } iSightRange *= 2; diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 11d14c83..92c9f2c1 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -1209,7 +1209,7 @@ INT16 DistanceVisible( SOLDIERTYPE *pSoldier, INT8 bFacingDir, INT8 bSubjectDir, //if ( pSubject && !( pSubject->fMuzzleFlash && (bLightLevel > NORMAL_LIGHTLEVEL_DAY) ) ) if ( !( pSubject && pSubject->fMuzzleFlash && (bLightLevel > NORMAL_LIGHTLEVEL_DAY) ) ) { - // ATE: Made function to adjust light distence... + // ATE: Made function to adjust light distance... sDistVisible = AdjustMaxSightRangeForEnvEffects( pSoldier, bLightLevel, sDistVisible ); } diff --git a/TileEngine/overhead map.cpp b/TileEngine/overhead map.cpp index cad62cd8..c8a25051 100644 --- a/TileEngine/overhead map.cpp +++ b/TileEngine/overhead map.cpp @@ -630,7 +630,7 @@ void GoIntoOverheadMap( ) DisableTacticalTeamPanelButtons( TRUE ); } - EmptyBackgroundRects( ); + EmptyBackgroundRects( ); } } @@ -760,6 +760,7 @@ void RenderOverheadMap( INT16 sStartPointX_M, INT16 sStartPointY_M, INT16 sStart //ColorFillVideoSurfaceArea( FRAME_BUFFER, sStartPointX_S, sStartPointY_S, sEndXS, sEndYS, 0 ); ColorFillVideoSurfaceArea( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0 ); + fInterfacePanelDirty = DIRTYLEVEL2; InvalidateScreen( ); gfOverheadMapDirty = FALSE;