diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index c8bec277..b015d256 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -730,7 +730,7 @@ void BuildSectorsWithSoldiersList( void ) { if(pTeamSoldier->bActive) { - fSectorsWithSoldiers[ pTeamSoldier->sSectorX + pTeamSoldier->sSectorY * MAP_WORLD_X ][ pTeamSoldier->bSectorZ ] = TRUE; + fSectorsWithSoldiers[ CALCULATE_STRATEGIC_INDEX(pTeamSoldier->sSectorX, pTeamSoldier->sSectorY ) ][ pTeamSoldier->bSectorZ ] = TRUE; } } } @@ -2932,7 +2932,7 @@ void UpdateAssignments() for( bZ = 0; bZ < 4; ++bZ ) { // is there anyone in this sector? - if( fSectorsWithSoldiers[ sX + sY * MAP_WORLD_X ][ bZ ] == TRUE ) + if( fSectorsWithSoldiers[CALCULATE_STRATEGIC_INDEX(sX, sY) ][ bZ ] == TRUE ) { // handle any doctors HandleDoctorsInSector( sX, sY, bZ ); @@ -4672,7 +4672,7 @@ void CheckForAndHandleHospitalPatients( void ) SOLDIERTYPE *pSoldier, *pTeamSoldier; INT32 cnt=0; - if ( fSectorsWithSoldiers[gModSettings.ubHospitalSectorX + gModSettings.ubHospitalSectorY * MAP_WORLD_X][0] == FALSE ) + if ( fSectorsWithSoldiers[CALCULATE_STRATEGIC_INDEX(gModSettings.ubHospitalSectorX, gModSettings.ubHospitalSectorY )][0] == FALSE ) { // nobody in the hospital sector... leave return; @@ -6060,7 +6060,7 @@ void HandleTrainingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ ) } // check if we're doing a sector where militia can be trained - if( ( (StrategicMap[ sMapX + ( sMapY * MAP_WORLD_X ) ].bNameId != BLANK_SECTOR ) || ( fSamSiteInSector == TRUE ) ) && (bZ == 0) ) + if( ( (StrategicMap[CALCULATE_STRATEGIC_INDEX(sMapX, sMapY) ].bNameId != BLANK_SECTOR ) || ( fSamSiteInSector == TRUE ) ) && (bZ == 0) ) { // init town trainer list memset( TownTrainer, 0, sizeof( TownTrainer ) ); @@ -7798,7 +7798,7 @@ BOOLEAN TrainTownInSector( SOLDIERTYPE *pTrainer, INT16 sMapX, INT16 sMapY, INT1 BOOLEAN fSamSiteInSector = IsThisSectorASAMSector( sMapX, sMapY, 0 ); // get town index - ubTownId = StrategicMap[ pTrainer->sSectorX + pTrainer->sSectorY * MAP_WORLD_X ].bNameId; + ubTownId = StrategicMap[CALCULATE_STRATEGIC_INDEX(pTrainer->sSectorX, pTrainer->sSectorY ) ].bNameId; if( fSamSiteInSector == FALSE ) { AssertNE(ubTownId, BLANK_SECTOR); @@ -8595,7 +8595,7 @@ void HandlePrison( INT16 sMapX, INT16 sMapY, INT8 bZ ) GetShortSectorString( sMapX, sMapY, wSectorName ); // if sector is not under our control, the prisoners are added to the local garrison - if( StrategicMap[ sMapX + sMapY * MAP_WORLD_X ].fEnemyControlled == TRUE ) + if( StrategicMap[ CALCULATE_STRATEGIC_INDEX(sMapX, sMapY) ].fEnemyControlled == TRUE ) { // add enemies pSectorInfo->ubNumTroops = min( 255, pSectorInfo->ubNumTroops + aPrisoners[PRISONER_REGULAR] ); @@ -8975,7 +8975,7 @@ void HandleTrainWorkers() if ( !SectorOursAndPeaceful( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) ) continue; - UINT8 ubTownId = StrategicMap[ pSoldier->sSectorX + pSoldier->sSectorY * MAP_WORLD_X ].bNameId; + UINT8 ubTownId = StrategicMap[ CALCULATE_STRATEGIC_INDEX(pSoldier->sSectorX, pSoldier->sSectorY) ].bNameId; // Flugente: adjust for workforce UINT16 maxworkforce = 0; @@ -17888,7 +17888,7 @@ BOOLEAN PutMercInAwakeState( SOLDIERTYPE *pSoldier ) BOOLEAN IsThereASoldierInThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ ) { - if( fSectorsWithSoldiers[ sSectorX + sSectorY * MAP_WORLD_X ][ bSectorZ ] == TRUE ) + if( fSectorsWithSoldiers[CALCULATE_STRATEGIC_INDEX(sSectorX, sSectorY)][ bSectorZ ] == TRUE ) { return( TRUE ); } diff --git a/Strategic/Map Screen Helicopter.cpp b/Strategic/Map Screen Helicopter.cpp index c480cddd..59033941 100644 --- a/Strategic/Map Screen Helicopter.cpp +++ b/Strategic/Map Screen Helicopter.cpp @@ -2409,7 +2409,7 @@ BOOLEAN WillAirRaidBeStopped( INT16 sSectorX, INT16 sSectorY ) { UINT8 ubChance; - if ( !StrategicMap[(AIRPORT_X + (MAP_WORLD_X * AIRPORT_Y))].fEnemyControlled && !StrategicMap[(AIRPORT2_X + (MAP_WORLD_X * AIRPORT2_Y))].fEnemyControlled ) + if ( !StrategicMap[CALCULATE_STRATEGIC_INDEX(AIRPORT_X, AIRPORT_Y)].fEnemyControlled && !StrategicMap[CALCULATE_STRATEGIC_INDEX(AIRPORT2_X, AIRPORT2_Y)].fEnemyControlled ) { DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "WillAirRaidBeStopped: enemy has no more airports" ) ); return(TRUE); diff --git a/Strategic/Map Screen Interface Map.cpp b/Strategic/Map Screen Interface Map.cpp index 8545b204..6202d38b 100644 --- a/Strategic/Map Screen Interface Map.cpp +++ b/Strategic/Map Screen Interface Map.cpp @@ -2136,7 +2136,7 @@ void PlotPathForHelicopter( INT16 sX, INT16 sY ) // will plot a path from current position to sX, sY // get last sector in helicopters list, build new path, remove tail section, move to beginning of list, and append onto old list - pVehicleList[ iHelicopterVehicleId ].pMercPath = AppendStrategicPath( MoveToBeginningOfPathList( BuildAStrategicPath( NULL, GetLastSectorOfHelicoptersPath( ), ( INT16 )( sX + sY*( MAP_WORLD_X ) ), pVehicleList[ iHelicopterVehicleId ].ubMovementGroup, FALSE /*, FALSE */ ) ), pVehicleList[ iHelicopterVehicleId ].pMercPath ); + pVehicleList[ iHelicopterVehicleId ].pMercPath = AppendStrategicPath( MoveToBeginningOfPathList( BuildAStrategicPath( NULL, GetLastSectorOfHelicoptersPath( ), ( INT16 )( CALCULATE_STRATEGIC_INDEX(sX, sY) ), pVehicleList[ iHelicopterVehicleId ].ubMovementGroup, FALSE /*, FALSE */ ) ), pVehicleList[ iHelicopterVehicleId ].pMercPath ); // move to beginning of list pVehicleList[ iHelicopterVehicleId ].pMercPath = MoveToBeginningOfPathList( pVehicleList[ iHelicopterVehicleId ].pMercPath ); @@ -2220,7 +2220,7 @@ void PlotATemporaryPathForMilitia( INT16 sX, INT16 sY ) return; // build path - pTempMilitiaPath = BuildAStrategicPath( NULL, GetLastSectorOfMilitiaPath( ), (INT16)(sX + sY*(MAP_WORLD_X)), gMilitiaPath[gMilitiaGroupId].sGroupid, TRUE /*, TRUE */ ); + pTempMilitiaPath = BuildAStrategicPath( NULL, GetLastSectorOfMilitiaPath( ), (INT16)( CALCULATE_STRATEGIC_INDEX(sX, sY )), gMilitiaPath[gMilitiaGroupId].sGroupid, TRUE /*, TRUE */ ); } @@ -2333,10 +2333,8 @@ UINT32 ClearPathAfterThisSectorForMilitia( INT16 sX, INT16 sY ) INT16 GetLastSectorOfHelicoptersPath( void ) { // will return the last sector of the helicopter's current path - INT16 sLastSector = pVehicleList[ iHelicopterVehicleId ].sSectorX + pVehicleList[ iHelicopterVehicleId ].sSectorY * MAP_WORLD_X ; - PathStPtr pNode = NULL; - - pNode = pVehicleList[ iHelicopterVehicleId ].pMercPath; + INT16 sLastSector = CALCULATE_STRATEGIC_INDEX(pVehicleList[ iHelicopterVehicleId ].sSectorX, pVehicleList[ iHelicopterVehicleId ].sSectorY); + PathStPtr pNode = pVehicleList[ iHelicopterVehicleId ].pMercPath; while( pNode ) { @@ -2351,9 +2349,7 @@ INT16 GetLastSectorOfMilitiaPath( void ) { // will return the last sector of the helicopter's current path INT16 sLastSector = gMilitiaPlotStartSector; - PathStPtr pNode = NULL; - - pNode = gMilitiaPath[gMilitiaGroupId].path; + PathStPtr pNode = gMilitiaPath[gMilitiaGroupId].path; while ( pNode ) { @@ -3966,7 +3962,9 @@ void ShowMilitiaInMotion( INT16 sX, INT16 sY ) if ( !NumNonPlayerTeamMembersInSector( sX, sY, MILITIA_TEAM ) ) return; - if ( ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_ALLDIRS ) == 0 ) + int sector = CALCULATE_STRATEGIC_INDEX( sX, sY ); + + if ( ( StrategicMap[sector].usFlags & MILITIA_MOVE_ALLDIRS ) == 0 ) return; // show the icons for people in motion from this sector to the next guy over @@ -3979,7 +3977,7 @@ void ShowMilitiaInMotion( INT16 sX, INT16 sY ) INT16 iconOffsetX = 0; INT16 iconOffsetY = 0; - if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_NORTH ) + if ( StrategicMap[sector].usFlags & MILITIA_MOVE_NORTH ) { ubDirection = 4; sOffsetX = (MAP_GRID_X / 2); @@ -3987,21 +3985,21 @@ void ShowMilitiaInMotion( INT16 sX, INT16 sY ) iconOffsetX = -(hIconHandle->pETRLEObject[ubDirection].usWidth / 2); iconOffsetY = -(hIconHandle->pETRLEObject[ubDirection].usHeight); } - else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_EAST ) + else if ( StrategicMap[sector].usFlags & MILITIA_MOVE_EAST ) { ubDirection = 5; sOffsetX = MAP_GRID_X; sOffsetY = (MAP_GRID_Y / 2); iconOffsetY = -(hIconHandle->pETRLEObject[ubDirection].usHeight / 2); } - else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_SOUTH ) + else if ( StrategicMap[sector].usFlags & MILITIA_MOVE_SOUTH ) { ubDirection = 6; sOffsetX = (MAP_GRID_X / 2); sOffsetY = MAP_GRID_Y; iconOffsetX = -(hIconHandle->pETRLEObject[ubDirection].usWidth / 2); } - else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_WEST ) + else if ( StrategicMap[sector].usFlags & MILITIA_MOVE_WEST ) { ubDirection = 7; sOffsetX = 0; diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 5dd172f4..df7200ee 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -5866,7 +5866,7 @@ BOOLEAN NotifyPlayerWhenEnemyTakesControlOfImportantSector( INT16 sSectorX, INT1 } // get the strategic sector value - sSector = sSectorX + MAP_WORLD_X * sSectorY; + sSector = CALCULATE_STRATEGIC_INDEX(sSectorX, sSectorY); if( StrategicMap[ sSector ].bNameId == BLANK_SECTOR ) { @@ -5900,7 +5900,7 @@ void NotifyPlayerOfInvasionByEnemyForces( INT16 sSectorX, INT16 sSectorY, INT8 b } // grab sector value - sSector = sSectorX + MAP_WORLD_X * sSectorY; + sSector = CALCULATE_STRATEGIC_INDEX( sSectorX, sSectorY ); if( StrategicMap[ sSector ].fEnemyControlled == TRUE ) { diff --git a/Strategic/Meanwhile.cpp b/Strategic/Meanwhile.cpp index 932334f3..68621df2 100644 --- a/Strategic/Meanwhile.cpp +++ b/Strategic/Meanwhile.cpp @@ -1332,7 +1332,7 @@ void HandleFirstBattleEndingWhileInTown( INT16 sSectorX, INT16 sSectorY, INT16 b // means player is leaving sector // grab sector value - sSector = sSectorX + sSectorY * MAP_WORLD_X; + sSector = CALCULATE_STRATEGIC_INDEX( sSectorX, sSectorY ); // get town name id bTownId = StrategicMap[ sSector ].bNameId; diff --git a/Strategic/Merc Contract.cpp b/Strategic/Merc Contract.cpp index e2218834..c6698792 100644 --- a/Strategic/Merc Contract.cpp +++ b/Strategic/Merc Contract.cpp @@ -1209,7 +1209,7 @@ void NotifyPlayerOfMercDepartureAndPromptEquipmentPlacement( SOLDIERTYPE *pSoldi fInSector = TRUE; } // check if drassen controlled - else if( StrategicMap[ ( AIRPORT_X + ( MAP_WORLD_X * AIRPORT_Y ) ) ].fEnemyControlled == FALSE ) + else if( StrategicMap[CALCULATE_STRATEGIC_INDEX( AIRPORT_X, AIRPORT_Y )].fEnemyControlled == FALSE ) { GetSectorIDString( AIRPORT_X, AIRPORT_Y, 0, zDropOffString, FALSE ); @@ -1348,7 +1348,7 @@ void MercDepartEquipmentBoxCallBack( UINT8 bExitValue ) else { // no - if( StrategicMap[ AIRPORT_X + ( AIRPORT_Y * MAP_WORLD_X ) ].fEnemyControlled == FALSE ) + if( StrategicMap[CALCULATE_STRATEGIC_INDEX( AIRPORT_X, AIRPORT_Y )].fEnemyControlled == FALSE ) { HandleMercLeavingEquipmentInDrassen( pLeaveSoldier->ubID ); } diff --git a/Strategic/MilitiaSquads.cpp b/Strategic/MilitiaSquads.cpp index 973549a4..a721c53f 100644 --- a/Strategic/MilitiaSquads.cpp +++ b/Strategic/MilitiaSquads.cpp @@ -1053,11 +1053,13 @@ void MilitiaMovementOrder(UINT8 sector) INT16 sX = SECTORX(sector); INT16 sY = SECTORY(sector); + int strategicsector = CALCULATE_STRATEGIC_INDEX( sX, sY ); + // if we are in gamescreen and a battle is going on, and this is the sector that militia moves from, don't move them. Suddenly disappearing would be... awkward if ( guiCurrentScreen == GAME_SCREEN && gTacticalStatus.uiFlags & INCOMBAT && gWorldSectorX == sX && gWorldSectorY == sY && !gbWorldSectorZ ) { // remove all movement flags - StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags &= ~MILITIA_MOVE_ALLDIRS; + StrategicMap[strategicsector].usFlags &= ~MILITIA_MOVE_ALLDIRS; return; } @@ -1067,24 +1069,24 @@ void MilitiaMovementOrder(UINT8 sector) ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, gpStrategicString[STR_MILITIAMOVEMENT_NO_STAFF_ABORT] ); // remove all movement flags - StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags &= ~MILITIA_MOVE_ALLDIRS; + StrategicMap[strategicsector].usFlags &= ~MILITIA_MOVE_ALLDIRS; return; } INT16 targetX = sX; INT16 targetY = sY; - if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_NORTH ) + if ( StrategicMap[strategicsector].usFlags & MILITIA_MOVE_NORTH ) --targetY; - else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_WEST ) + else if ( StrategicMap[strategicsector].usFlags & MILITIA_MOVE_WEST ) --targetX; - else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_EAST ) + else if ( StrategicMap[strategicsector].usFlags & MILITIA_MOVE_EAST ) ++targetX; - else if ( StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags & MILITIA_MOVE_SOUTH ) + else if ( StrategicMap[strategicsector].usFlags & MILITIA_MOVE_SOUTH ) ++targetY; // remove all movement flags - StrategicMap[ sX + ( sY * MAP_WORLD_X ) ].usFlags &= ~MILITIA_MOVE_ALLDIRS; + StrategicMap[strategicsector].usFlags &= ~MILITIA_MOVE_ALLDIRS; UINT8 targetsector = SECTOR(targetX, targetY); diff --git a/Strategic/Player Command.cpp b/Strategic/Player Command.cpp index 4852eb70..b5f3e892 100644 --- a/Strategic/Player Command.cpp +++ b/Strategic/Player Command.cpp @@ -219,7 +219,7 @@ BOOLEAN SetThisSectorAsPlayerControlled( INT16 sMapX, INT16 sMapY, INT8 bMapZ, B if( bMapZ == 0 ) { - usMapSector = sMapX + ( sMapY * MAP_WORLD_X ); + usMapSector = CALCULATE_STRATEGIC_INDEX(sMapX, sMapY); /* // if enemies formerly controlled this sector @@ -465,7 +465,7 @@ BOOLEAN SetThisSectorAsEnemyControlled( INT16 sMapX, INT16 sMapY, INT8 bMapZ, BO if( bMapZ == 0 ) { - usMapSector = sMapX + ( sMapY * MAP_WORLD_X ); + usMapSector = CALCULATE_STRATEGIC_INDEX(sMapX, sMapY); fWasPlayerControlled = !StrategicMap[ usMapSector ].fEnemyControlled; @@ -586,7 +586,7 @@ void ClearMapControlledFlags( void ) { for( iCounterB = 1; iCounterB < MAP_WORLD_Y - 1; iCounterB++ ) { - usMapSector = iCounterA + ( iCounterB * MAP_WORLD_X ); + usMapSector = CALCULATE_STRATEGIC_INDEX(iCounterA, iCounterB); StrategicMap[ usMapSector ].fEnemyControlled = FALSE; SectorInfo[ SECTOR( iCounterA, iCounterB ) ].fPlayer[ 0 ] = TRUE; } diff --git a/Strategic/Quests.cpp b/Strategic/Quests.cpp index 6eb78438..b0db2ec8 100644 --- a/Strategic/Quests.cpp +++ b/Strategic/Quests.cpp @@ -1233,31 +1233,31 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID ) gubFact[usFact] = SpokenToHeadMiner( MINE_DRASSEN ); break; case FACT_PLAYER_IN_CONTROLLED_DRASSEN_MINE: - gubFact[usFact] = ( GetIdOfMineForSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == MINE_DRASSEN && !(StrategicMap[ gWorldSectorX + MAP_WORLD_X * gWorldSectorY ].fEnemyControlled) ); + gubFact[usFact] = ( GetIdOfMineForSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == MINE_DRASSEN && !(StrategicMap[CALCULATE_STRATEGIC_INDEX(gWorldSectorX, gWorldSectorY)].fEnemyControlled) ); break; case FACT_PLAYER_SPOKE_TO_CAMBRIA_MINER: gubFact[usFact] = SpokenToHeadMiner( MINE_CAMBRIA ); break; case FACT_PLAYER_IN_CONTROLLED_CAMBRIA_MINE: - gubFact[usFact] = ( GetIdOfMineForSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == MINE_CAMBRIA && !(StrategicMap[ gWorldSectorX + MAP_WORLD_X * gWorldSectorY ].fEnemyControlled) ); + gubFact[usFact] = ( GetIdOfMineForSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == MINE_CAMBRIA && !(StrategicMap[CALCULATE_STRATEGIC_INDEX( gWorldSectorX, gWorldSectorY )].fEnemyControlled) ); break; case FACT_PLAYER_SPOKE_TO_CHITZENA_MINER: gubFact[usFact] = SpokenToHeadMiner( MINE_CHITZENA ); break; case FACT_PLAYER_IN_CONTROLLED_CHITZENA_MINE: - gubFact[usFact] = ( GetIdOfMineForSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == MINE_CHITZENA && !(StrategicMap[ gWorldSectorX + MAP_WORLD_X * gWorldSectorY ].fEnemyControlled) ); + gubFact[usFact] = ( GetIdOfMineForSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == MINE_CHITZENA && !(StrategicMap[CALCULATE_STRATEGIC_INDEX( gWorldSectorX, gWorldSectorY )].fEnemyControlled) ); break; case FACT_PLAYER_SPOKE_TO_ALMA_MINER: gubFact[usFact] = SpokenToHeadMiner( MINE_ALMA ); break; case FACT_PLAYER_IN_CONTROLLED_ALMA_MINE: - gubFact[usFact] = ( GetIdOfMineForSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == MINE_ALMA && !(StrategicMap[ gWorldSectorX + MAP_WORLD_X * gWorldSectorY ].fEnemyControlled) ); + gubFact[usFact] = ( GetIdOfMineForSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == MINE_ALMA && !(StrategicMap[CALCULATE_STRATEGIC_INDEX( gWorldSectorX, gWorldSectorY )].fEnemyControlled) ); break; case FACT_PLAYER_SPOKE_TO_GRUMM_MINER: gubFact[usFact] = SpokenToHeadMiner( MINE_GRUMM ); break; case FACT_PLAYER_IN_CONTROLLED_GRUMM_MINE: - gubFact[usFact] = ( GetIdOfMineForSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == MINE_GRUMM && !(StrategicMap[ gWorldSectorX + MAP_WORLD_X * gWorldSectorY ].fEnemyControlled) ); + gubFact[usFact] = ( GetIdOfMineForSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == MINE_GRUMM && !(StrategicMap[CALCULATE_STRATEGIC_INDEX( gWorldSectorX, gWorldSectorY )].fEnemyControlled) ); break; case FACT_ENOUGH_LOYALTY_TO_TRAIN_MILITIA: diff --git a/Strategic/Strategic AI.cpp b/Strategic/Strategic AI.cpp index 1957f6c5..5ff79593 100644 --- a/Strategic/Strategic AI.cpp +++ b/Strategic/Strategic AI.cpp @@ -2253,9 +2253,10 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Strategic5"); if( IsThisSectorASAMSector( pGroup->ubSectorX, pGroup->ubSectorY, 0 ) ) { - StrategicMap[ pGroup->ubSectorX + pGroup->ubSectorY * MAP_WORLD_X ].bSAMCondition = 100; - StrategicMap[ pGroup->ubSectorX + pGroup->ubSectorY * MAP_WORLD_X ].sSamHackStatus = 100; - StrategicMap[ pGroup->ubSectorX + pGroup->ubSectorY * MAP_WORLD_X ].usFlags &= ~SAMSITE_REPAIR_ORDERED; + int stratsector = CALCULATE_STRATEGIC_INDEX( pGroup->ubSectorX, pGroup->ubSectorY ); + StrategicMap[stratsector].bSAMCondition = 100; + StrategicMap[stratsector].sSamHackStatus = 100; + StrategicMap[stratsector].usFlags &= ~SAMSITE_REPAIR_ORDERED; UpdateSAMDoneRepair( pGroup->ubSectorX, pGroup->ubSectorY, 0 ); } @@ -5918,7 +5919,7 @@ void StrategicHandleQueenLosingControlOfSector( INT16 sSectorX, INT16 sSectorY, Ensure_RepairedGarrisonGroup( &gGarrisonGroup, &giGarrisonArraySize ); /* added NULL fix, 2007-03-03, Sgt. Kolja */ - if( StrategicMap[ sSectorX + sSectorY * MAP_WORLD_X ].fEnemyControlled ) + if( StrategicMap[CALCULATE_STRATEGIC_INDEX(sSectorX, sSectorY)].fEnemyControlled ) { //If the sector doesn't belong to the player, then we shouldn't be calling this function! SAIReportError( L"StrategicHandleQueenLosingControlOfSector() was called for a sector that is internally considered to be enemy controlled." ); diff --git a/Strategic/Strategic Mines.cpp b/Strategic/Strategic Mines.cpp index 03d7e8f2..2788674b 100644 --- a/Strategic/Strategic Mines.cpp +++ b/Strategic/Strategic Mines.cpp @@ -857,7 +857,7 @@ INT16 GetMineSectorForTown( INT8 bTownId ) if( gMineStatus[ ubMineIndex ].bAssociatedTown == bTownId ) { //sMineSector = gMineLocation[ ubMineIndex ].sSectorX + ( gMineLocation[ ubMineIndex ].sSectorY * MAP_WORLD_X ); - sMineSector = gMineStatus[ ubMineIndex ].sSectorX + ( gMineStatus[ ubMineIndex ].sSectorY * MAP_WORLD_X ); + sMineSector = CALCULATE_STRATEGIC_INDEX(gMineStatus[ ubMineIndex ].sSectorX, gMineStatus[ ubMineIndex ].sSectorY ); break; } } @@ -888,7 +888,7 @@ BOOLEAN PlayerControlsMine(INT8 bMineIndex) { // a value of TRUE is from the enemy's point of view //if (StrategicMap[( gMineLocation[ bMineIndex ].sSectorX ) + ( MAP_WORLD_X * ( gMineLocation[ bMineIndex ].sSectorY ) )].fEnemyControlled == TRUE ) - if (StrategicMap[( gMineStatus[ bMineIndex ].sSectorX ) + ( MAP_WORLD_X * ( gMineStatus[ bMineIndex ].sSectorY ) )].fEnemyControlled == TRUE ) + if (StrategicMap[CALCULATE_STRATEGIC_INDEX( gMineStatus[bMineIndex].sSectorX, gMineStatus[bMineIndex].sSectorY )].fEnemyControlled == TRUE ) return(FALSE); else { diff --git a/Strategic/Strategic Movement.cpp b/Strategic/Strategic Movement.cpp index aa398d93..a3589d29 100644 --- a/Strategic/Strategic Movement.cpp +++ b/Strategic/Strategic Movement.cpp @@ -5691,7 +5691,7 @@ BOOLEAN HandlePlayerGroupEnteringSectorToCheckForNPCsOfNote( GROUP *pGroup ) } // get the strategic sector value - sStrategicSector = sSectorX + MAP_WORLD_X * sSectorY; + sStrategicSector = CALCULATE_STRATEGIC_INDEX(sSectorX, sSectorY); #ifdef JA2UB // ATE: if this is a custom map, return Ja25 UB if ( SectorInfo[ SECTOR( sSectorY, sSectorX ) ].fCustomSector ) diff --git a/Strategic/Strategic Pathing.cpp b/Strategic/Strategic Pathing.cpp index 5451f1f1..d5315307 100644 --- a/Strategic/Strategic Pathing.cpp +++ b/Strategic/Strategic Pathing.cpp @@ -920,7 +920,7 @@ PathStPtr ClearStrategicPathListAfterThisSector( PathStPtr pHeadOfPath, INT16 sX } // get sector value - sSector = sX + ( sY * MAP_WORLD_X ); + sSector = CALCULATE_STRATEGIC_INDEX(sX, sY ); // go to end of list pNode = MoveToEndOfPathList( pNode ); @@ -1016,7 +1016,7 @@ PathStPtr ClearStrategicPathListBeforeThisSector( PathStPtr pHeadOfPath, INT16 s } // get sector value - sSector = sX + ( sY * MAP_WORLD_X ); + sSector = CALCULATE_STRATEGIC_INDEX(sX, sY); // go to end of list pNode = MoveToBeginningOfPathList( pNode ); @@ -1219,7 +1219,7 @@ PathStPtr RemoveSectorFromStrategicPathList( PathStPtr pList , INT16 sX, INT16 s PathStPtr pPastNode = pList; // get sector value - sSector = sX + ( sY * MAP_WORLD_X ); + sSector = CALCULATE_STRATEGIC_INDEX( sX, sY ); // check if there is a valid list if( pNode == NULL ) @@ -1270,10 +1270,8 @@ PathStPtr RemoveSectorFromStrategicPathList( PathStPtr pList , INT16 sX, INT16 s INT16 GetLastSectorIdInCharactersPath( SOLDIERTYPE *pCharacter ) { // will return the last sector of the current path, or the current sector if there's no path - INT16 sLastSector = ( pCharacter->sSectorX ) + ( pCharacter->sSectorY ) * ( MAP_WORLD_X ); - PathStPtr pNode = NULL; - - pNode = GetSoldierMercPathPtr( pCharacter ); + INT16 sLastSector = CALCULATE_STRATEGIC_INDEX( pCharacter->sSectorX, pCharacter->sSectorY ); + PathStPtr pNode = GetSoldierMercPathPtr( pCharacter ); while( pNode ) { @@ -1301,7 +1299,7 @@ INT16 GetLastSectorIdInVehiclePath( INT32 iId ) } // get current last sector - sLastSector = ( pVehicleList[ iId ].sSectorX ) + ( pVehicleList[ iId ].sSectorY * MAP_WORLD_X ); + sLastSector = CALCULATE_STRATEGIC_INDEX( pVehicleList[ iId ].sSectorX, pVehicleList[ iId ].sSectorY ); pNode = pVehicleList[ iId ].pMercPath; diff --git a/Strategic/Strategic Town Loyalty.cpp b/Strategic/Strategic Town Loyalty.cpp index 903b7a0c..9ff88927 100644 --- a/Strategic/Strategic Town Loyalty.cpp +++ b/Strategic/Strategic Town Loyalty.cpp @@ -911,7 +911,7 @@ void HandleMurderOfCivilian( SOLDIERTYPE *pSoldier, BOOLEAN fIntentional ) iLoyaltyChange *= MULTIPLIER_FOR_MURDER_BY_MONSTER; // check whose sector this is - if( StrategicMap[( pSoldier->sSectorX ) + ( MAP_WORLD_X * ( pSoldier->sSectorY ) )].fEnemyControlled == TRUE ) + if( StrategicMap[CALCULATE_STRATEGIC_INDEX( pSoldier->sSectorX, pSoldier->sSectorY )].fEnemyControlled == TRUE ) { // enemy controlled sector - gain loyalty fIncrement = TRUE; @@ -1084,7 +1084,7 @@ void HandleLoyaltyForDemolitionOfBuilding( SOLDIERTYPE *pSoldier, INT16 sPointsD // penalize the side that should have stopped it - if( StrategicMap[ pSoldier->sSectorX + pSoldier->sSectorY * MAP_WORLD_X ].fEnemyControlled == TRUE ) + if( StrategicMap[CALCULATE_STRATEGIC_INDEX( pSoldier->sSectorX, pSoldier->sSectorY )].fEnemyControlled == TRUE ) { // enemy should have prevented it, let them suffer a little IncrementTownLoyalty( bTownId, sPolicingLoyalty ); @@ -1243,7 +1243,7 @@ void BuildListOfTownSectors( void ) { for( iCounterY = 0; iCounterY < MAP_WORLD_Y; iCounterY++ ) { - usSector = iCounterX + iCounterY * MAP_WORLD_X; + usSector = CALCULATE_STRATEGIC_INDEX( iCounterX, iCounterY ); if( ( StrategicMap[ usSector ].bNameId >= FIRST_TOWN ) && ( StrategicMap[ usSector ].bNameId < NUM_TOWNS ) ) { @@ -1745,7 +1745,7 @@ void AffectAllTownsLoyaltyByDistanceFrom( INT32 iLoyaltyChange, INT16 sSectorX, iShortestDistance[ bTownId ] = 999999; } - sEventSector = sSectorX + ( MAP_WORLD_X * sSectorY ); + sEventSector = CALCULATE_STRATEGIC_INDEX( sSectorX, sSectorY ); // need a temporary group create to use for laying down distance paths ubTempGroupId = CreateNewPlayerGroupDepartingFromSector( (UINT8) sSectorX, (UINT8) sSectorY ); @@ -1861,7 +1861,7 @@ void AffectClosestTownLoyaltyByDistanceFrom( INT32 iLoyaltyChange, INT16 sSector iShortestDistance[bTownId] = 999999; } - sEventSector = sSectorX + ( MAP_WORLD_X * sSectorY ); + sEventSector = CALCULATE_STRATEGIC_INDEX( sSectorX, sSectorY ); // need a temporary group create to use for laying down distance paths ubTempGroupId = CreateNewPlayerGroupDepartingFromSector( (UINT8)sSectorX, (UINT8)sSectorY ); diff --git a/Strategic/Town Militia.cpp b/Strategic/Town Militia.cpp index 787543bb..4d73763b 100644 --- a/Strategic/Town Militia.cpp +++ b/Strategic/Town Militia.cpp @@ -117,7 +117,7 @@ void VerifyTownTrainingIsPaidFor( void ); BOOLEAN TownMilitiaTrainingPromotion( INT16 sMapX, INT16 sMapY, UINT8& arusPromotedTo ) { INT16 sNeighbourX, sNeighbourY; - UINT8 ubTownId = StrategicMap[sMapX + sMapY * MAP_WORLD_X].bNameId; + UINT8 ubTownId = StrategicMap[CALCULATE_STRATEGIC_INDEX( sMapX, sMapY )].bNameId; // alrighty, then. We'll have to *promote* guys instead. @@ -274,7 +274,7 @@ void TownMilitiaTrainingCompleted( SOLDIERTYPE *pTrainer, INT16 sMapX, INT16 sMa DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia1"); // get town index - ubTownId = StrategicMap[ sMapX + sMapY * MAP_WORLD_X ].bNameId; + ubTownId = StrategicMap[CALCULATE_STRATEGIC_INDEX( sMapX, sMapY )].bNameId; if( ubTownId == BLANK_SECTOR ) { @@ -752,7 +752,7 @@ BOOLEAN SectorOursAndPeaceful( INT16 sMapX, INT16 sMapY, INT8 bMapZ ) } // if sector is controlled by enemies, it's not ours (duh!) - if( !bMapZ && StrategicMap[ sMapX + sMapY * MAP_WORLD_X ].fEnemyControlled == TRUE ) + if( !bMapZ && StrategicMap[CALCULATE_STRATEGIC_INDEX( sMapX, sMapY )].fEnemyControlled == TRUE ) { return FALSE; } @@ -1143,7 +1143,7 @@ BOOLEAN CanSomeoneNearbyScoutThisSector( INT16 sSectorX, INT16 sSectorY, BOOLEAN return TRUE; // get the sector value - sSector = sSectorX + sSectorY * MAP_WORLD_X; + sSector = CALCULATE_STRATEGIC_INDEX( sSectorX, sSectorY ); for( sCounterA = sSectorX - ubScoutingRange; (sCounterA <= sSectorX + ubScoutingRange && !bScout); ++sCounterA ) { @@ -1425,7 +1425,7 @@ void AddSectorForSoldierToListOfSectorsThatCompletedMilitiaTraining( SOLDIERTYPE pCurrentSoldier = &Menptr[ giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ] ]; // get the current sector value - sCurrentSector = pCurrentSoldier->sSectorX + pCurrentSoldier->sSectorY * MAP_WORLD_X; + sCurrentSector = CALCULATE_STRATEGIC_INDEX( pCurrentSoldier->sSectorX, pCurrentSoldier->sSectorY ); // is the merc's sector already in the list? // silversurfer: Doesn't matter if it's the same sector. We can have different assignments in the same sector so add the soldier to the list if he's on a different assignment. diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 40fde98b..f3ad4685 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -6517,7 +6517,7 @@ UINT32 HandleMapUI( ) break; // check if last sector in character's path is same as where mouse is - if( GetLastSectorIdInCharactersPath( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) != ( sMapX + ( sMapY * MAP_WORLD_X ) ) ) + if( GetLastSectorIdInCharactersPath( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) != CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) ) { sX = ( GetLastSectorIdInCharactersPath( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) % MAP_WORLD_X ); sY = ( GetLastSectorIdInCharactersPath( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) / MAP_WORLD_X ); @@ -12490,7 +12490,7 @@ BOOLEAN CheckIfClickOnLastSectorInPath( INT16 sX, INT16 sY ) if( fPlotForHelicopter ) { // helicopter route confirmed - if( sX + ( sY * MAP_WORLD_X ) == GetLastSectorOfHelicoptersPath( ) ) + if ( CALCULATE_STRATEGIC_INDEX( sX, sY ) == GetLastSectorOfHelicoptersPath( ) ) { // WANNE: This check was added in revision 4724, to prevent the loophole for helicopter hovering forever // But is seems, it also causes the bug, that skyrider is stuck in the sector forever (bugzilla #562) @@ -12515,7 +12515,7 @@ BOOLEAN CheckIfClickOnLastSectorInPath( INT16 sX, INT16 sY ) else if ( fPlotForMilitia ) { // helicopter route confirmed - if ( gMilitiaPath[gMilitiaGroupId].sGroupid > -1 && sX + (sY * MAP_WORLD_X) == GetLastSectorOfMilitiaPath( ) ) + if ( gMilitiaPath[gMilitiaGroupId].sGroupid > -1 && CALCULATE_STRATEGIC_INDEX(sX, sY) == GetLastSectorOfMilitiaPath( ) ) { // rebuild waypoints ppMovePath = &( gMilitiaPath[gMilitiaGroupId].path ); @@ -12552,7 +12552,7 @@ BOOLEAN CheckIfClickOnLastSectorInPath( INT16 sX, INT16 sY ) return( FALSE ); } - if( sX + ( sY * MAP_WORLD_X ) == GetLastSectorIdInCharactersPath( ( &Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ] ) ) ) + if ( CALCULATE_STRATEGIC_INDEX( sX, sY ) == GetLastSectorIdInCharactersPath( ( &Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ] ) ) ) { // clicked on last sector, reset plotting mode @@ -12697,7 +12697,7 @@ void UpdateCursorIfInLastSector( void ) // check for helicopter if ( fPlotForHelicopter ) { - if ( sMapX + (sMapY * MAP_WORLD_X) == GetLastSectorOfHelicoptersPath( ) ) + if ( CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) == GetLastSectorOfHelicoptersPath( ) ) { // set cursor to checkmark ChangeMapScreenMaskCursor( CURSOR_CHECKMARK ); @@ -12719,7 +12719,7 @@ void UpdateCursorIfInLastSector( void ) // check for militia if ( fPlotForMilitia ) { - if ( sMapX + (sMapY * MAP_WORLD_X) == GetLastSectorOfMilitiaPath( ) ) + if ( CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) == GetLastSectorOfMilitiaPath( ) ) { // set cursor to checkmark ChangeMapScreenMaskCursor( CURSOR_CHECKMARK ); @@ -12741,7 +12741,7 @@ void UpdateCursorIfInLastSector( void ) if ( GetSelectedDestChar() != -1 ) { //c heck if we are in the last sector of the characters path? - if ( sMapX + (sMapY * MAP_WORLD_X) == GetLastSectorIdInCharactersPath( (&Menptr[gCharactersList[GetSelectedDestChar()].usSolID]) ) ) + if ( CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) == GetLastSectorIdInCharactersPath( (&Menptr[gCharactersList[GetSelectedDestChar()].usSolID]) ) ) { // set cursor to checkmark ChangeMapScreenMaskCursor( CURSOR_CHECKMARK ); @@ -16615,7 +16615,7 @@ BOOLEAN RequestGiveMilitiaNewDestination( void ) gNewMilitiaGroupId = gMilitiaPath[gMilitiaGroupId].sGroupid; // yes, we intentionally use a different sector number here - gMilitiaPlotStartSector = (INT16)(sSelMapX + sSelMapY*(MAP_WORLD_X)); + gMilitiaPlotStartSector = CALCULATE_STRATEGIC_INDEX( sSelMapX, sSelMapY ); } } } @@ -16753,7 +16753,7 @@ BOOLEAN MilitiaPlotStart( ) gNewMilitiaGroupId = pGroup->ubGroupID; // yes, we intentionally use a different sector number here - gMilitiaPlotStartSector = (INT16)(sSelMapX + sSelMapY*(MAP_WORLD_X)); + gMilitiaPlotStartSector = CALCULATE_STRATEGIC_INDEX( sSelMapX, sSelMapY ); gMilitiaPath[gMilitiaGroupId].path->uiSectorId = gMilitiaPlotStartSector; diff --git a/Strategic/strategicmap.cpp b/Strategic/strategicmap.cpp index 09cf361c..742028fa 100644 --- a/Strategic/strategicmap.cpp +++ b/Strategic/strategicmap.cpp @@ -1972,8 +1972,8 @@ void InitializeSAMSites( void ) // all SAM sites start game in perfect working condition for ( UINT32 cnt = 0; cnt < NUMBER_OF_SAMS; ++cnt ) { - StrategicMap[gpSamSectorX[cnt] + (MAP_WORLD_X * gpSamSectorY[cnt])].bSAMCondition = 100; - StrategicMap[gpSamSectorX[cnt] + (MAP_WORLD_X * gpSamSectorY[cnt])].sSamHackStatus = 100; + StrategicMap[CALCULATE_STRATEGIC_INDEX( gpSamSectorX[cnt], gpSamSectorY[cnt] )].bSAMCondition = 100; + StrategicMap[CALCULATE_STRATEGIC_INDEX( gpSamSectorX[cnt], gpSamSectorY[cnt] )].sSamHackStatus = 100; } // Flugente, bizarrely enough, this structure is not NULLED when starting a new campaign. For now, we NULL the flagmask to clear at least that @@ -5560,7 +5560,7 @@ BOOLEAN LoadStrategicInfoFromSavedFile( HWFILE hFile ) // all SAM sites start game in perfect working condition for ( UINT32 cnt = 0; cnt < NUMBER_OF_SAMS; ++cnt ) { - StrategicMap[gpSamSectorX[cnt] + (MAP_WORLD_X * gpSamSectorY[cnt])].sSamHackStatus = 100; + StrategicMap[CALCULATE_STRATEGIC_INDEX( gpSamSectorX[cnt], gpSamSectorY[cnt] )].sSamHackStatus = 100; } } diff --git a/Tactical/Merc Hiring.cpp b/Tactical/Merc Hiring.cpp index aba368b0..5c5b4b79 100644 --- a/Tactical/Merc Hiring.cpp +++ b/Tactical/Merc Hiring.cpp @@ -842,7 +842,7 @@ void CheckForValidArrivalSector( ) CHAR16 zShortTownIDString1[ 50 ]; CHAR16 zShortTownIDString2[ 50 ]; - sSectorGridNo = gsMercArriveSectorX + ( MAP_WORLD_X * gsMercArriveSectorY ); + sSectorGridNo = CALCULATE_STRATEGIC_INDEX( gsMercArriveSectorX, gsMercArriveSectorY ); // Check if valid... if ( !StrategicMap[ sSectorGridNo ].fEnemyControlled ) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 54d191bf..273e978e 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -6844,7 +6844,7 @@ BOOLEAN GetPlayerControlledPrisonList( std::vector& arSectorIDVector ) for(INT16 sY = 1; sY < MAP_WORLD_Y - 1; ++sY ) { // if sector is controlled by enemies, it's not ours (duh!) - if ( StrategicMap[sX + sY * MAP_WORLD_X].fEnemyControlled ) + if ( StrategicMap[CALCULATE_STRATEGIC_INDEX(sX, sY)].fEnemyControlled ) continue; // only sectors where there are no ongoing battles or even enemy garrisons are valid for our cause diff --git a/Tactical/Soldier Init List.cpp b/Tactical/Soldier Init List.cpp index 80f715bd..93b65a14 100644 --- a/Tactical/Soldier Init List.cpp +++ b/Tactical/Soldier Init List.cpp @@ -749,7 +749,7 @@ BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *curr, GROUP *pGroup = NULL ) { // Tixa prison, once liberated, should not have any civs without profiles unless // they are kids - if( !StrategicMap[ TIXA_SECTOR_X + TIXA_SECTOR_Y * MAP_WORLD_X ].fEnemyControlled && tempDetailedPlacement.ubProfile == NO_PROFILE && tempDetailedPlacement.ubBodyType != HATKIDCIV && tempDetailedPlacement.ubBodyType != KIDCIV ) + if( !StrategicMap[CALCULATE_STRATEGIC_INDEX(TIXA_SECTOR_X, TIXA_SECTOR_Y)].fEnemyControlled && tempDetailedPlacement.ubProfile == NO_PROFILE && tempDetailedPlacement.ubBodyType != HATKIDCIV && tempDetailedPlacement.ubBodyType != KIDCIV ) { // not there return( TRUE );