diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 75de1b8e..2a4aaec5 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -632,7 +632,7 @@ BOOLEAN ValidTrainingPartnerInSameSectorOnAssignmentFound( SOLDIERTYPE *pSoldier extern void AddSectorForSoldierToListOfSectorsThatCompletedMilitiaTraining( SOLDIERTYPE *pSoldier ); -extern BOOLEAN CanChangeSleepStatusForCharSlot( INT8 bCharNumber ); +extern BOOLEAN CanChangeSleepStatusForCharSlot( INT16 bCharNumber ); // only 2 trainers are allowed per sector, so this function counts the # in a guy's sector // HEADROCK HAM 3.6: Now takes an extra argument for Militia Type @@ -3106,7 +3106,7 @@ void VerifyTownTrainingIsPaidFor( void ) continue; } - pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->bActive && ( pSoldier->bAssignment == TRAIN_TOWN ) ) { @@ -9643,7 +9643,8 @@ void CreateDestroyMouseRegionsForAssignmentMenu( void ) return; } - if( ( Menptr[gCharactersList[bSelectedAssignChar].usSolID].stats.bLife == 0 ) || ( Menptr[gCharactersList[bSelectedAssignChar].usSolID].bAssignment == ASSIGNMENT_POW ) ) + + if( ( gCharactersList[bSelectedAssignChar].usSolID->stats.bLife == 0 ) || ( gCharactersList[bSelectedAssignChar].usSolID->bAssignment == ASSIGNMENT_POW ) ) { // dead guy handle menu stuff fShowRemoveMenu = fShowAssignmentMenu | fShowContractMenu; @@ -11114,7 +11115,7 @@ void DetermineWhichAssignmentMenusCanBeShown( void ) CreateDestroyMouseRegionForFacilityMenu(); CreateDestroyMouseRegionsForFacilityAssignmentMenu(); - if( ( ( Menptr[gCharactersList[ bSelectedInfoChar ].usSolID].stats.bLife == 0 )||( Menptr[gCharactersList[bSelectedInfoChar].usSolID].bAssignment == ASSIGNMENT_POW ) ) && ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) ) + if( ( ( gCharactersList[ bSelectedInfoChar ].usSolID->stats.bLife == 0 )||( gCharactersList[bSelectedInfoChar].usSolID->bAssignment == ASSIGNMENT_POW ) ) && ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) ) { // show basic assignment menu ShowBox( ghRemoveMercAssignBox ); @@ -11596,7 +11597,7 @@ void CreateDestroyMouseRegionsForContractMenu( void ) return; } - if( Menptr[gCharactersList[bSelectedContractChar].usSolID].stats.bLife == 0 ) + if( gCharactersList[bSelectedContractChar].usSolID->stats.bLife == 0 ) { // dead guy handle menu stuff @@ -12825,7 +12826,7 @@ void ContractMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) if ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) { - pSoldier = &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; } else { @@ -18406,7 +18407,7 @@ BOOLEAN HandleSelectedMercsBeingPutAsleep( BOOLEAN fWakeUp, BOOLEAN fDisplayWarn if( gCharactersList[ iCounter ].fValid ) { // get the soldier pointer - pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->bActive == FALSE ) { @@ -18807,7 +18808,7 @@ void SetAssignmentForList( INT8 bAssignment, INT8 bParam ) { if( gCharactersList[ bSelectedAssignChar ].fValid == TRUE ) { - pSelectedSoldier = &Menptr[ gCharactersList[ bSelectedAssignChar ].usSolID ]; + pSelectedSoldier = gCharactersList[ bSelectedAssignChar ].usSolID; } } @@ -18819,9 +18820,9 @@ void SetAssignmentForList( INT8 bAssignment, INT8 bParam ) if( ( gCharactersList[ iCounter ].fValid ) && ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) && ( iCounter != bSelectedAssignChar ) && - !(Menptr[ gCharactersList[ iCounter ].usSolID].flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + !(gCharactersList[ iCounter ].usSolID->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // assume it's NOT gonna work fItWorked = FALSE; @@ -19616,13 +19617,13 @@ SOLDIERTYPE *GetSelectedAssignSoldier( BOOLEAN fNullOK, BOOLEAN fReturnVehicleDr if( ( bSelectedAssignChar >= 0 ) && ( bSelectedAssignChar < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) && ( gCharactersList[ bSelectedAssignChar ].fValid ) ) { - pSoldier = &Menptr[ gCharactersList[ bSelectedAssignChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedAssignChar ].usSolID; } } else { // tactical version - pSoldier = &Menptr[ gusUIFullTargetID ]; + pSoldier = gusUIFullTargetID; } if ( !fNullOK ) @@ -20079,7 +20080,7 @@ BOOLEAN FindAnyAwakeTrainers( SOLDIERTYPE *pTrainee ) while(gCharactersList[ubCounter].fValid) { - pTrainer = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pTrainer = gCharactersList[ ubCounter ].usSolID; // Is trainer awake? if (pTrainer->bAssignment == TRAIN_TEAMMATE && pTrainer->bTrainStat == pTrainee->bTrainStat && @@ -20115,7 +20116,7 @@ BOOLEAN FindAnyAwakeTrainees( SOLDIERTYPE *pTrainer ) while(gCharactersList[ubCounter].fValid) { - pTrainee = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pTrainee = gCharactersList[ ubCounter ].usSolID; // Is trainee awake? if (pTrainee->bAssignment == TRAIN_BY_OTHER && pTrainee->bTrainStat == pTrainer->bTrainStat && @@ -21058,7 +21059,7 @@ INT8 CountFreeFacilitySlots( UINT8 sMapX, UINT8 sMapY, UINT8 ubFacilityType ) // Count number of people doing anything at this facility. while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character operating this facility? if( (UINT8)pSoldier->sFacilityTypeOperated == ubFacilityType && @@ -21101,7 +21102,7 @@ INT8 CountFreeFacilityAssignmentSlots( UINT8 sMapX, UINT8 sMapY, UINT8 ubFacilit // Count number of people doing this assignment at this facility. while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character operating this facility? if( (UINT8)pSoldier->sFacilityTypeOperated == ubFacilityType && @@ -21527,7 +21528,7 @@ void ResetAllExpensiveFacilityAssignments() while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character doing facility work? INT8 ubAssignmentIndex = GetSoldierFacilityAssignmentIndex( pSoldier ); diff --git a/Strategic/Facilities.cpp b/Strategic/Facilities.cpp index 52975d1a..9be31cf9 100644 --- a/Strategic/Facilities.cpp +++ b/Strategic/Facilities.cpp @@ -357,7 +357,7 @@ void UpdateStrategicDetectionLevel( ) // Run through list of player-characters while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character truly valid? if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && @@ -499,7 +499,7 @@ void UpdateSkyriderCostModifier() while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character truly valid? if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && @@ -562,7 +562,7 @@ void UpdateFacilityUsageCosts( ) while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character truly valid? if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && @@ -704,7 +704,7 @@ INT32 MineIncomeModifierFromFacility( UINT8 ubMine ) UINT8 ubCounter = 0; while (gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character truly valid? if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && @@ -1112,7 +1112,7 @@ void HandleHourlyRisks() while (gCharactersList[iCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // Is character truly valid? if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && @@ -1994,7 +1994,7 @@ INT32 GetTotalFacilityHourlyCosts( BOOLEAN fPositive ) // Run through list of player-characters while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character truly valid? if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && diff --git a/Strategic/Map Screen Interface Map Inventory.cpp b/Strategic/Map Screen Interface Map Inventory.cpp index a7fef9f1..cdfe41bd 100644 --- a/Strategic/Map Screen Interface Map Inventory.cpp +++ b/Strategic/Map Screen Interface Map Inventory.cpp @@ -683,9 +683,9 @@ BOOLEAN RenderItemInPoolSlot( INT32 iCurrentSlot, INT32 iFirstSlotOnPage ) // if the item is not reachable, or if the selected merc is not in the current sector // if( !( pInventoryPoolList[ iCurrentSlot + iFirstSlotOnPage ].usFlags & WORLD_ITEM_REACHABLE ) || - !(( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX == sSelMapX ) && - ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY == sSelMapY ) && - ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ == iCurrentMapSectorZ ) + !(( gCharactersList[ bSelectedInfoChar ].usSolID->sSectorX == sSelMapX ) && + ( gCharactersList[ bSelectedInfoChar ].usSolID->sSectorY == sSelMapY ) && + ( gCharactersList[ bSelectedInfoChar ].usSolID->bSectorZ == iCurrentMapSectorZ ) ) ) { //Shade the item, but only if it is an active item! @@ -1351,7 +1351,6 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) UINT16 usOldItemIndex, usNewItemIndex; INT32 iOldNumberOfObjects = 0; INT16 sDistanceFromObject = 0; - SOLDIERTYPE *pSoldier = NULL; CHAR16 sString[ 128 ]; extern OBJECTTYPE *gpItemDescObject; @@ -1370,11 +1369,16 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) { //CHRISL: Make it possible to right click and pull up stack popup and/or item description boxes WORLDITEM * twItem = &(pInventoryPoolList[ ( iCurrentInventoryPoolPage * MAP_INVENTORY_POOL_SLOT_COUNT ) + iCounter ]); - bool fValidPointer = false; + bool fValidPointer = false; + //CHRISL: Try to update InSector value so we don't have to "activate" a sector - if(MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->sSectorX == sSelMapX && MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->sSectorY == sSelMapY && MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->bSectorZ == iCurrentMapSectorZ && !MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->flags.fBetweenSectors) + SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID; + const auto x = pSelectedSoldier->sSectorX; + const auto y = pSelectedSoldier->sSectorY; + const auto z = pSelectedSoldier->bSectorZ; + if(x == sSelMapX && y == sSelMapY && z == iCurrentMapSectorZ && !pSelectedSoldier->flags.fBetweenSectors) { - MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->bInSector=TRUE; + pSelectedSoldier->bInSector = TRUE; } else { @@ -1388,7 +1392,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) } if ( !InSectorStackPopup( ) && !InItemStackPopup( ) /*&& !InItemDescriptionBox( ) */ && !InKeyRingPopup( ) && twItem->object.exists() == true && (bSelectedInfoChar != -1 && gCharactersList[bSelectedInfoChar].fValid) ) { - if(OK_CONTROL_MERC( MercPtrs[gCharactersList[bSelectedInfoChar].usSolID] )) + if(OK_CONTROL_MERC( pSelectedSoldier )) { //CHRISL: The old setup had a flaw I didn't consider. if, for some reason, the ItemSlotLimit = 0 // nothing might happen. Now we setup a flag to determine if our cursor is value for the item we're @@ -1474,7 +1478,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) } // HEADROCK HAM 5: Sector Inventory Item Desc Box no longer accessible during combat. - if( !CanPlayerUseSectorInventory( &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]) ) ) + if( !CanPlayerUseSectorInventory(pSelectedSoldier) ) { DoScreenIndependantMessageBox( New113HAMMessage[ 22 ], MSG_BOX_FLAG_OK, NULL ); return; @@ -1484,23 +1488,23 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) if ( _KeyDown(SHIFT) && gpItemPointer == NULL && Item[twItem->object.usItem].usItemClass == IC_GUN && (twItem->object)[0]->data.gun.ubGunShotsLeft && !ItemIsSingleShotRocketLauncher(twItem->object.usItem)) { EmptyWeaponMagazine( &twItem->object, &gItemPointer ); - InternalMAPBeginItemPointer( MercPtrs[gCharactersList[bSelectedInfoChar].usSolID] ); + InternalMAPBeginItemPointer( pSelectedSoldier ); } else - MAPInternalInitItemDescriptionBox( &twItem->object, 0, MercPtrs[gCharactersList[bSelectedInfoChar].usSolID] ); + MAPInternalInitItemDescriptionBox( &twItem->object, 0, pSelectedSoldier ); } } else if(fValidPointer) { // Sector Inventory Stack Popup no longer accessible during combat. - if( !CanPlayerUseSectorInventory( &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]) ) ) + if( !CanPlayerUseSectorInventory(pSelectedSoldier) ) { DoScreenIndependantMessageBox( New113HAMMessage[ 22 ], MSG_BOX_FLAG_OK, NULL ); return; } else { - InitSectorStackPopup( MercPtrs[gCharactersList[bSelectedInfoChar].usSolID], twItem, iCounter, xResOffset, yResOffset - 10, 261, ( SCREEN_HEIGHT - PLAYER_INFO_Y ) ); + InitSectorStackPopup( pSelectedSoldier, twItem, iCounter, xResOffset, yResOffset - 10, 261, ( SCREEN_HEIGHT - PLAYER_INFO_Y ) ); fTeamPanelDirty=TRUE; fInterfacePanelDirty = DIRTYLEVEL2; } @@ -1597,11 +1601,13 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) //if( fShowInventoryFlag ) { + SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID; + // not in sector? - if( ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX != sSelMapX ) || - ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY != sSelMapY ) || - ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ != iCurrentMapSectorZ ) || - ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].flags.fBetweenSectors ) ) + if( ( pSelectedSoldier->sSectorX != sSelMapX ) || + ( pSelectedSoldier->sSectorY != sSelMapY ) || + ( pSelectedSoldier->bSectorZ != iCurrentMapSectorZ ) || + ( pSelectedSoldier->flags.fBetweenSectors ) ) { if ( gpItemPointer == NULL ) { @@ -1633,13 +1639,13 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) } else { - swprintf( sString, pMapInventoryErrorString[ 2 ], Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].name ); + swprintf( sString, pMapInventoryErrorString[ 2 ], pSelectedSoldier->name ); DoMapMessageBox( MSG_BOX_BASIC_STYLE, sString, MAP_SCREEN, MSG_BOX_FLAG_OK, NULL ); } } else { - swprintf( sString, pMapInventoryErrorString[ 5 ], Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].name ); + swprintf( sString, pMapInventoryErrorString[ 5 ], pSelectedSoldier->name ); DoMapMessageBox( MSG_BOX_BASIC_STYLE, sString, MAP_SCREEN, MSG_BOX_FLAG_OK, NULL ); } return; @@ -1650,6 +1656,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) // If we do not have an item in hand, start moving it if ( gpItemPointer == NULL ) { + SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID; // Return if empty @@ -1658,7 +1665,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) // if in battle inform player they will have to do this in tactical // if( ( ( gTacticalStatus.fEnemyInSector ) ||( ( sSelMapX == gWorldSectorX ) && ( sSelMapY == gWorldSectorY ) && ( iCurrentMapSectorZ == gbWorldSectorZ ) && ( gTacticalStatus.uiFlags & INCOMBAT ) ) ) ) - if( !CanPlayerUseSectorInventory( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) ) + if( !CanPlayerUseSectorInventory(pSelectedSoldier) ) { DoMapMessageBox( MSG_BOX_BASIC_STYLE, pMapInventoryErrorString[ 3 ], MAP_SCREEN, MSG_BOX_FLAG_OK, NULL ); return; @@ -1673,14 +1680,13 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) if( ( sSelMapX == gWorldSectorX )&&( gWorldSectorY == sSelMapY ) &&(gbWorldSectorZ == iCurrentMapSectorZ ) ) { // notify - pSoldier = &( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ); - sDistanceFromObject = PythSpacesAway( sObjectSourceGridNo, pSoldier->sGridNo); + sDistanceFromObject = PythSpacesAway( sObjectSourceGridNo, pSelectedSoldier->sGridNo); /* if( sDistanceFromObject > MAX_DISTANCE_TO_PICKUP_ITEM ) { // see for the loaded sector if the merc is cloase enough? - swprintf( sString, pMapInventoryErrorString[ 0 ], Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].name ); + swprintf( sString, pMapInventoryErrorString[ 0 ], pSelectedSoldier->name ); DoMapMessageBox( MSG_BOX_BASIC_STYLE, sString, MAP_SCREEN, MSG_BOX_FLAG_OK, NULL ); return; } @@ -1718,10 +1724,11 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) } else {//we have an item on cursor + SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID; // if in battle inform player they will have to do this in tactical // if( ( gTacticalStatus.fEnemyInSector ) ||( ( sSelMapX == gWorldSectorX ) && ( sSelMapY == gWorldSectorY ) && ( iCurrentMapSectorZ == gbWorldSectorZ ) && ( gTacticalStatus.uiFlags & INCOMBAT ) ) ) - if( !CanPlayerUseSectorInventory( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) ) + if( !CanPlayerUseSectorInventory(pSelectedSoldier) ) { DoMapMessageBox( MSG_BOX_BASIC_STYLE, pMapInventoryErrorString[ 4 ], MAP_SCREEN, MSG_BOX_FLAG_OK, NULL ); return; @@ -1795,7 +1802,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) /* if ( fShowInventoryFlag && bSelectedInfoChar >= 0 ) { - ReevaluateItemHatches( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], FALSE ); + ReevaluateItemHatches( gCharactersList[ bSelectedInfoChar ].usSolID, FALSE ); } */ } @@ -2471,7 +2478,7 @@ void BeginInventoryPoolPtr( OBJECTTYPE *pInventorySlot ) if ( _KeyDown ( CTRL ))//MM: Pass item to selected merc. Delete if none selected. { - SOLDIERTYPE *pSoldier = &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; bool placedAllObjects = false; if(pSoldier->exists() == true) @@ -2575,7 +2582,7 @@ void BeginInventoryPoolPtr( OBJECTTYPE *pInventorySlot ) if ( fShowInventoryFlag && bSelectedInfoChar >= 0 ) { - ReevaluateItemHatches( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], FALSE ); + ReevaluateItemHatches( gCharactersList[ bSelectedInfoChar ].usSolID, FALSE ); fTeamPanelDirty = TRUE; } } @@ -2643,7 +2650,7 @@ void BeginInventoryPoolPtr( OBJECTTYPE *pInventorySlot ) if ( fShowInventoryFlag && bSelectedInfoChar >= 0 ) { - ReevaluateItemHatches( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], FALSE ); + ReevaluateItemHatches( gCharactersList[ bSelectedInfoChar ].usSolID, FALSE ); fTeamPanelDirty = TRUE; } } @@ -3015,7 +3022,7 @@ void TemplateNameInputCallBack(UINT8 ubResult) { if (ubResult == MSG_BOX_RETURN_OK && wcscmp(gszMsgBoxInputString, L"") > 0) { - SOLDIERTYPE* pSoldier = &Menptr[gCharactersList[bSelectedInfoChar].usSolID]; + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if (pSoldier) { WriteEquipmentTemplate(pSoldier, gszMsgBoxInputString); @@ -3047,7 +3054,7 @@ void MapInventoryWriteEquipmentTemplate(GUI_BUTTON *btn, INT32 reason) { if ( btn->uiFlags & (BUTTON_CLICKED_ON) ) { - SOLDIERTYPE* pSoldier = &Menptr[gCharactersList[bSelectedInfoChar].usSolID]; + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if ( pSoldier ) { DoMessageBox( MSG_BOX_BASIC_SMALL_BUTTONS, szGearTemplateText[0], guiCurrentScreen, MSG_BOX_FLAG_INPUTBOX, TemplateNameInputCallBack, NULL ); @@ -3072,7 +3079,7 @@ void MapInventoryReadEquipmentTemplate(GUI_BUTTON *btn, INT32 reason) { if ( btn->uiFlags & (BUTTON_CLICKED_ON) ) { - SOLDIERTYPE* pSoldier = &Menptr[gCharactersList[bSelectedInfoChar].usSolID]; + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if ( pSoldier && pSoldier->sSectorX == sSelMapX && pSoldier->sSectorY == sSelMapY && pSoldier->bSectorZ == iCurrentMapSectorZ && !pSoldier->flags.fBetweenSectors ) @@ -3525,11 +3532,12 @@ void HandleButtonStatesWhileMapInventoryActive( void ) } // Selected Merc is in sector? Or is in combat? - if(MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->sSectorX != sSelMapX || - MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->sSectorY != sSelMapY || - MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->bSectorZ != iCurrentMapSectorZ || - MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->flags.fBetweenSectors || - !CanPlayerUseSectorInventory( &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]) ) ) + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; + if( pSoldier->sSectorX != sSelMapX || + pSoldier->sSectorY != sSelMapY || + pSoldier->bSectorZ != iCurrentMapSectorZ || + pSoldier->flags.fBetweenSectors || + !CanPlayerUseSectorInventory( pSoldier ) ) { DisableButton( guiMapInvenSortButton[ 0 ] ); DisableButton( guiMapInvenSortButton[ 1 ] ); @@ -3640,7 +3648,7 @@ void HandleMouseInCompatableItemForMapSectorInventory( INT32 iCurrentSlot ) if( fShowInventoryFlag ) { //Soldier inventory is shown, highlight those items - pSoldier = &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; if( pSoldier ) { if( HandleCompatibleAmmoUIForMapScreen( pSoldier, iCurrentSlot + ( iCurrentInventoryPoolPage * MAP_INVENTORY_POOL_SLOT_COUNT ), TRUE, FALSE ) ) @@ -4815,7 +4823,7 @@ void SortSectorInventoryAmmo(bool useBoxes) OBJECTTYPE newCrate; int loopCount = 0; - SOLDIERTYPE * pSoldier = &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]); + SOLDIERTYPE * pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; AssertMsg( pSoldier != NULL, "Sector Inventory: Attempting ammo sort without valid selected soldier?" ); @@ -4957,7 +4965,7 @@ void SortSectorInventoryEjectAmmo() { OBJECTTYPE gTempObject; - SOLDIERTYPE * pSoldier = &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]); + SOLDIERTYPE * pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; for ( UINT32 uiLoop = 0; uiLoop < pInventoryPoolList.size(); uiLoop++ ) //for all items in sector { @@ -5006,7 +5014,7 @@ void SortSectorInventoryEmptyLBE() { // current item WORLDITEM * pInventoryItem = NULL; - SOLDIERTYPE * pSoldier = &(Menptr[gCharactersList[bSelectedInfoChar].usSolID]); + SOLDIERTYPE * pSoldier = gCharactersList[bSelectedInfoChar].usSolID; for (UINT32 uiLoop = 0; uiLoop < pInventoryPoolList.size(); uiLoop++) //for all items in sector { @@ -5081,7 +5089,7 @@ void SortSectorInventorySeparateAttachments() WORLDITEM * pInventoryItem = NULL; - SOLDIERTYPE * pSoldier = &(Menptr[gCharactersList[bSelectedInfoChar].usSolID]); + SOLDIERTYPE * pSoldier = gCharactersList[bSelectedInfoChar].usSolID; for (UINT32 uiLoop = 0; uiLoop < pInventoryPoolList.size(); uiLoop++) //for all items in sector { @@ -5154,7 +5162,7 @@ void SortSectorInventoryStackAndMerge(bool ammoOnly ) { OBJECTTYPE * StackObject; - SOLDIERTYPE * pSoldier = &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]); + SOLDIERTYPE * pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; for ( UINT32 uiLoop = 0; uiLoop < pInventoryPoolList.size(); uiLoop++ ) { diff --git a/Strategic/Map Screen Interface Map.cpp b/Strategic/Map Screen Interface Map.cpp index 31c577e9..41e11cda 100644 --- a/Strategic/Map Screen Interface Map.cpp +++ b/Strategic/Map Screen Interface Map.cpp @@ -1298,7 +1298,7 @@ INT32 ShowOnDutyTeam( INT16 sMapX, INT16 sMapY ) // run through list while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && ( pSoldier->sSectorX == sMapX) && @@ -1350,7 +1350,7 @@ INT32 ShowAssignedTeam(INT16 sMapX, INT16 sMapY, INT32 iCount) while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // given number of on duty members, find number of assigned chars // start at beginning of list, look for people who are in sector and assigned @@ -7126,7 +7126,7 @@ UINT8 NumActiveCharactersInSector( INT16 sSectorX, INT16 sSectorY, INT16 bSector { if( gCharactersList[ iCounter ].fValid ) { - pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->bActive && ( pSoldier->stats.bLife > 0 ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && ( pSoldier->bAssignment != IN_TRANSIT ) ) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 797b2cd7..eadc70bb 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -552,7 +552,7 @@ void ResetAssignmentsForMercsTrainingUnpaidSectorsInSelectedList( UINT8 ubMiliti continue; } - pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->bActive == FALSE ) { @@ -586,7 +586,7 @@ void ResetAssignmentOfMercsThatWereTrainingMilitiaInThisSector( INT16 sSectorX, continue; } - pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->bActive == FALSE ) { @@ -618,7 +618,7 @@ void DeselectSelectedListMercsWhoCantMoveWithThisGuy( SOLDIERTYPE *pSoldier ) { if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - pSoldier2 = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier2 = gCharactersList[ iCounter ].usSolID; // skip the guy we are if ( pSoldier == pSoldier2 ) @@ -707,7 +707,7 @@ void SelectUnselectedMercsWhoMustMoveWithThisGuy( void ) // if not already selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == FALSE ) { - pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier = gCharactersList[ iCounter ].usSolID; // if on a squad or in a vehicle if ( ( pSoldier->bAssignment < ON_DUTY ) || ( pSoldier->bAssignment == VEHICLE ) ) @@ -735,7 +735,7 @@ BOOLEAN AnyMercInSameSquadOrVehicleIsSelected( SOLDIERTYPE *pSoldier ) // if selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - pSoldier2 = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier2 = gCharactersList[ iCounter ].usSolID; // if they have the same assignment if( pSoldier->bAssignment == pSoldier2->bAssignment ) @@ -1295,10 +1295,10 @@ void CheckAndUpdateBasedOnContractTimes( void ) if( gCharactersList[iCounter].fValid == TRUE ) { // what kind of merc - if(Menptr[gCharactersList[iCounter].usSolID].ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC) + if(gCharactersList[iCounter].usSolID->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC) { // amount of time left on contract - iTimeRemaining=Menptr[gCharactersList[iCounter].usSolID].iEndofContractTime-GetWorldTotalMin(); + iTimeRemaining = gCharactersList[iCounter].usSolID->iEndofContractTime - GetWorldTotalMin(); if(iTimeRemaining >60*24) { // more than a day, display in green @@ -1329,9 +1329,9 @@ void CheckAndUpdateBasedOnContractTimes( void ) } } } - else if( Menptr[gCharactersList[iCounter].usSolID].ubWhatKindOfMercAmI == MERC_TYPE__MERC ) + else if( gCharactersList[iCounter].usSolID->ubWhatKindOfMercAmI == MERC_TYPE__MERC ) { - iTimeRemaining = Menptr[gCharactersList[iCounter].usSolID].iTotalContractLength; + iTimeRemaining = gCharactersList[iCounter].usSolID->iTotalContractLength; if( iTimeRemaining != iOldContractTimes[ iCounter ]) { @@ -1395,7 +1395,7 @@ void HandleDisplayOfSelectedMercArrows( void ) if( gCharactersList[ ubCount + FIRSTmercTOdisplay ].fValid == TRUE ) { // are they in the selected list or int he same mvt group as this guy - if( ( IsEntryInSelectedListSet( ubCount + FIRSTmercTOdisplay ) == TRUE ) || ( ( GetSelectedDestChar() != - 1 ) ? ( ( Menptr[ gCharactersList[ ubCount + FIRSTmercTOdisplay ].usSolID ].ubGroupID != 0 ) ? ( Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ].ubGroupID == Menptr[ gCharactersList[ ubCount + FIRSTmercTOdisplay ].usSolID ].ubGroupID ) : FALSE ) : FALSE ) ) + if( ( IsEntryInSelectedListSet( ubCount + FIRSTmercTOdisplay ) == TRUE ) || ( ( GetSelectedDestChar() != - 1 ) ? ( ( gCharactersList[ ubCount + FIRSTmercTOdisplay ].usSolID->ubGroupID != 0 ) ? ( gCharactersList[GetSelectedDestChar()].usSolID->ubGroupID == gCharactersList[ ubCount + FIRSTmercTOdisplay ].usSolID->ubGroupID ) : FALSE ) : FALSE ) ) { sYPosition = y + ( ubCount * ( Y_SIZE + 2) ) - 1; @@ -1426,10 +1426,15 @@ void HandleDisplayOfItemPopUpForSector( INT16 sMapX, INT16 sMapY, INT16 sMapZ ) { if( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) { - if( ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID].sSectorX == sMapX ) && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID].sSectorY == sMapY ) && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID].bSectorZ == sMapZ ) && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID].bActive ) && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID].stats.bLife >= OKLIFE ) ) + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; + if( ( pSoldier->sSectorX == sMapX ) && + ( pSoldier->sSectorY == sMapY ) && + ( pSoldier->bSectorZ == sMapZ ) && + ( pSoldier->bActive ) && + ( pSoldier->stats.bLife >= OKLIFE ) ) { // valid character - InitializeItemPickupMenu( &( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID] ), NOWHERE , pItemPool, MAP_INVEN_POOL_X, MAP_INVEN_POOL_Y, -1 ); + InitializeItemPickupMenu( pSoldier, NOWHERE , pItemPool, MAP_INVEN_POOL_X, MAP_INVEN_POOL_Y, -1 ); fWasInited = TRUE; CreateScreenMaskForInventoryPoolPopUp( ); @@ -1937,19 +1942,19 @@ void UpdateCharRegionHelpText( void ) if( ( bSelectedInfoChar != -1 ) && ( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) ) { // valid soldier selected - pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; // health/energy/morale if( pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND ) { if ( pSoldier->stats.bLife != 0 ) { - if ( AM_A_ROBOT( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) ) + if ( AM_A_ROBOT(pSoldier) ) { // robot (condition only) swprintf( sString, L"%s: %d/%d", pMapScreenStatusStrings[ 3 ], pSoldier->stats.bLife, pSoldier->stats.bLifeMax ); } - else if ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].flags.uiStatusFlags & SOLDIER_VEHICLE ) + else if (pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { // vehicle (condition/fuel) swprintf( sString, L"%s: %d/%d, %s: %d/%d", @@ -2491,7 +2496,7 @@ BOOLEAN MapscreenCanPassItemToCharNum( INT32 iNewCharSlot ) } - pNewSoldier = MercPtrs[ gCharactersList[ iNewCharSlot ].usSolID ]; + pNewSoldier = gCharactersList[ iNewCharSlot ].usSolID; // if in a hostile sector, disallow if (gTacticalStatus.fEnemyInSector && pNewSoldier->bInSector) @@ -2531,7 +2536,7 @@ BOOLEAN MapscreenCanPassItemToCharNum( INT32 iNewCharSlot ) } else { - pOldSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pOldSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; } } @@ -3633,7 +3638,7 @@ void SetUpMovingListsForSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ) { if( gCharactersList[ iCounter ].fValid ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( ( pSoldier->bActive ) && ( pSoldier->bAssignment != IN_TRANSIT ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && !SPY_LOCATION( pSoldier->bAssignment ) && ( pSoldier->bAssignment != ASSIGNMENT_MINIEVENT ) && ( pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND ) && @@ -4584,7 +4589,7 @@ void HandleSettingTheSelectedListOfMercs( void ) // is the current guy a valid character? if( gCharactersList[ iCounter ].fValid == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { @@ -4620,7 +4625,7 @@ void HandleSettingTheSelectedListOfMercs( void ) if( GetSelectedDestChar() != -1 ) { INT8 pbErrorNumber = -1; - pSoldier = MercPtrs[gCharactersList[GetSelectedDestChar()].usSolID]; + pSoldier = gCharactersList[GetSelectedDestChar()].usSolID; INT8 bSquadValue = pSoldier->bAssignment; if (bSquadValue == VEHICLE) { @@ -5679,7 +5684,7 @@ void UpdateHelpTextForMapScreenMercIcons( void ) else { // if merc is an AIM merc - if( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) + if( gCharactersList[ bSelectedInfoChar ].usSolID->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) { SetRegionFastHelpText( &(gContractIconRegion), zMarksMapScreenText[ 22 ] ); } @@ -5689,7 +5694,7 @@ void UpdateHelpTextForMapScreenMercIcons( void ) } // if merc has life insurance - if( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].usLifeInsurance > 0 ) + if( gCharactersList[ bSelectedInfoChar ].usSolID->usLifeInsurance > 0 ) { SetRegionFastHelpText( &(gInsuranceIconRegion), zMarksMapScreenText[ 3 ] ); } @@ -5699,7 +5704,7 @@ void UpdateHelpTextForMapScreenMercIcons( void ) } // if merc has a medical deposit - if( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].usMedicalDeposit > 0 ) + if( gCharactersList[ bSelectedInfoChar ].usSolID->usMedicalDeposit > 0 ) { SetRegionFastHelpText( &(gDepositIconRegion), zMarksMapScreenText[ 12 ] ); } @@ -6310,7 +6315,7 @@ BOOLEAN CanEntireMovementGroupMercIsInMove( SOLDIERTYPE *pSoldier, INT8 *pbError if( gCharactersList[ iCounter ].fValid == TRUE ) { // get soldier - pCurrentSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pCurrentSoldier = gCharactersList[ iCounter ].usSolID; // skip inactive grunts if( pCurrentSoldier->bActive == FALSE ) diff --git a/Strategic/Meanwhile.cpp b/Strategic/Meanwhile.cpp index ad9cdb8a..82ec3e04 100644 --- a/Strategic/Meanwhile.cpp +++ b/Strategic/Meanwhile.cpp @@ -418,7 +418,7 @@ void CheckForMeanwhileOKStart( ) SOLDIERTYPE *pSoldier; BOOLEAN fFoundSoldierToInterrogate = FALSE; UINT32 uiCount = 0; - for (pSoldier = MercPtrs[gCharactersList[uiCount].usSolID]; gCharactersList[uiCount].fValid; uiCount++, pSoldier++) + for (pSoldier = gCharactersList[uiCount].usSolID; gCharactersList[uiCount].fValid; uiCount++, pSoldier++) { if (pSoldier->sSectorX == gModSettings.ubMeanwhileInterrogatePOWSectorX && pSoldier->sSectorY == gModSettings.ubMeanwhileInterrogatePOWSectorY && pSoldier->bSectorZ == 0 && pSoldier->bAssignment == ASSIGNMENT_POW && pSoldier->stats.bLife > 0 && gMercProfiles[pSoldier->ubProfile].bMercStatus != MERC_FIRED_AS_A_POW) diff --git a/Strategic/Town Militia.cpp b/Strategic/Town Militia.cpp index 976b9545..82c3e7df 100644 --- a/Strategic/Town Militia.cpp +++ b/Strategic/Town Militia.cpp @@ -1379,7 +1379,7 @@ void HandleCompletionOfTownTrainingByGroupWithTrainer( SOLDIERTYPE *pTrainer, UI continue; } - pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // valid soldier? if( pSoldier->bActive == FALSE ) @@ -1532,7 +1532,7 @@ void BuildListOfUnpaidTrainableSectors( UINT8 ubMilitiaType ) // selected? if( ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) || ( iCounter == bSelectedAssignChar ) ) { - pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // HEADROCK HAM 3.6: Two different conditions depending on the type of militia being trained. if( ubMilitiaType == TOWN_MILITIA ) diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 16c913bc..3fd0fa4e 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -808,7 +808,7 @@ void HandleShadingOfLinesForContractMenu( void ); void UpdateStatusOfMapSortButtons( void ); void DisplayIconsForMercsAsleep( void ); -BOOLEAN CharacterIsInLoadedSectorAndWantsToMoveInventoryButIsNotAllowed( INT8 bCharId ); +BOOLEAN CharacterIsInLoadedSectorAndWantsToMoveInventoryButIsNotAllowed( INT16 bCharId ); void HandlePostAutoresolveMessages(); @@ -946,7 +946,7 @@ BOOLEAN AnyMovableCharsInOrBetweenThisSector( INT16 sSectorX, INT16 sSectorY, IN void SwapCharactersInList( INT32 iCharA, INT32 iCharB ); -BOOLEAN CanChangeDestinationForCharSlot( INT8 bCharNumber, BOOLEAN fShowErrorMessage ); +BOOLEAN CanChangeDestinationForCharSlot( INT16 bCharNumber, BOOLEAN fShowErrorMessage ); BOOLEAN RequestGiveSkyriderNewDestination( void ); void ExplainWhySkyriderCantFly( void ); @@ -2313,21 +2313,21 @@ void RenderIconsForUpperLeftCornerPiece( INT8 bCharNumber ) GetVideoObject(&hHandle, guiULICONS); // if merc is an AIM merc - if( Menptr[ gCharactersList[ bCharNumber ].usSolID ].ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) + if( gCharactersList[ bCharNumber ].usSolID->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) { // finite contract length icon BltVideoObject( guiSAVEBUFFER, hHandle, 0, x, y, VO_BLT_SRCTRANSPARENCY, NULL ); } // if merc has life insurance - if( Menptr[ gCharactersList[ bCharNumber ].usSolID ].usLifeInsurance > 0 ) + if( gCharactersList[ bCharNumber ].usSolID->usLifeInsurance > 0 ) { // draw life insurance icon BltVideoObject( guiSAVEBUFFER, hHandle, 2, x, y + spacing, VO_BLT_SRCTRANSPARENCY, NULL ); } // if merc has a medical deposit - if( Menptr[ gCharactersList[ bCharNumber ].usSolID ].usMedicalDeposit > 0 ) + if( gCharactersList[ bCharNumber ].usSolID->usMedicalDeposit > 0 ) { // draw medical deposit icon BltVideoObject( guiSAVEBUFFER, hHandle, 1, x, y + ( 2 * spacing), VO_BLT_SRCTRANSPARENCY, NULL ); @@ -2341,11 +2341,11 @@ void DrawPay(INT16 sCharNumber) INT32 uiSalary; CHAR16 sString[7]; INT16 usX, usY; - INT16 usMercProfileID; + UINT8 usMercProfileID; // get merc id - usMercProfileID = MercPtrs[ gCharactersList[ sCharNumber ].usSolID ]->ubProfile; + usMercProfileID = gCharactersList[ sCharNumber ].usSolID->ubProfile; // grab salary uiSalary=( ( UINT32 ) gMercProfiles[ usMercProfileID ].sSalary ); @@ -2371,7 +2371,7 @@ void DrawPay(INT16 sCharNumber) void DrawCharBars( void ) { - UINT16 usSoldierID; + SoldierID usSoldierID; SOLDIERTYPE *pSoldier; // will draw the heath, morale and breath bars for a character being displayed in the upper left hand corner @@ -2386,11 +2386,11 @@ void DrawCharBars( void ) // valid character if( bSelectedInfoChar != -1 ) { - usSoldierID=gCharactersList[ bSelectedInfoChar ].usSolID; + usSoldierID = gCharactersList[ bSelectedInfoChar ].usSolID; } else { - usSoldierID=gCharactersList[GetSelectedDestChar()].usSolID; + usSoldierID = gCharactersList[GetSelectedDestChar()].usSolID; } // grab soldier's id number @@ -2443,7 +2443,7 @@ void DrawCharStats( INT16 sCharNum ) //HVOBJECT hCrossHandle; SOLDIERTYPE *pSoldier = NULL; - pSoldier = &Menptr[gCharactersList[sCharNum].usSolID]; + pSoldier = gCharactersList[sCharNum].usSolID; // set up font SetFont(CHAR_FONT); @@ -2823,7 +2823,7 @@ void DrawCharHealth( INT16 sCharNum ) const auto width = UI_CHARPANEL.Text.CurrentHitpoints.width; const auto height = UI_CHARPANEL.Text.CurrentHitpoints.height; - pSoldier = &Menptr[gCharactersList[sCharNum].usSolID]; + pSoldier = gCharactersList[sCharNum].usSolID; if( pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND ) { @@ -2935,7 +2935,7 @@ void DrawCharacterInfo(INT16 sCharNumber) return; } - pSoldier = MercPtrs[ gCharactersList[sCharNumber].usSolID ]; + pSoldier = gCharactersList[sCharNumber].usSolID; if( pSoldier->ubProfile == NO_PROFILE ) { @@ -3248,9 +3248,9 @@ void DrawCharacterInfo(INT16 sCharNumber) } // medical deposit - if( gMercProfiles[ Menptr[ gCharactersList[ sCharNumber ].usSolID ].ubProfile ].sMedicalDepositAmount > 0 ) + if( gMercProfiles[ gCharactersList[ sCharNumber ].usSolID->ubProfile ].sMedicalDepositAmount > 0 ) { - swprintf(sString, L"%d", gMercProfiles[ Menptr[ gCharactersList[ sCharNumber ].usSolID ].ubProfile ].sMedicalDepositAmount ); + swprintf(sString, L"%d", gMercProfiles[ gCharactersList[ sCharNumber ].usSolID->ubProfile ].sMedicalDepositAmount ); // insert commas and dollar sign InsertCommasForDollarFigure( sString ); @@ -3279,7 +3279,7 @@ void DrawCharacterInfo(INT16 sCharNumber) { if ( pSoldier->stats.bLife != 0 ) { - GetMoraleString( MercPtrs[gCharactersList[sCharNumber].usSolID], sString ); + GetMoraleString( gCharactersList[sCharNumber].usSolID, sString ); } else { @@ -3324,7 +3324,7 @@ BOOLEAN CharacterIsInTransitAndHasItemPickedUp( INT8 bCharacterNumber ) } // character in transit? - if( Menptr[ gCharactersList[ bCharacterNumber ].usSolID ].bAssignment != IN_TRANSIT ) + if( gCharactersList[ bCharacterNumber ].usSolID->bAssignment != IN_TRANSIT ) { // nope return( FALSE ); @@ -3354,7 +3354,7 @@ void DisplayCharacterInfo( void ) // This section draws STRATEGIC info pages. Another section is in Interface Panels.cpp and draws TACTICAL info pages. // The feature is toggled by Options-Menu switch, and its color is determined in the INI files. { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[bSelectedInfoChar].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[bSelectedInfoChar].usSolID; UINT8 *pDestBuf; UINT32 uiDestPitchBYTES = 0; @@ -3580,39 +3580,41 @@ INT32 GetPathTravelTimeDuringPlotting( PathStPtr pPath ) else { // plotting for a character... - if( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bAssignment == VEHICLE ) + SOLDIERTYPE* pSoldier = gCharactersList[GetSelectedDestChar()].usSolID; + + if( pSoldier->bAssignment == VEHICLE ) { - ubGroupId = pVehicleList[ Menptr[gCharactersList[GetSelectedDestChar()].usSolID].iVehicleId ].ubMovementGroup; + ubGroupId = pVehicleList[ pSoldier->iVehicleId ].ubMovementGroup; pGroup = GetGroup( ubGroupId ); if( pGroup == NULL ) { - SetUpMvtGroupForVehicle( &( Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) ); + SetUpMvtGroupForVehicle( pSoldier ); // get vehicle id - ubGroupId = pVehicleList[ Menptr[gCharactersList[GetSelectedDestChar()].usSolID].iVehicleId ].ubMovementGroup; + ubGroupId = pVehicleList[ pSoldier->iVehicleId ].ubMovementGroup; pGroup = GetGroup( ubGroupId ); AssertNotNIL(pGroup); } } - else if( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].flags.uiStatusFlags & SOLDIER_VEHICLE ) + else if( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { - ubGroupId = pVehicleList[ Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bVehicleID ].ubMovementGroup; + ubGroupId = pVehicleList[ pSoldier->bVehicleID ].ubMovementGroup; pGroup = GetGroup( ubGroupId ); if( pGroup == NULL ) { - SetUpMvtGroupForVehicle( &( Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) ); + SetUpMvtGroupForVehicle( pSoldier ); // get vehicle id - ubGroupId = pVehicleList[ Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bVehicleID ].ubMovementGroup; + ubGroupId = pVehicleList[ pSoldier->bVehicleID ].ubMovementGroup; pGroup = GetGroup( ubGroupId ); AssertNotNIL(pGroup); } } else { - ubGroupId = Menptr[gCharactersList[GetSelectedDestChar()].usSolID].ubGroupID; + ubGroupId = pSoldier->ubGroupID; pGroup = GetGroup( ( UINT8 )( ubGroupId ) ); AssertNotNIL(pGroup); } @@ -4059,6 +4061,7 @@ void LoadCharacters( void ) void DisplayCharacterList() { + SOLDIERTYPE *pSoldier; INT16 sCount=0; UINT8 ubForegroundColor = 0; @@ -4084,12 +4087,14 @@ void DisplayCharacterList() // skip invalid characters if ( gCharactersList[( sCount + FIRSTmercTOdisplay )].fValid == TRUE ) { + pSoldier = gCharactersList[(sCount + FIRSTmercTOdisplay)].usSolID; + if( sCount == ( INT16 ) giHighLine ) { ubForegroundColor = FONT_WHITE; } // check to see if character is still alive - else if( Menptr[gCharactersList[(sCount + FIRSTmercTOdisplay)].usSolID].stats.bLife == 0 ) + else if(pSoldier->stats.bLife == 0 ) { ubForegroundColor = FONT_METALGRAY; } @@ -4098,13 +4103,11 @@ void DisplayCharacterList() ubForegroundColor = FONT_LTBLUE; } // in current sector? - else if( ( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].sSectorX == sSelMapX ) && - ( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].sSectorY == sSelMapY ) && - ( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].bSectorZ == iCurrentMapSectorZ ) ) + else if ( pSoldier->sSectorX == sSelMapX && pSoldier->sSectorY == sSelMapY && pSoldier->bSectorZ == iCurrentMapSectorZ ) { // mobile ? - if( ( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].bAssignment < ON_DUTY ) || - ( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].bAssignment == VEHICLE ) ) + if( ( pSoldier->bAssignment < ON_DUTY ) || + ( pSoldier->bAssignment == VEHICLE ) ) ubForegroundColor = FONT_YELLOW; else ubForegroundColor = FONT_MAP_DKYELLOW; @@ -4117,7 +4120,7 @@ void DisplayCharacterList() SetFontForeground( ubForegroundColor ); - DrawName( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].name, sCount, MAP_SCREEN_FONT); + DrawName( pSoldier->name, sCount, MAP_SCREEN_FONT); DrawLocation( sCount + FIRSTmercTOdisplay , sCount, MAP_SCREEN_FONT); DrawDestination( sCount + FIRSTmercTOdisplay, sCount, MAP_SCREEN_FONT); DrawAssignment( sCount + FIRSTmercTOdisplay, sCount, MAP_SCREEN_FONT); @@ -6281,17 +6284,17 @@ void DrawAssignment(INT16 sCharNumber, INT16 sRowIndex, INT32 iFont) INT16 usX=0; INT16 usY=0; CHAR16 sString[32]; + SOLDIERTYPE* pSoldier = gCharactersList[sCharNumber].usSolID; - GetMapscreenMercAssignmentString( MercPtrs[ gCharactersList[ sCharNumber ].usSolID ], sString ); + GetMapscreenMercAssignmentString( pSoldier, sString ); FindFontCenterCoordinates((short)UI_CHARLIST.xAssignment + 1, (short)(UI_CHARLIST.y + (sRowIndex*Y_SIZE)), (short)UI_CHARLIST.widthAssignment, (short)Y_SIZE, sString, (long)iFont, &usX, &usY); - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ sCharNumber ].usSolID ]; if( fFlashAssignDone == TRUE ) { - if( Menptr[gCharactersList[sCharNumber].usSolID].flags.fDoneAssignmentAndNothingToDoFlag ) + if( pSoldier->flags.fDoneAssignmentAndNothingToDoFlag ) { SetFontForeground( FONT_RED ); } @@ -6328,8 +6331,7 @@ void DrawAssignment(INT16 sCharNumber, INT16 sRowIndex, INT32 iFont) ubProgress = SectorInfo[SECTOR(sMapX, sMapY)].ubMilitiaTrainingPercentDone; usMaxProgress = 100; } - else if ( pSoldier->bAssignment == TRAIN_SELF || - pSoldier->bAssignment == TRAIN_BY_OTHER ) + else if ( pSoldier->bAssignment == TRAIN_SELF || pSoldier->bAssignment == TRAIN_BY_OTHER ) { switch (pSoldier->bTrainStat) { @@ -6393,7 +6395,7 @@ void DrawLocation(INT16 sCharNumber, INT16 sRowIndex, INT32 iFont) INT16 usY=0; CHAR16 sString[32]; - GetMapscreenMercLocationString( MercPtrs[ gCharactersList[ sCharNumber ].usSolID ], sString ); + GetMapscreenMercLocationString( gCharactersList[ sCharNumber ].usSolID, sString ); FindFontCenterCoordinates((short)UI_CHARLIST.xLocation + 1, (short)(UI_CHARLIST.y + (sRowIndex*Y_SIZE)), (short)UI_CHARLIST.widthLocation, (short)Y_SIZE, sString, (long)iFont, &usX, &usY); @@ -6408,7 +6410,7 @@ void DrawDestination(INT16 sCharNumber, INT16 sRowIndex, INT32 iFont) INT16 usY=0; CHAR16 sString[32]; - GetMapscreenMercDestinationString( MercPtrs[ gCharactersList[ sCharNumber ].usSolID ], sString ); + GetMapscreenMercDestinationString( gCharactersList[ sCharNumber ].usSolID, sString ); if ( wcslen( sString ) == 0 ) { @@ -6428,7 +6430,7 @@ void DrawTimeRemaining( INT16 sCharNumber, INT32 iFont, UINT8 ubFontColor ) CHAR16 sString[32]; // marke strogg more mercs MUST override pointer into array by number of skipped mercs - GetMapscreenMercDepartureString( MercPtrs[ gCharactersList[ sCharNumber + FIRSTmercTOdisplay ].usSolID ], sString, &ubFontColor ); + GetMapscreenMercDepartureString( gCharactersList[ sCharNumber + FIRSTmercTOdisplay ].usSolID, sString, &ubFontColor ); // if merc is highlighted, override the color decided above with bright white if( sCharNumber == ( INT16 ) giHighLine ) @@ -6647,10 +6649,10 @@ UINT32 HandleMapUI( ) break; // check if last sector in character's path is same as where mouse is - if( GetLastSectorIdInCharactersPath( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) != CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) ) + if( GetLastSectorIdInCharactersPath( 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 ); + sX = ( GetLastSectorIdInCharactersPath( gCharactersList[GetSelectedDestChar()].usSolID ) % MAP_WORLD_X ); + sY = ( GetLastSectorIdInCharactersPath( gCharactersList[GetSelectedDestChar()].usSolID ) / MAP_WORLD_X ); GetCursorPos(&MousePos); ScreenToClient(ghWindow, &MousePos); // In window coords! RestoreBackgroundForMapGrid( sX, sY ); @@ -6665,10 +6667,10 @@ UINT32 HandleMapUI( ) // Can we get go there? (NULL temp character path) if ( GetLengthOfPath( pTempCharacterPath ) > 0 ) { - PlotPathForCharacter( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID], sMapX, sMapY, FALSE ); + PlotPathForCharacter( gCharactersList[GetSelectedDestChar()].usSolID, sMapX, sMapY, FALSE ); // copy the path to every other selected character - CopyPathToAllSelectedCharacters( GetSoldierMercPathPtr( MercPtrs[ gCharactersList[GetSelectedDestChar()].usSolID ] ) ); + CopyPathToAllSelectedCharacters( GetSoldierMercPathPtr( gCharactersList[GetSelectedDestChar()].usSolID ) ); StartConfirmMapMoveMode( sMapY ); fMapPanelDirty = TRUE; @@ -6693,9 +6695,9 @@ UINT32 HandleMapUI( ) case MAP_EVENT_SELECT_SECTOR: // will select the sector the selected merc is in - sMapX=Menptr[gCharactersList[bSelectedInfoChar].usSolID].sSectorX; - sMapY=Menptr[gCharactersList[bSelectedInfoChar].usSolID].sSectorY; - bMapZ=Menptr[gCharactersList[bSelectedInfoChar].usSolID].bSectorZ; + sMapX=gCharactersList[bSelectedInfoChar].usSolID.sSectorX; + sMapY=gCharactersList[bSelectedInfoChar].usSolID.sSectorY; + bMapZ=gCharactersList[bSelectedInfoChar].usSolID.bSectorZ; if( ( sSelMapX != sMapX || sSelMapY != sMapY || iCurrentMapSectorZ != bMapZ ) && ( gTacticalStatus.fDidGameJustStart == FALSE ) && ( gfPreBattleInterfaceActive == FALSE ) ) @@ -7348,7 +7350,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if ( bSelectedInfoChar != -1 ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; if ( pSoldier->inv[ HANDPOS ].exists() == true ) { pSoldier->inv[ HANDPOS ][0]->data.objectStatus = 2; @@ -7359,7 +7361,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if ( bSelectedInfoChar != -1 ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; if ( pSoldier->inv[ HANDPOS ].exists() == true ) { pSoldier->inv[ HANDPOS ].usItem = GUN_BARREL_EXTENDER; @@ -7401,7 +7403,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) if ( bSelectedInfoChar != -1 ) { // ALT-F10: force selected character asleep (ignores breathmax) - PutMercInAsleepState( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ] ); + PutMercInAsleepState( gCharactersList[ bSelectedInfoChar ].usSolID ); } } #endif @@ -7447,7 +7449,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if( bSelectedInfoChar != -1 ) { - TownMilitiaTrainingCompleted( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ], sSelMapX, sSelMapY ); + TownMilitiaTrainingCompleted( gCharactersList[ bSelectedInfoChar ].usSolID, sSelMapX, sSelMapY ); } } #endif @@ -7515,7 +7517,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if( bSelectedInfoChar != -1 ) { - StatChange( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ], EXPERAMT, 1000, FROM_SUCCESS ); + StatChange( gCharactersList[ bSelectedInfoChar ].usSolID, EXPERAMT, 1000, FROM_SUCCESS ); } } #endif @@ -7788,7 +7790,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) case 'E': if(bSelectedInfoChar != -1) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; pSoldier->bInSector = FALSE; //CHRISL: Try to update InSector value so we don't have to "activate" a sector @@ -7915,7 +7917,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) // CTRL-F: Refuel vehicle if( ( fCtrl ) && ( bSelectedInfoChar != -1 ) ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { @@ -7987,9 +7989,9 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) break; case 'H': // swap primary & secondary hand - if ( bSelectedInfoChar != -1 && fShowInventoryFlag && !AM_A_ROBOT( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ] )) + if ( bSelectedInfoChar != -1 && fShowInventoryFlag && !AM_A_ROBOT( gCharactersList[ bSelectedInfoChar ].usSolID )) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; UINT16 usOldHandItem = pSoldier->inv[HANDPOS].usItem; SwapHandItems( pSoldier ); @@ -8025,7 +8027,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) //CHRISL: Swap gunsling if ( bSelectedInfoChar != -1 && fShowInventoryFlag && UsingNewInventorySystem() == true ) { - SOLDIERTYPE *pSoldier = MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]; + SOLDIERTYPE *pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if (fAlt) // switch to knife, or from knife to gun pSoldier->SwitchWeapons(TRUE); @@ -8109,7 +8111,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { static UINT16 gQuoteNum = 0; // Get Soldier - TacticalCharacterDialogue( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], gQuoteNum ); + TacticalCharacterDialogue( gCharactersList[ bSelectedInfoChar ].usSolID, gQuoteNum ); gQuoteNum++; } else if( fCtrl ) @@ -8118,7 +8120,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) // Get Soldier if ( giHighLine != -1 ) { - TacticalCharacterDialogue( MercPtrs[ gCharactersList[ giHighLine ].usSolID ], gQuoteNum ); + TacticalCharacterDialogue( gCharactersList[ giHighLine ].usSolID, gQuoteNum ); gQuoteNum++; } } @@ -8127,7 +8129,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) case 'N': if ( bSelectedInfoChar != -1 && fShowInventoryFlag ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; SwapGoggles(pSoldier); } break; @@ -8167,7 +8169,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) // ALT-P: Make the selected character a POW! if( ( fAlt ) && ( bSelectedInfoChar != -1 ) ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; EnemyCapturesPlayerSoldier( pSoldier ); @@ -8302,7 +8304,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { INT16 sDeltaX, sDeltaY; INT16 sPrevX = 0, sPrevY = 0; - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[GetSelectedDestChar()].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[GetSelectedDestChar()].usSolID; // can't teleport to where we already are if ( ( sMapX == pSoldier->sSectorX ) && ( sMapY == pSoldier->sSectorY ) ) @@ -8466,7 +8468,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if(bSelectedInfoChar != -1) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; //CHRISL: Try to update InSector value so we don't have to "activate" a sector if (pSoldier->sSectorX == sSelMapX && pSoldier->sSectorY == sSelMapY && pSoldier->bSectorZ == iCurrentMapSectorZ && !pSoldier->flags.fBetweenSectors) @@ -9471,7 +9473,7 @@ void CreateDestroyMapInvButton() if (bSelectedInfoChar != -1 && gCharactersList[bSelectedInfoChar].fValid) { - SOLDIERTYPE* pSoldier = MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]; + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if (!(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT(pSoldier)) { InitInvSlotInterface(gMapScreenInvPocketXY, &gSCamoXY, MAPInvMoveCallback, MAPInvClickCallback, MAPInvMoveCamoCallback, MAPInvClickCamoCallback, FALSE); @@ -9931,7 +9933,7 @@ void HandleCursorOverRifleAmmo( ) if ( gfCheckForMouseOverItem ) { - if ( HandleCompatibleAmmoUI( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ], (INT8)gbCheckForMouseOverItemPos, TRUE ) ) + if ( HandleCompatibleAmmoUI( gCharactersList[ bSelectedInfoChar ].usSolID, (INT8)gbCheckForMouseOverItemPos, TRUE ) ) { if ( ( GetJA2Clock( ) - guiMouseOverItemTime ) > 100 ) { @@ -9955,7 +9957,7 @@ void MAPInvClickCamoCallback( MOUSE_REGION *pRegion, INT32 iReason ) SOLDIERTYPE* pSoldier = NULL; if( (bSelectedInfoChar != -1) && (gCharactersList[bSelectedInfoChar].fValid == TRUE) ) { - pSoldier = MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]; + pSoldier = gCharactersList[bSelectedInfoChar].usSolID; } if ( gpItemPointer && pSoldier ) @@ -10564,7 +10566,7 @@ void MAPBeginItemPointer( SOLDIERTYPE *pSoldier, UINT8 ubHandPos ) if ( _KeyDown(CTRL) ) { // if in battle inform player they will have to do this in tactical - if( !CanPlayerUseSectorInventory( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) ) + if( !CanPlayerUseSectorInventory( gCharactersList[ bSelectedInfoChar ].usSolID ) ) { // return item to original slot PlaceObject( pSoldier, ubHandPos, &gItemPointer ); @@ -10630,7 +10632,7 @@ void MAPEndItemPointer( ) if ( fShowInventoryFlag && bSelectedInfoChar >= 0 ) { - ReevaluateItemHatches( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], FALSE ); + ReevaluateItemHatches( gCharactersList[ bSelectedInfoChar ].usSolID, FALSE ); } } } @@ -10653,7 +10655,7 @@ void RenderAttributeStringsForUpperLeftHandCorner( UINT32 uiBufferToRenderTo ) if ( ( bSelectedInfoChar != - 1) && ( gCharactersList[ bSelectedInfoChar ].fValid ) ) { - pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; } SetFont( CHAR_FONT ); @@ -10772,7 +10774,8 @@ void SetUpCursorForStrategicMap( void ) else // yes - by character { // set cursor based on foot or vehicle - if( ( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bAssignment != VEHICLE ) && !( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + SOLDIERTYPE* pSoldier = gCharactersList[GetSelectedDestChar()].usSolID; + if( ( pSoldier->bAssignment != VEHICLE ) && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { ChangeMapScreenMaskCursor( CURSOR_STRATEGIC_FOOT ); } @@ -11336,7 +11339,7 @@ void TeamListInfoRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) ChangeSelectedInfoChar( iValue+ FIRSTmercTOdisplay, TRUE ); - pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ]; + pSoldier = gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID; // highlight giDestHighLine = -1; @@ -11384,7 +11387,7 @@ void TeamListInfoRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) if( gCharactersList[ iValue + FIRSTmercTOdisplay].fValid == TRUE ) { - pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ]; + pSoldier = gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID; // select this character ChangeSelectedInfoChar( iValue+ FIRSTmercTOdisplay, TRUE ); @@ -11492,7 +11495,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) // reset list if the clicked character isn't also selected ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( iValue + FIRSTmercTOdisplay) == FALSE ) ); - pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ]; + pSoldier = gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID; // if alive (dead guys keep going, use remove menu instead), // and it's between sectors and it can be reassigned (non-vehicles) @@ -11573,7 +11576,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) { ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, TRUE ); - pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ]; + pSoldier = gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID; // highlight giDestHighLine = -1; @@ -11603,7 +11606,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) // if not already selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == FALSE ) { - pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier = gCharactersList[ iCounter ].usSolID; // if on a squad or in a vehicle if ( ( pSoldier->bAssignment < ON_DUTY ) || ( pSoldier->bAssignment == VEHICLE ) ) @@ -11659,7 +11662,7 @@ void TeamListAssignmentRegionMvtCallBack(MOUSE_REGION *pRegion, INT32 iReason ) { giHighLine = iValue; - if( !( Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ].flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + if( !( gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { giAssignHighLine = iValue; } @@ -11690,7 +11693,7 @@ void TeamListAssignmentRegionMvtCallBack(MOUSE_REGION *pRegion, INT32 iReason ) else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE ) { if( ( gCharactersList[ iValue + FIRSTmercTOdisplay ].fValid == TRUE ) && - !( Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ].flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + !( gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { // play click PlayGlowRegionSound( ); @@ -11732,23 +11735,23 @@ void TeamListDestinationRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( iValue + FIRSTmercTOdisplay ) == FALSE ) ); // deselect any characters/vehicles that can't accompany the clicked merc - DeselectSelectedListMercsWhoCantMoveWithThisGuy( &( Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ] ) ); + DeselectSelectedListMercsWhoCantMoveWithThisGuy( gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ); // select all characters/vehicles that MUST accompany the clicked merc (same squad/vehicle) SelectUnselectedMercsWhoMustMoveWithThisGuy( ); // Find out if this guy and everyone travelling with him is allowed to move strategically // NOTE: errors are reported within... - if ( CanChangeDestinationForCharSlot( ( INT8 ) iValue + FIRSTmercTOdisplay, TRUE ) ) + if ( CanChangeDestinationForCharSlot( ( INT16 ) iValue + FIRSTmercTOdisplay, TRUE ) ) { // turn off sector inventory, turn on show teams filter, etc. MakeMapModesSuitableForDestPlotting( ( INT8 ) iValue + FIRSTmercTOdisplay ); // check if person is in a vehicle - if( Menptr[gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID].bAssignment == VEHICLE ) + if( gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID->bAssignment == VEHICLE ) { // if he's in the helicopter - if( Menptr[gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID].iVehicleId == iHelicopterVehicleId ) + if( gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID->iVehicleId == iHelicopterVehicleId ) { TurnOnAirSpaceMode( ); if( RequestGiveSkyriderNewDestination( ) == FALSE ) @@ -11911,7 +11914,7 @@ void TeamListSleepRegionBtnCallBack( MOUSE_REGION *pRegion, INT32 iReason ) // if this slot's sleep status can be changed if ( CanChangeSleepStatusForCharSlot( (INT8) iValue + FIRSTmercTOdisplay ) ) { - pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ]; + pSoldier = gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID; if( pSoldier->flags.fMercAsleep == TRUE ) { @@ -12035,7 +12038,7 @@ static void HandleSelectedMercsContract() if (gCharactersList[iCounter].fValid) { // get the soldier pointer - pSoldier = &Menptr[gCharactersList[iCounter].usSolID]; + pSoldier = gCharactersList[iCounter].usSolID; if (pSoldier->bActive == FALSE) { @@ -12047,7 +12050,7 @@ static void HandleSelectedMercsContract() continue; } - if (CanExtendContractForCharSlot((INT8)iCounter)) + if (CanExtendContractForCharSlot(iCounter)) { // up the total number of soldiers gSelectedSoldiers.push_back(pSoldier); @@ -12162,7 +12165,7 @@ void TeamListContractRegionMvtCallBack(MOUSE_REGION *pRegion, INT32 iReason ) { giHighLine = iValue; - if( CanExtendContractForCharSlot( (INT8) iValue + FIRSTmercTOdisplay ) ) + if( CanExtendContractForCharSlot( iValue + FIRSTmercTOdisplay ) ) { giContractHighLine = iValue; } @@ -12193,7 +12196,7 @@ void TeamListContractRegionMvtCallBack(MOUSE_REGION *pRegion, INT32 iReason ) } else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE ) { - if( CanExtendContractForCharSlot( (INT8) iValue + FIRSTmercTOdisplay ) ) + if( CanExtendContractForCharSlot( iValue + FIRSTmercTOdisplay ) ) { // play click PlayGlowRegionSound( ); @@ -12216,7 +12219,7 @@ INT32 GetIndexForthis( SOLDIERTYPE *pSoldier ) { if( gCharactersList[ iCounter ].fValid == TRUE ) { - if( ( &Menptr[ gCharactersList[ iCounter ].usSolID ] ) == pSoldier ) + if( gCharactersList[ iCounter ].usSolID == pSoldier->ubID ) { iIndex = iCounter; iCounter = iLastGuy; @@ -12288,7 +12291,7 @@ void PlotPermanentPaths( void ) } else if( GetSelectedDestChar() != -1 ) { - DisplaySoldierPath( &Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ] ); + DisplaySoldierPath( gCharactersList[GetSelectedDestChar()].usSolID ); } } @@ -12343,7 +12346,7 @@ void PlotTemporaryPaths( void ) // dest char has been selected, else if( GetSelectedDestChar() != -1 ) { - PlotATemporaryPathForCharacter( &Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ], sMapX, sMapY ); + PlotATemporaryPathForCharacter( gCharactersList[GetSelectedDestChar()].usSolID, sMapX, sMapY ); // check to see if we are drawing path DisplayThePotentialPathForCurrentDestinationCharacterForMapScreenInterface( sMapX, sMapY ); @@ -12354,7 +12357,7 @@ void PlotTemporaryPaths( void ) // clip region ClipBlitsToMapViewRegion( ); // blit - DisplaySoldierTempPath( &Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ] ); + DisplaySoldierTempPath( gCharactersList[GetSelectedDestChar()].usSolID ); // restore RestoreClipRegionToFullScreen( ); } @@ -12596,7 +12599,7 @@ void DetermineIfContractMenuCanBeShown( void ) // determine which lines selectable HandleShadingOfLinesForContractMenu( ); - if( Menptr[gCharactersList[ bSelectedInfoChar ].usSolID].stats.bLife == 0 ) + if( gCharactersList[ bSelectedInfoChar ].usSolID->stats.bLife == 0 ) { // show basic assignment menu ShowBox( ghRemoveMercAssignBox ); @@ -12664,7 +12667,7 @@ void ContractRegionBtnCallback( MOUSE_REGION *pRegion, INT32 iReason ) if( CanExtendContractForCharSlot( bSelectedInfoChar ) ) { - pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; // create RebuildContractBoxForMerc( pSoldier ); @@ -12771,7 +12774,7 @@ void HandleShadingOfLinesForContractMenu( void ) Assert( CanExtendContractForCharSlot( bSelectedContractChar ) ); // grab the character - pSoldier = &Menptr[ gCharactersList[ bSelectedContractChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedContractChar ].usSolID; // is guy in AIM? and well enough to talk and make such decisions? @@ -12858,7 +12861,7 @@ void ReBuildCharactersList( void ) { // clear this slot gCharactersList[ sCount ].fValid = FALSE; - gCharactersList[ sCount ].usSolID = 0; + gCharactersList[ sCount ].usSolID = NOBODY; } // fills array with pressence of player controlled characters @@ -12977,7 +12980,7 @@ void EnableDisableTeamListRegionsAndHelpText( void ) MSYS_EnableRegion( &gTeamListLocationRegion[ bCharNum ] ); // valid character. If it's a vehicle, however - if ( Menptr[ gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID ].flags.uiStatusFlags & SOLDIER_VEHICLE ) + if ( gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID->flags.uiStatusFlags & SOLDIER_VEHICLE ) { // Can't change assignment for vehicles MSYS_DisableRegion( &gTeamListAssignmentRegion[ bCharNum ] ); @@ -12987,8 +12990,8 @@ void EnableDisableTeamListRegionsAndHelpText( void ) MSYS_EnableRegion( &gTeamListAssignmentRegion[ bCharNum ] ); // POW or dead ? - if ( ( Menptr[ gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID ].bAssignment == ASSIGNMENT_POW ) || - ( Menptr[ gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID ].stats.bLife == 0 ) ) + if ( ( gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID->bAssignment == ASSIGNMENT_POW ) || + ( gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID->stats.bLife == 0 ) ) { // "Remove Merc" SetRegionFastHelpText( &gTeamListAssignmentRegion[ bCharNum ], pRemoveMercStrings[ 0 ] ); @@ -13128,7 +13131,7 @@ BOOLEAN ContinueDialogue(SOLDIERTYPE *pSoldier, BOOLEAN fDone ) { ChangeSelectedInfoChar( bOldSelectedInfoChar, TRUE ); - SetAutoFaceInActive( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]->iFaceIndex ); + SetAutoFaceInActive( gCharactersList[ bSelectedInfoChar ].usSolID->iFaceIndex ); } */ @@ -13150,7 +13153,7 @@ BOOLEAN ContinueDialogue(SOLDIERTYPE *pSoldier, BOOLEAN fDone ) { if( gCharactersList[bCounter].fValid == TRUE ) { - if( ( &Menptr[gCharactersList[bCounter].usSolID]) == pSoldier ) + if( gCharactersList[bCounter].usSolID == pSoldier->ubID ) { if( bSelectedInfoChar != bCounter ) { @@ -13174,7 +13177,7 @@ void HandleSpontanousTalking( ) { if( ( bSelectedInfoChar != -1 ) && ( bSelectedInfoChar < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) ) { - ContinueDialogue( ( &Menptr[gCharactersList[bSelectedInfoChar].usSolID] ), TRUE ); + ContinueDialogue( gCharactersList[bSelectedInfoChar].usSolID, TRUE ); } } } @@ -13254,22 +13257,24 @@ BOOLEAN CheckIfClickOnLastSectorInPath( INT16 sX, INT16 sY ) return( FALSE ); } - if ( CALCULATE_STRATEGIC_INDEX( sX, sY ) == GetLastSectorIdInCharactersPath( ( &Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ] ) ) ) + SOLDIERTYPE* pSoldier = gCharactersList[GetSelectedDestChar()].usSolID; + + if ( CALCULATE_STRATEGIC_INDEX( sX, sY ) == GetLastSectorIdInCharactersPath( pSoldier ) ) { // clicked on last sector, reset plotting mode // if he's IN a vehicle or IS a vehicle - if( ( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bAssignment == VEHICLE ) || ( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + if( ( pSoldier->bAssignment == VEHICLE ) || ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { - if( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bAssignment == VEHICLE ) + if( pSoldier->bAssignment == VEHICLE ) { // IN a vehicle - iVehicleId = Menptr[gCharactersList[GetSelectedDestChar()].usSolID].iVehicleId; + iVehicleId = pSoldier->iVehicleId; } else { // IS a vehicle - iVehicleId = Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bVehicleID; + iVehicleId = pSoldier->bVehicleID; } // rebuild waypoints - vehicles @@ -13278,7 +13283,7 @@ BOOLEAN CheckIfClickOnLastSectorInPath( INT16 sX, INT16 sY ) else { // rebuild waypoints - mercs on foot - ppMovePath = &( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].pMercPath ); + ppMovePath = &( pSoldier->pMercPath ); } RebuildWayPointsForAllSelectedCharsGroups( ); @@ -13339,7 +13344,7 @@ void RebuildWayPointsForAllSelectedCharsGroups( void ) { if( ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // if he's IN a vehicle or IS a vehicle @@ -13443,7 +13448,7 @@ void UpdateCursorIfInLastSector( void ) if ( GetSelectedDestChar() != -1 ) { //c heck if we are in the last sector of the characters path? - if ( CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) == GetLastSectorIdInCharactersPath( (&Menptr[gCharactersList[GetSelectedDestChar()].usSolID]) ) ) + if ( CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) == GetLastSectorIdInCharactersPath( gCharactersList[GetSelectedDestChar()].usSolID ) ) { // set cursor to checkmark ChangeMapScreenMaskCursor( CURSOR_CHECKMARK ); @@ -13623,7 +13628,7 @@ void UpDateStatusOfContractBox( void ) { ForceUpDateOfBox( ghContractBox ); - if( ( Menptr[gCharactersList[ bSelectedInfoChar ].usSolID].stats.bLife == 0 )||( Menptr[gCharactersList[bSelectedInfoChar].usSolID].bAssignment == ASSIGNMENT_POW ) ) + if( ( gCharactersList[ bSelectedInfoChar ].usSolID->stats.bLife == 0 )||( gCharactersList[bSelectedInfoChar].usSolID->bAssignment == ASSIGNMENT_POW ) ) { ForceUpDateOfBox( ghRemoveMercAssignBox ); } @@ -13774,17 +13779,21 @@ void UpdateStatusOfMapSortButtons( void ) INT16 GetLastValidCharacterInTeamPanelList( void ) { INT16 iCounter = 0, iValue = 0; + SOLDIERTYPE* pSoldier; + SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID; // run through the list and find the last valid guy in the list for( iCounter = 0; iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounter++ ) { if( gCharactersList[ iCounter ].fValid == TRUE ) { - if(( Menptr[ gCharactersList[ iCounter ].usSolID ].stats.bLife >= OKLIFE ) ) + pSoldier = gCharactersList[iCounter].usSolID; + + if(pSoldier->stats.bLife >= OKLIFE ) { if( fShowMapInventoryPool ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == sSelMapX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == sSelMapY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) + if( pSoldier->sSectorX == sSelMapX && pSoldier->sSectorY == sSelMapY && pSoldier->bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) { iValue = iCounter; } @@ -13797,7 +13806,7 @@ INT16 GetLastValidCharacterInTeamPanelList( void ) { if( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ ==Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ ) + if( pSoldier->sSectorX == pSelectedSoldier->sSectorX && pSoldier->sSectorY == pSelectedSoldier->sSectorY && pSoldier->bSectorZ == pSelectedSoldier->bSectorZ ) { iValue = iCounter; } @@ -13828,11 +13837,11 @@ INT8 GetPrevValidCharacterInTeamPanelList( INT8 bCurrentIndex ) { if( gCharactersList[ iCounter ].fValid == TRUE ) { - if( ( Menptr[ gCharactersList[ iCounter ].usSolID ].bLife >= OKLIFE ) ) + if( ( gCharactersList[ iCounter ].usSolID->bLife >= OKLIFE ) ) { if( fShowMapInventoryPool ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == sSelMapX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == sSelMapY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) + if( gCharactersList[ iCounter ].usSolID->sSectorX == sSelMapX && gCharactersList[ iCounter ].usSolID->sSectorY == sSelMapY && gCharactersList[ iCounter ].usSolID->bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) { iValue = iCounter; } @@ -13845,7 +13854,7 @@ INT8 GetPrevValidCharacterInTeamPanelList( INT8 bCurrentIndex ) { if( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ ==Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ ) + if( gCharactersList[ iCounter ].usSolID->sSectorX == gCharactersList[ bSelectedInfoChar ].usSolID->sSectorX && gCharactersList[ iCounter ].usSolID->sSectorY == gCharactersList[ bSelectedInfoChar ].usSolID->sSectorY && gCharactersList[ iCounter ].usSolID->bSectorZ ==gCharactersList[ bSelectedInfoChar ].usSolID->bSectorZ ) { iValue = iCounter; iCounter = 0; @@ -13875,11 +13884,11 @@ INT8 GetNextValidCharacterInTeamPanelList( INT8 bCurrentIndex ) { if( gCharactersList[ iCounter ].fValid == TRUE ) { - if( ( Menptr[ gCharactersList[ iCounter ].usSolID ].bLife >= OKLIFE ) ) + if( ( gCharactersList[ iCounter ].usSolID->bLife >= OKLIFE ) ) { if( fShowMapInventoryPool ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == sSelMapX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == sSelMapY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) + if( gCharactersList[ iCounter ].usSolID->sSectorX == sSelMapX && gCharactersList[ iCounter ].usSolID->sSectorY == sSelMapY && gCharactersList[ iCounter ].usSolID->bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) { iValue = iCounter; } @@ -13892,7 +13901,7 @@ INT8 GetNextValidCharacterInTeamPanelList( INT8 bCurrentIndex ) { if( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ ==Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ ) + if( gCharactersList[ iCounter ].usSolID->sSectorX == gCharactersList[ bSelectedInfoChar ].usSolID->sSectorX && gCharactersList[ iCounter ].usSolID->sSectorY == gCharactersList[ bSelectedInfoChar ].usSolID->sSectorY && gCharactersList[ iCounter ].usSolID->bSectorZ ==gCharactersList[ bSelectedInfoChar ].usSolID->bSectorZ ) { iValue = iCounter; } @@ -14122,7 +14131,7 @@ void UpdateBadAssignments( void ) { if( gCharactersList[ iCounter ].fValid == TRUE ) { - CheckIfSoldierUnassigned( &Menptr[ gCharactersList[ iCounter ].usSolID ] ); + CheckIfSoldierUnassigned( gCharactersList[ iCounter ].usSolID ); } } @@ -14180,7 +14189,7 @@ BOOLEAN AnyMercsLeavingRealSoon() { if( gCharactersList[ uiCounter ].fValid == TRUE ) { - if( ( Menptr[gCharactersList[uiCounter].usSolID].iEndofContractTime - uiTimeInMin ) <= MINS_TO_FLASH_CONTRACT_TIME ) + if( ( gCharactersList[uiCounter].usSolID->iEndofContractTime - uiTimeInMin ) <= MINS_TO_FLASH_CONTRACT_TIME ) { fFoundOne = TRUE; break; @@ -14263,10 +14272,8 @@ void HandleRemovalOfPreLoadedMapGraphics( void ) } -BOOLEAN CharacterIsInLoadedSectorAndWantsToMoveInventoryButIsNotAllowed( INT8 bCharId ) +BOOLEAN CharacterIsInLoadedSectorAndWantsToMoveInventoryButIsNotAllowed( INT16 bCharId ) { - UINT16 usSoldierId = 0; - // invalid char id if( bCharId == -1 ) { @@ -14280,10 +14287,10 @@ BOOLEAN CharacterIsInLoadedSectorAndWantsToMoveInventoryButIsNotAllowed( INT8 bC } // get the soldier id - usSoldierId = gCharactersList[ bCharId ].usSolID; + SoldierID usSoldierId = gCharactersList[ bCharId ].usSolID; // char is in loaded sector - if( Menptr[ usSoldierId ].sSectorX != gWorldSectorX || Menptr[ usSoldierId ].sSectorY != gWorldSectorY || Menptr[ usSoldierId ].bSectorZ != gbWorldSectorZ ) + if( usSoldierId->sSectorX != gWorldSectorX || usSoldierId->sSectorY != gWorldSectorY || usSoldierId->bSectorZ != gbWorldSectorZ ) { return( FALSE ); } @@ -14660,7 +14667,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse // if we have anyone valid selected if ( ( bSelectedInfoChar != -1 ) && ( gCharactersList[ bSelectedInfoChar ].fValid ) ) { - pPreviousSelectedInfoChar = &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pPreviousSelectedInfoChar = gCharactersList[ bSelectedInfoChar ].usSolID; } @@ -14677,7 +14684,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse } // get soldier assoc. with entry - pCurrentSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pCurrentSoldier = gCharactersList[ iCounter ].usSolID; // check if soldier is active if( pCurrentSoldier->bActive == FALSE ) @@ -14715,11 +14722,12 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; } - //if( ( wcscmp( Menptr[ gCharactersList[ iCounterA ].usSolID ].name, Menptr[ gCharactersList[ iCounter ].usSolID ].name ) > 0 ) && ( iCounterA < iCounter ) ) + //if( ( wcscmp( gCharactersList[ iCounterA ].usSolID->name, gCharactersList[ iCounter ].usSolID->name ) > 0 ) && ( iCounterA < iCounter ) ) if( iCounterA < iCounter ) { - if((fReverse && ( wcscmp( Menptr[ gCharactersList[ iCounterA ].usSolID ].name, Menptr[ gCharactersList[ iCounter ].usSolID ].name ) < 0 )) || - (!fReverse && ( wcscmp( Menptr[ gCharactersList[ iCounterA ].usSolID ].name, Menptr[ gCharactersList[ iCounter ].usSolID ].name ) > 0 ))) + + if((fReverse && ( wcscmp( gCharactersList[ iCounterA ].usSolID->name, gCharactersList[ iCounter ].usSolID->name ) < 0 )) || + (!fReverse && ( wcscmp( gCharactersList[ iCounterA ].usSolID->name, gCharactersList[ iCounter ].usSolID->name ) > 0 ))) SwapCharactersInList( iCounter, iCounterA ); } } @@ -14734,23 +14742,23 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; } - if( !fReverse && ( Menptr[ gCharactersList[ iCounterA ].usSolID ].bAssignment > Menptr[ gCharactersList[ iCounter ].usSolID ].bAssignment ) && ( iCounterA < iCounter ) ) + if( !fReverse && ( gCharactersList[ iCounterA ].usSolID->bAssignment > gCharactersList[ iCounter ].usSolID->bAssignment ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); } - else if( fReverse && ( Menptr[ gCharactersList[ iCounterA ].usSolID ].bAssignment < Menptr[ gCharactersList[ iCounter ].usSolID ].bAssignment ) && ( iCounterA < iCounter ) ) + else if( fReverse && ( gCharactersList[ iCounterA ].usSolID->bAssignment < gCharactersList[ iCounter ].usSolID->bAssignment ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); } - else if( ( Menptr[ gCharactersList[ iCounterA ].usSolID ].bAssignment == Menptr[ gCharactersList[ iCounter ].usSolID ].bAssignment ) && ( iCounterA < iCounter ) ) + else if( ( gCharactersList[ iCounterA ].usSolID->bAssignment == gCharactersList[ iCounter ].usSolID->bAssignment ) && ( iCounterA < iCounter ) ) { // same assignment // if it's in a vehicle - if( Menptr[ gCharactersList[ iCounterA ].usSolID ].bAssignment == VEHICLE ) + if( gCharactersList[ iCounterA ].usSolID->bAssignment == VEHICLE ) { // then also compare vehicle IDs - if( ( Menptr[ gCharactersList[ iCounterA ].usSolID ].iVehicleId > Menptr[ gCharactersList[ iCounter ].usSolID ].iVehicleId ) && ( iCounterA < iCounter ) ) + if( ( gCharactersList[ iCounterA ].usSolID->iVehicleId > gCharactersList[ iCounter ].usSolID->iVehicleId ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); } @@ -14768,11 +14776,11 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; } - if( !fReverse && ( Menptr[ gCharactersList[ iCounterA ].usSolID ].flags.fMercAsleep == TRUE ) && ( Menptr[ gCharactersList[ iCounter ].usSolID ].flags.fMercAsleep == FALSE ) && ( iCounterA < iCounter ) ) + if( !fReverse && ( gCharactersList[ iCounterA ].usSolID->flags.fMercAsleep == TRUE ) && ( gCharactersList[ iCounter ].usSolID->flags.fMercAsleep == FALSE ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); } - else if( fReverse && ( Menptr[ gCharactersList[ iCounterA ].usSolID ].flags.fMercAsleep == FALSE ) && ( Menptr[ gCharactersList[ iCounter ].usSolID ].flags.fMercAsleep == TRUE ) && ( iCounterA < iCounter ) ) + else if( fReverse && ( gCharactersList[ iCounterA ].usSolID->flags.fMercAsleep == FALSE ) && ( gCharactersList[ iCounter ].usSolID->flags.fMercAsleep == TRUE ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); } @@ -14806,13 +14814,13 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse case( 4 ): // by destination sector - if( GetLengthOfMercPath( MercPtrs[ gCharactersList[ iCounter ].usSolID ] ) == 0 ) + if( GetLengthOfMercPath( gCharactersList[ iCounter ].usSolID ) == 0 ) { sEndSectorA = 9999; } else { - sEndSectorA = GetLastSectorIdInCharactersPath( &Menptr[ gCharactersList[ iCounter ].usSolID ] ); + sEndSectorA = GetLastSectorIdInCharactersPath( gCharactersList[ iCounter ].usSolID ); } for( iCounterA = 0; iCounterA < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounterA++ ) @@ -14822,13 +14830,13 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; } - if( GetLengthOfMercPath( MercPtrs[ gCharactersList[ iCounterA ].usSolID ] ) == 0 ) + if( GetLengthOfMercPath( gCharactersList[ iCounterA ].usSolID ) == 0 ) { sEndSectorB = 9999; } else { - sEndSectorB = GetLastSectorIdInCharactersPath( &Menptr[ gCharactersList[ iCounterA ].usSolID ] ); + sEndSectorB = GetLastSectorIdInCharactersPath( gCharactersList[ iCounterA ].usSolID ); } if( !fReverse && ( sEndSectorB > sEndSectorA ) && ( iCounterA < iCounter ) ) @@ -14843,7 +14851,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; case( 5 ): - iExpiryTime = GetContractExpiryTime( &( Menptr[ gCharactersList[ iCounter ].usSolID ] ) ); + iExpiryTime = GetContractExpiryTime( gCharactersList[ iCounter ].usSolID ); //by contract expiry for( iCounterA = 0; iCounterA < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounterA++ ) @@ -14853,7 +14861,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; } - iExpiryTimeA = GetContractExpiryTime( &( Menptr[ gCharactersList[ iCounterA ].usSolID ] ) ); + iExpiryTimeA = GetContractExpiryTime( gCharactersList[ iCounterA ].usSolID ); if( !fReverse && ( iExpiryTimeA > iExpiryTime ) && ( iCounterA < iCounter ) ) { @@ -14867,7 +14875,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; case( 6 ): - uiID = Menptr[ gCharactersList[ iCounter ].usSolID ].ubID; + uiID = gCharactersList[ iCounter ].usSolID->ubID; //by ubID for( iCounterA = 0; iCounterA < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounterA++ ) { @@ -14875,7 +14883,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse { break; } - uiIDA = Menptr[ gCharactersList[ iCounterA ].usSolID ].ubID; + uiIDA = gCharactersList[ iCounterA ].usSolID->ubID; if( !fReverse && ( uiIDA > uiID ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); @@ -14914,7 +14922,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse } // grab current soldier - pCurrentSoldier = &Menptr[ gCharactersList[ iCounterA ].usSolID ]; + pCurrentSoldier = gCharactersList[ iCounterA ].usSolID; // check if soldier is active if( pCurrentSoldier->bActive == FALSE ) @@ -14956,10 +14964,8 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse void SwapCharactersInList( INT32 iCharA, INT32 iCharB ) { - UINT16 usTempSoldID; - // swap - usTempSoldID = gCharactersList[ iCharA ].usSolID; + SoldierID usTempSoldID = gCharactersList[ iCharA ].usSolID; gCharactersList[ iCharA ].usSolID = gCharactersList[ iCharB ].usSolID; gCharactersList[ iCharB ].usSolID = usTempSoldID; } @@ -15055,7 +15061,7 @@ void HandleAssignmentsDoneAndAwaitingFurtherOrders( void ) break; } - pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier = gCharactersList[ iCounter ].usSolID; // toggle and redraw if flash was left ON even though the flag is OFF if( pSoldier->flags.fDoneAssignmentAndNothingToDoFlag || fFlashAssignDone ) @@ -15090,7 +15096,7 @@ void DisplayIconsForMercsAsleep( void ) { if( gCharactersList[ iCounter + FIRSTmercTOdisplay ].fValid == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter + FIRSTmercTOdisplay ].usSolID ]; + pSoldier = gCharactersList[ iCounter + FIRSTmercTOdisplay ].usSolID; if( pSoldier->bActive && pSoldier->flags.fMercAsleep && CanChangeSleepStatusForSoldier( pSoldier ) ) { BltVideoObject( guiSAVEBUFFER , hHandle, 0, UI_CHARLIST.xSleep + 2, ( INT16 )(UI_CHARLIST.y + (iCounter * ( Y_SIZE + 2 ) ) ) , VO_BLT_SRCTRANSPARENCY,NULL ); @@ -15175,7 +15181,7 @@ BOOLEAN CanToggleSelectedCharInventory( void ) return(FALSE); } - pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; // if not in inventory, and holding an item from sector inventory if( !fShowInventoryFlag && @@ -15216,7 +15222,7 @@ BOOLEAN MapCharacterHasAccessibleInventory( INT16 bCharNumber ) return(FALSE); } - pSoldier = MercPtrs[ gCharactersList[ bCharNumber ].usSolID ]; + pSoldier = gCharactersList[ bCharNumber ].usSolID; if( ( pSoldier->bAssignment == IN_TRANSIT ) || ( pSoldier->bAssignment == ASSIGNMENT_POW ) || @@ -15307,9 +15313,8 @@ void ChangeSelectedMapSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ ) fTeamPanelDirty = TRUE; } -BOOLEAN CanChangeDestinationForCharSlot( INT8 bCharNumber, BOOLEAN fShowErrorMessage ) +BOOLEAN CanChangeDestinationForCharSlot( INT16 bCharNumber, BOOLEAN fShowErrorMessage ) { - SOLDIERTYPE *pSoldier = NULL; INT8 bErrorNumber = -1; @@ -15319,7 +15324,7 @@ BOOLEAN CanChangeDestinationForCharSlot( INT8 bCharNumber, BOOLEAN fShowErrorMes if ( gCharactersList[ bCharNumber ].fValid == FALSE ) return (FALSE); - pSoldier = MercPtrs[ gCharactersList[ bCharNumber ].usSolID ]; + SOLDIERTYPE* pSoldier = gCharactersList[ bCharNumber ].usSolID; // valid soldier? Assert( pSoldier ); @@ -15344,18 +15349,15 @@ BOOLEAN CanChangeDestinationForCharSlot( INT8 bCharNumber, BOOLEAN fShowErrorMes -BOOLEAN CanExtendContractForCharSlot( INT8 bCharNumber ) +BOOLEAN CanExtendContractForCharSlot( INT16 bCharNumber ) { - SOLDIERTYPE *pSoldier = NULL; - - if ( bCharNumber == -1 ) return( FALSE ); if ( gCharactersList[ bCharNumber ].fValid == FALSE ) return (FALSE); - pSoldier = MercPtrs[ gCharactersList[ bCharNumber ].usSolID ]; + SOLDIERTYPE* pSoldier = gCharactersList[ bCharNumber ].usSolID; // valid soldier? Assert( pSoldier ); @@ -15385,20 +15387,15 @@ BOOLEAN CanExtendContractForCharSlot( INT8 bCharNumber ) } -BOOLEAN CanChangeSleepStatusForCharSlot( INT8 bCharNumber ) +BOOLEAN CanChangeSleepStatusForCharSlot( INT16 bCharNumber ) { - SOLDIERTYPE *pSoldier = NULL; - if ( bCharNumber == -1 ) return( FALSE ); if ( gCharactersList[ bCharNumber ].fValid == FALSE ) return (FALSE); - - pSoldier = MercPtrs[ gCharactersList[ bCharNumber ].usSolID ]; - - return( CanChangeSleepStatusForSoldier( pSoldier ) ); + return( CanChangeSleepStatusForSoldier(gCharactersList[bCharNumber].usSolID) ); } @@ -15503,7 +15500,7 @@ void CancelOrShortenPlottedPath( void ) return; // try to delete portion of path AFTER the current sector for the helicopter - uiReturnValue = ClearPathAfterThisSectorForCharacter( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID], sMapX, sMapY ); + uiReturnValue = ClearPathAfterThisSectorForCharacter( gCharactersList[GetSelectedDestChar()].usSolID, sMapX, sMapY ); } switch ( uiReturnValue ) @@ -15557,8 +15554,8 @@ BOOLEAN HandleCtrlOrShiftInTeamPanel( INT16 bCharNumber, BOOLEAN fFromRightClick // if not already selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == FALSE ) { - SOLDIERTYPE * pSelected = &( Menptr[ gCharactersList[ bCharNumber ].usSolID ] ); - SOLDIERTYPE * pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + SOLDIERTYPE * pSelected = gCharactersList[ bCharNumber ].usSolID; + SOLDIERTYPE * pSoldier = gCharactersList[ iCounter ].usSolID; // if on a squad, or in a vehicle, or IS a vehicle if ( pSoldier->bAssignment == VEHICLE ) @@ -15612,8 +15609,8 @@ BOOLEAN HandleCtrlOrShiftInTeamPanel( INT16 bCharNumber, BOOLEAN fFromRightClick // if not already selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - SOLDIERTYPE * pSelected = &( Menptr[ gCharactersList[ bCharNumber ].usSolID ] ); - SOLDIERTYPE * pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + SOLDIERTYPE * pSelected = gCharactersList[ bCharNumber ].usSolID; + SOLDIERTYPE * pSoldier = gCharactersList[ iCounter ].usSolID; // if on a squad, or in a vehicle, or IS a vehicle if ( pSoldier->bAssignment == VEHICLE ) @@ -15824,7 +15821,7 @@ void CopyPathToAllSelectedCharacters( PathStPtr pPath ) { if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // skip itself! if ( GetSoldierMercPathPtr( pSoldier ) != pPath ) @@ -15933,7 +15930,7 @@ INT32 GetGroundTravelTimeOfCharacter( INT8 bCharNumber ) iTravelTime = GetPathTravelTimeDuringPlotting( pTempCharacterPath ); // add travel time for any prior path segments (stored in the selected character's mercpath, but waypoints aren't built) - iTravelTime += GetPathTravelTimeDuringPlotting( GetSoldierMercPathPtr( MercPtrs[ gCharactersList[ bCharNumber ].usSolID ] ) ); + iTravelTime += GetPathTravelTimeDuringPlotting( GetSoldierMercPathPtr( gCharactersList[ bCharNumber ].usSolID ) ); return( iTravelTime ); } @@ -15961,7 +15958,7 @@ INT16 CalcLocationValueForChar( INT32 iCounter ) if( gCharactersList[ iCounter ].fValid == FALSE ) return( sLocValue ); - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // don't reveal location of POWs! if( pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND ) @@ -15996,7 +15993,7 @@ void MakeMapModesSuitableForDestPlotting( INT8 bCharNumber ) if( gCharactersList[ bCharNumber ].fValid == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ bCharNumber ].usSolID ]; + pSoldier = gCharactersList[ bCharNumber ].usSolID; CancelSectorInventoryDisplayIfOn( FALSE ); @@ -16296,7 +16293,7 @@ void RandomAwakeSelectedMercConfirmsStrategicMove( void ) { if( ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if ( pSoldier->stats.bLife >= OKLIFE && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pSoldier ) && !AM_AN_EPC( pSoldier ) && !pSoldier->flags.fMercAsleep ) @@ -16557,7 +16554,7 @@ void WakeUpAnySleepingSelectedMercsOnFootOrDriving( void ) { if( ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // if asleep if ( pSoldier->flags.fMercAsleep ) @@ -16850,10 +16847,10 @@ void RememberPreviousPathForAllSelectedChars( void ) { if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // remember his previous path by copying it to his slot in the array kept for that purpose - gpCharacterPreviousMercPath[ iCounter ] = CopyPaths( GetSoldierMercPathPtr( MercPtrs[ gCharactersList[ iCounter ].usSolID ] ), gpCharacterPreviousMercPath[ iCounter ] ); + gpCharacterPreviousMercPath[ iCounter ] = CopyPaths( GetSoldierMercPathPtr( gCharactersList[ iCounter ].usSolID ), gpCharacterPreviousMercPath[ iCounter ] ); } } } @@ -16967,7 +16964,7 @@ void RestorePreviousPaths( void ) // if selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { @@ -17068,7 +17065,7 @@ void SelectAllCharactersInSquad( INT8 bSquadNumber ) // is this entry is valid if( gCharactersList[ bCounter ].fValid == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ bCounter ].usSolID ]; + pSoldier = gCharactersList[ bCounter ].usSolID; // if this guy is on that squad or in a vehicle which is assigned to that squad // NOTE: There's no way to select everyone aboard Skyrider with this function... @@ -17198,7 +17195,7 @@ void RequestContractMenu( void ) if ( CanExtendContractForCharSlot( bSelectedInfoChar ) ) { // create - RebuildContractBoxForMerc( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ); + RebuildContractBoxForMerc( gCharactersList[ bSelectedInfoChar ].usSolID ); // reset selected characters ResetAllSelectedCharacterModes( ); @@ -17207,7 +17204,7 @@ void RequestContractMenu( void ) giContractHighLine = bSelectedContractChar; // if not triggered internally - if ( CheckIfSalaryIncreasedAndSayQuote( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], TRUE ) == FALSE ) + if ( CheckIfSalaryIncreasedAndSayQuote( gCharactersList[ bSelectedInfoChar ].usSolID, TRUE ) == FALSE ) { // show contract box fShowContractMenu = TRUE; @@ -17300,7 +17297,7 @@ INT32 GetTotalContractExpenses ( void ) while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // salary if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) { diff --git a/Strategic/mapscreen.h b/Strategic/mapscreen.h index e17da45b..ac0b53e5 100644 --- a/Strategic/mapscreen.h +++ b/Strategic/mapscreen.h @@ -150,7 +150,7 @@ void ChangeSelectedMapSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ ); BOOLEAN CanToggleSelectedCharInventory( void ); -BOOLEAN CanExtendContractForCharSlot( INT8 bCharNumber ); +BOOLEAN CanExtendContractForCharSlot( INT16 bCharNumber ); void TellPlayerWhyHeCantCompressTime( void ); @@ -168,7 +168,7 @@ void CancelChangeArrivalSectorMode( void ); void ExplainWhySkyriderCantFly( void ); -BOOLEAN CanChangeSleepStatusForCharSlot( INT8 bCharNumber ); +BOOLEAN CanChangeSleepStatusForCharSlot( INT16 bCharNumber ); BOOLEAN CanChangeSleepStatusForSoldier( SOLDIERTYPE *pSoldier ); BOOLEAN MapCharacterHasAccessibleInventory( INT16 bCharNumber ); diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index 92ef5863..ab4a8cb0 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -2362,16 +2362,17 @@ void addAmmoToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup ) } POPUP * createPopupForPocket( SOLDIERTYPE *pSoldier, INT16 sPocket ){ + SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID; if( !( guiCurrentItemDescriptionScreen == MAP_SCREEN - && fShowMapInventoryPool - && ( ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX == sSelMapX ) - && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY == sSelMapY ) - && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ == iCurrentMapSectorZ ) + && fShowMapInventoryPool + && ( ( pSelectedSoldier->sSectorX == sSelMapX ) + && ( pSelectedSoldier->sSectorY == sSelMapY ) + && ( pSelectedSoldier->bSectorZ == iCurrentMapSectorZ ) ) - && CanPlayerUseSectorInventory( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) - ) ) + && CanPlayerUseSectorInventory( pSelectedSoldier ) + ) ) { return NULL; } @@ -5853,13 +5854,14 @@ void UpdateAttachmentTooltips(OBJECTTYPE *pObject, UINT8 ubStatusIndex) } } BOOLEAN showAttachmentPopups = FALSE; + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if( guiCurrentItemDescriptionScreen == MAP_SCREEN && fShowMapInventoryPool - && ( (Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX == sSelMapX ) - && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY == sSelMapY ) - && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ == iCurrentMapSectorZ ) ) - && CanPlayerUseSectorInventory( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) + && ( (pSoldier->sSectorX == sSelMapX ) + && ( pSoldier->sSectorY == sSelMapY ) + && ( pSoldier->bSectorZ == iCurrentMapSectorZ ) ) + && CanPlayerUseSectorInventory( pSoldier ) && attachList.size()>0 ) // silversurfer: no need to show popups if we have nothing to display { showAttachmentPopups = TRUE; @@ -10546,18 +10548,20 @@ void ItemPopupRegionCallback( MOUSE_REGION * pRegion, INT32 iReason ) if (iReason & MSYS_CALLBACK_REASON_LBUTTON_DWN) { - if( ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX != sSelMapX ) || - ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY != sSelMapY ) || - ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ != iCurrentMapSectorZ ) || - ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].flags.fBetweenSectors ) ) + SOLDIERTYPE* pSelected = gCharactersList[bSelectedInfoChar].usSolID; + + if( ( pSelected->sSectorX != sSelMapX ) || + ( pSelected->sSectorY != sSelMapY ) || + ( pSelected->bSectorZ != iCurrentMapSectorZ ) || + ( pSelected->flags.fBetweenSectors ) ) { if ( gpItemPointer == NULL ) { - swprintf( sString, pMapInventoryErrorString[ 2 ], Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].name ); + swprintf( sString, pMapInventoryErrorString[ 2 ], pSelected->name ); } else { - swprintf( sString, pMapInventoryErrorString[ 5 ], Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].name ); + swprintf( sString, pMapInventoryErrorString[ 5 ], pSelected->name ); } DoMapMessageBox( MSG_BOX_BASIC_STYLE, sString, MAP_SCREEN, MSG_BOX_FLAG_OK, NULL ); return; @@ -12824,7 +12828,7 @@ void UpdateItemHatches() { if ( fShowInventoryFlag && bSelectedInfoChar >= 0 ) { - pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; } } else @@ -14539,7 +14543,7 @@ void UpdateMercBodyRegionHelpText( ) wcscpy( sString, L"" ); // valid soldier selected - pSoldier = MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]; + pSoldier = gCharactersList[bSelectedInfoChar].usSolID; // health/energy/morale if ( pSoldier->bAssignment != ASSIGNMENT_POW ) @@ -14551,7 +14555,7 @@ void UpdateMercBodyRegionHelpText( ) // robot (condition only) swprintf( sString, L"%s: %d/%d", pMapScreenStatusStrings[3], pSoldier->stats.bLife, pSoldier->stats.bLifeMax ); } - else if ( Menptr[gCharactersList[bSelectedInfoChar].usSolID].flags.uiStatusFlags & SOLDIER_VEHICLE ) + else if (pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { // vehicle (condition/fuel) swprintf( sString, L"%s: %d/%d, %s: %d/%d", diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index a397d28d..fee3becd 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -7320,9 +7320,7 @@ void KeyRingItemPanelButtonCallback( MOUSE_REGION * pRegion, INT32 iReason ) } - - - pSoldier = &( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ); + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; sStartYPosition = MAP_START_KEYRING_Y; sWidth = 261; sHeight = ( 359 - 107 ); @@ -7457,7 +7455,7 @@ void KeyRingSlotInvClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) } else { - UINT16 ubSrcID, ubDestID; + SoldierID ubSrcID, ubDestID; BOOLEAN fOKToGo = FALSE; BOOLEAN fDeductPoints = FALSE; diff --git a/Tactical/Item Types.cpp b/Tactical/Item Types.cpp index 324cde2e..7409cc2f 100644 --- a/Tactical/Item Types.cpp +++ b/Tactical/Item Types.cpp @@ -51,24 +51,24 @@ bool checkLBEArrayIntegrity(bool verbose) { if (!gCharactersList[i].fValid || gCharactersList[i].usSolID >= NOBODY) continue; SoldierID id = gCharactersList[i].usSolID; - SOLDIERTYPE soldier = Menptr[id]; + SOLDIERTYPE *soldier = id; - if (verbose)ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"LBENODE integrity check start: checking soldier items (%s)...", soldier.name); + if (verbose)ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"LBENODE integrity check start: checking soldier items (%s)...", soldier->name); - for (int j = 0; j < soldier.inv.size(); j++) { - OBJECTTYPE * object = &(soldier.inv[j]); + for (int j = 0; j < soldier->inv.size(); j++) { + OBJECTTYPE * object = &(soldier->inv[j]); if (object->HasAnyActiveLBEs()) { if (!checkObjectLBEIntegrity(object)) { - ScreenMsg(FONT_MCOLOR_LTRED, MSG_INTERFACE, L"> LBENODE missing: %s -> %s!", soldier.name, Item[object->usItem].szItemName); + ScreenMsg(FONT_MCOLOR_LTRED, MSG_INTERFACE, L"> LBENODE missing: %s -> %s!", soldier->name, Item[object->usItem].szItemName); integrityCheck = false; } else { - if (verbose)ScreenMsg(FONT_MCOLOR_LTGREEN, MSG_INTERFACE, L"> OK: %s -> %s", soldier.name, Item[object->usItem].szItemName); + if (verbose)ScreenMsg(FONT_MCOLOR_LTGREEN, MSG_INTERFACE, L"> OK: %s -> %s", soldier->name, Item[object->usItem].szItemName); } } else { - if (verbose)ScreenMsg(FONT_MCOLOR_LTGRAY, MSG_INTERFACE, L"> SKIP: %s -> %s", soldier.name, Item[object->usItem].szItemName); + if (verbose)ScreenMsg(FONT_MCOLOR_LTGRAY, MSG_INTERFACE, L"> SKIP: %s -> %s", soldier->name, Item[object->usItem].szItemName); } } } diff --git a/Tactical/Merc Hiring.cpp b/Tactical/Merc Hiring.cpp index 341f77c5..5df4fed2 100644 --- a/Tactical/Merc Hiring.cpp +++ b/Tactical/Merc Hiring.cpp @@ -502,7 +502,7 @@ void MercArrivesCallback( UINT16 ubSoldierID ) { if (gCharactersList[cnt].fValid) { - pTeamSoldier = &Menptr[gCharactersList[cnt].usSolID]; + pTeamSoldier = gCharactersList[cnt].usSolID; if (pTeamSoldier != pSoldier && pTeamSoldier->bAssignment != ASSIGNMENT_DEAD && pTeamSoldier->bAssignment != ASSIGNMENT_POW && pTeamSoldier->bAssignment != IN_TRANSIT && pSoldier->ubStrategicInsertionCode != INSERTION_CODE_CHOPPER) { force_helidrop = false; diff --git a/Tactical/SkillMenu.cpp b/Tactical/SkillMenu.cpp index 7965c62e..0b4cdaf7 100644 --- a/Tactical/SkillMenu.cpp +++ b/Tactical/SkillMenu.cpp @@ -1096,7 +1096,7 @@ EquipmentSelection::Functions(UINT32 aVal) } else if ( aVal < gTemplateVector.size( ) ) { - SOLDIERTYPE* pSoldier = &Menptr[gCharactersList[bSelectedInfoChar].usSolID]; + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if ( pSoldier ) { std::string name = gTemplateVector[aVal];