Convert to SoldierID

This commit is contained in:
Asdow
2024-11-17 23:45:48 +02:00
parent d149b6ffea
commit b74ccf3ddc
45 changed files with 376 additions and 375 deletions
+5 -5
View File
@@ -108,10 +108,10 @@ INT32 giCounterPeriodOverlay = 0;
BOOLEAN gfExitToNewSector = FALSE; BOOLEAN gfExitToNewSector = FALSE;
//UINT8 gubNewSectorExitDirection; //UINT8 gubNewSectorExitDirection;
BOOLEAN gfGameScreenLocateToSoldier = FALSE; BOOLEAN gfGameScreenLocateToSoldier = FALSE;
BOOLEAN gfEnteringMapScreen = FALSE; BOOLEAN gfEnteringMapScreen = FALSE;
UINT32 uiOldMouseCursor; UINT32 uiOldMouseCursor;
UINT16 gubPreferredInitialSelectedGuy = NOBODY; SoldierID gubPreferredInitialSelectedGuy = NOBODY;
BOOLEAN gfTacticalIsModal = FALSE; BOOLEAN gfTacticalIsModal = FALSE;
MOUSE_REGION gTacticalDisableRegion; MOUSE_REGION gTacticalDisableRegion;
@@ -1038,7 +1038,7 @@ void TacticalScreenLocateToSoldier( )
if ( gubPreferredInitialSelectedGuy != NOBODY ) if ( gubPreferredInitialSelectedGuy != NOBODY )
{ {
// ATE: Put condition here... // ATE: Put condition here...
if ( OK_CONTROLLABLE_MERC( MercPtrs[ gubPreferredInitialSelectedGuy ] ) && OK_INTERRUPT_MERC( MercPtrs[ gubPreferredInitialSelectedGuy ] ) ) if ( OK_CONTROLLABLE_MERC( gubPreferredInitialSelectedGuy ) && OK_INTERRUPT_MERC( gubPreferredInitialSelectedGuy ) )
{ {
LocateSoldier( gubPreferredInitialSelectedGuy, 10 ); LocateSoldier( gubPreferredInitialSelectedGuy, 10 );
SelectSoldier( gubPreferredInitialSelectedGuy, FALSE, TRUE ); SelectSoldier( gubPreferredInitialSelectedGuy, FALSE, TRUE );
+4 -4
View File
@@ -1,7 +1,7 @@
#ifndef _GAMESCREEN_H #ifndef _GAMESCREEN_H
#define _GAMESCREEN_H #define _GAMESCREEN_H
#include "Overhead Types.h"
#include "fade screen.h" #include "fade screen.h"
#define ARE_IN_FADE_IN( ) ( gfFadeIn || gfFadeInitialized ) #define ARE_IN_FADE_IN( ) ( gfFadeIn || gfFadeInitialized )
@@ -14,9 +14,9 @@ void FadeOutGameScreen( );
typedef void (*MODAL_HOOK)( void ); typedef void (*MODAL_HOOK)( void );
extern BOOLEAN gfGameScreenLocateToSoldier; extern BOOLEAN gfGameScreenLocateToSoldier;
extern BOOLEAN gfEnteringMapScreen; extern BOOLEAN gfEnteringMapScreen;
extern UINT16 gubPreferredInitialSelectedGuy; extern SoldierID gubPreferredInitialSelectedGuy;
void EnterMapScreen( ); void EnterMapScreen( );
+1 -1
View File
@@ -1091,7 +1091,7 @@ void EnemyHeliSAMCheck( INT16 id )
// also check whether this sector is not enemy-controlled - we can't have the AI shooting at its own helis // also check whether this sector is not enemy-controlled - we can't have the AI shooting at its own helis
if ( pSAMStrategicMap && !pSAMStrategicMap->fEnemyControlled ) if ( pSAMStrategicMap && !pSAMStrategicMap->fEnemyControlled )
{ {
UINT16 ubBestSAMOperatorID = NOBODY; SoldierID ubBestSAMOperatorID = NOBODY;
FLOAT samcth = GetBestSAMOperatorCTH_Player( gpSamSectorX[i], gpSamSectorY[i], 0, &ubBestSAMOperatorID ); FLOAT samcth = GetBestSAMOperatorCTH_Player( gpSamSectorX[i], gpSamSectorY[i], 0, &ubBestSAMOperatorID );
// cth is reduced if SAM is damaged, even if it can still operate // cth is reduced if SAM is damaged, even if it can still operate
+1 -1
View File
@@ -3776,7 +3776,7 @@ UINT32 CalculateSnitchInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPt
} }
// Flugente: Determine the best cth with SAMs in a sector, and which merc has that cth if present // Flugente: Determine the best cth with SAMs in a sector, and which merc has that cth if present
FLOAT GetBestSAMOperatorCTH_Player( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, UINT16 *pubID ) FLOAT GetBestSAMOperatorCTH_Player( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, SoldierID *pubID )
{ {
// if nobody is here, nobody can fire // if nobody is here, nobody can fire
FLOAT bestsamcth = 0.0f; FLOAT bestsamcth = 0.0f;
+1 -1
View File
@@ -318,7 +318,7 @@ UINT32 CalculatePrisonGuardValue(SOLDIERTYPE *pSoldier );
UINT32 CalculateSnitchInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts ); UINT32 CalculateSnitchInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts );
// Flugente: Determine the best cth with SAMs in a sector, and which merc has that cth if present // Flugente: Determine the best cth with SAMs in a sector, and which merc has that cth if present
FLOAT GetBestSAMOperatorCTH_Player( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, UINT16 *pubID ); FLOAT GetBestSAMOperatorCTH_Player( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, SoldierID *pubID );
INT16 GetTrainWorkerPts(SOLDIERTYPE *pSoldier); INT16 GetTrainWorkerPts(SOLDIERTYPE *pSoldier);
+1 -3
View File
@@ -3009,9 +3009,7 @@ void MercCellMouseClickCallback( MOUSE_REGION *reg, INT32 reason )
if( gpAR->pRobotCell ) if( gpAR->pRobotCell )
{ //if controller is retreating, make the robot retreat too. { //if controller is retreating, make the robot retreat too.
UINT16 ubRobotControllerID; SoldierID ubRobotControllerID = gpAR->pRobotCell->pSoldier->ubRobotRemoteHolderID;
ubRobotControllerID = gpAR->pRobotCell->pSoldier->ubRobotRemoteHolderID;
if( ubRobotControllerID == NOBODY ) if( ubRobotControllerID == NOBODY )
{ {
+61 -61
View File
@@ -293,7 +293,7 @@ BOOLEAN gfResetUIMovementOptimization = FALSE;
BOOLEAN gfResetUIItemCursorOptimization = FALSE; BOOLEAN gfResetUIItemCursorOptimization = FALSE;
BOOLEAN gfBeginVehicleCursor = FALSE; BOOLEAN gfBeginVehicleCursor = FALSE;
INT32 gsOutOfRangeGridNo = NOWHERE; INT32 gsOutOfRangeGridNo = NOWHERE;
UINT16 gubOutOfRangeMerc = NOBODY; SoldierID gubOutOfRangeMerc = NOBODY;
BOOLEAN gfOKForExchangeCursor = FALSE; BOOLEAN gfOKForExchangeCursor = FALSE;
UINT32 guiUIInterfaceSwapCursorsTime = 0; UINT32 guiUIInterfaceSwapCursorsTime = 0;
INT32 gsJumpOverGridNo = 0; INT32 gsJumpOverGridNo = 0;
@@ -463,29 +463,29 @@ BOOLEAN gfUICanBeginAllMoveCycle = FALSE; // GEts set so we know that the ne
INT32 gsSelectedGridNo = 0; INT32 gsSelectedGridNo = 0;
INT16 gsSelectedLevel = I_GROUND_LEVEL; INT16 gsSelectedLevel = I_GROUND_LEVEL;
INT16 gsSelectedGuy = NOBODY; SoldierID gsSelectedGuy = NOBODY;
BOOLEAN gfUIDisplayDamage = FALSE; BOOLEAN gfUIDisplayDamage = FALSE;
INT8 gbDamage = 0; INT8 gbDamage = 0;
INT32 gsDamageGridNo = 0; INT32 gsDamageGridNo = 0;
BOOLEAN gfUIRefreshArrows = FALSE; BOOLEAN gfUIRefreshArrows = FALSE;
// Thse flags are not re-set after each frame // Thse flags are not re-set after each frame
BOOLEAN gfPlotNewMovement = FALSE; BOOLEAN gfPlotNewMovement = FALSE;
BOOLEAN gfPlotNewMovementNOCOST = FALSE; BOOLEAN gfPlotNewMovementNOCOST = FALSE;
UINT32 guiShowUPDownArrows = ARROWS_HIDE_UP | ARROWS_HIDE_DOWN; UINT32 guiShowUPDownArrows = ARROWS_HIDE_UP | ARROWS_HIDE_DOWN;
INT8 gbAdjustStanceDiff = 0; INT8 gbAdjustStanceDiff = 0;
INT8 gbClimbID = 0; INT8 gbClimbID = 0;
BOOLEAN gfUIShowExitEast = FALSE; BOOLEAN gfUIShowExitEast = FALSE;
BOOLEAN gfUIShowExitWest = FALSE; BOOLEAN gfUIShowExitWest = FALSE;
BOOLEAN gfUIShowExitNorth = FALSE; BOOLEAN gfUIShowExitNorth = FALSE;
BOOLEAN gfUIShowExitSouth = FALSE; BOOLEAN gfUIShowExitSouth = FALSE;
BOOLEAN gfUIShowExitExitGrid = FALSE; BOOLEAN gfUIShowExitExitGrid = FALSE;
BOOLEAN gfUINewStateForIntTile = FALSE; BOOLEAN gfUINewStateForIntTile = FALSE;
BOOLEAN gfUIForceReExamineCursorData = FALSE; BOOLEAN gfUIForceReExamineCursorData = FALSE;
@@ -2210,7 +2210,7 @@ UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent )
// anv: if we selected vehicle driver, move his vehicle // anv: if we selected vehicle driver, move his vehicle
if ( pSoldier->flags.uiStatusFlags & (SOLDIER_DRIVER ) ) if ( pSoldier->flags.uiStatusFlags & (SOLDIER_DRIVER ) )
{ {
pSoldier = GetSoldierStructureForVehicle( MercPtrs[ pSoldier->ubID ]->iVehicleId ); pSoldier = GetSoldierStructureForVehicle( pSoldier->iVehicleId );
// anv: if shift is pressed, treat is as ram + move - flag has to be set for later add structure checks // anv: if shift is pressed, treat is as ram + move - flag has to be set for later add structure checks
if ( _KeyDown( SHIFT ) ) if ( _KeyDown( SHIFT ) )
{ {
@@ -2981,7 +2981,7 @@ UINT32 UIHandleCAMercShoot( UI_EVENT *pUIEvent )
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
// Get target soldier, if one exists // Get target soldier, if one exists
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
} }
if ( pTSoldier != NULL ) if ( pTSoldier != NULL )
@@ -3464,7 +3464,7 @@ BOOLEAN SelectedMercCanAffordMove( )
return( FALSE ); return( FALSE );
} }
void GetMercClimbDirection( UINT16 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ) void GetMercClimbDirection( SoldierID ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp )
{ {
INT8 bNewDirection; INT8 bNewDirection;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
@@ -3625,11 +3625,11 @@ void ToggleLookCursorMode( UINT32 *puiNewEvent )
BOOLEAN UIHandleOnMerc( BOOLEAN fMovementMode ) BOOLEAN UIHandleOnMerc( BOOLEAN fMovementMode )
{ {
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
UINT16 usSoldierIndex; SoldierID usSoldierIndex;
UINT32 uiMercFlags; UINT32 uiMercFlags;
INT32 usMapPos; INT32 usMapPos;
BOOLEAN fFoundMerc = FALSE; BOOLEAN fFoundMerc = FALSE;
if( !GetMouseMapPos( &usMapPos) ) if( !GetMouseMapPos( &usMapPos) )
{ {
@@ -3768,16 +3768,16 @@ BOOLEAN UIHandleOnMerc( BOOLEAN fMovementMode )
ErasePath( TRUE ); ErasePath( TRUE );
// Show cursor with highlight on selected merc // Show cursor with highlight on selected merc
guiNewUICursor = NO_UICURSOR; guiNewUICursor = NO_UICURSOR;
// Show cursor with highlight // Show cursor with highlight
gfUIHandleSelection = ENEMY_GUY_SELECTION; gfUIHandleSelection = ENEMY_GUY_SELECTION;
gsSelectedGridNo = pSoldier->sGridNo; gsSelectedGridNo = pSoldier->sGridNo;
gsSelectedLevel = pSoldier->pathing.bLevel; gsSelectedLevel = pSoldier->pathing.bLevel;
} }
} }
gfUIHandleSelectionAboveGuy = TRUE; gfUIHandleSelectionAboveGuy = TRUE;
gsSelectedGuy = usSoldierIndex; gsSelectedGuy = usSoldierIndex;
} }
} }
else else
@@ -3838,9 +3838,9 @@ UINT32 UIHandleIETOnTerrain( UI_EVENT *pUIEvent )
} }
void UIHandleSoldierStanceChange( UINT16 ubSoldierID, INT8 bNewStance ) void UIHandleSoldierStanceChange( SoldierID ubSoldierID, INT8 bNewStance )
{ {
SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ]; SOLDIERTYPE *pSoldier = ubSoldierID;
if( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) if( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) )
{ {
@@ -4058,7 +4058,7 @@ void GetCursorMovementFlags( UINT32 *puiCursorFlags )
BOOLEAN HandleUIMovementCursor( SOLDIERTYPE *pSoldier, UINT32 uiCursorFlags, INT32 usMapPos, UINT32 uiFlags ) BOOLEAN HandleUIMovementCursor( SOLDIERTYPE *pSoldier, UINT32 uiCursorFlags, INT32 usMapPos, UINT32 uiFlags )
{ {
BOOLEAN fSetCursor = FALSE; BOOLEAN fSetCursor = FALSE;
static UINT16 usTargetID = NOBODY; static SoldierID usTargetID = NOBODY;
static BOOLEAN fTargetFound = FALSE; static BOOLEAN fTargetFound = FALSE;
BOOLEAN fTargetFoundAndLookingForOne = FALSE; BOOLEAN fTargetFoundAndLookingForOne = FALSE;
@@ -4588,7 +4588,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
// Check if we are on a target // Check if we are on a target
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
sActionGridNo = FindAdjacentGridEx( pSoldier, MercPtrs[ gusUIFullTargetID ]->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); sActionGridNo = FindAdjacentGridEx( pSoldier, gusUIFullTargetID->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
if ( sActionGridNo == -1 ) if ( sActionGridNo == -1 )
{ {
sActionGridNo = sAdjustedGridNo; sActionGridNo = sAdjustedGridNo;
@@ -4596,7 +4596,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
///////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////
// CHANGED BY SANDRO - REDUCE AP COST TO STEAL FOR MARTIAL ARTS AND HAND TO HAND NEW TRAITS // CHANGED BY SANDRO - REDUCE AP COST TO STEAL FOR MARTIAL ARTS AND HAND TO HAND NEW TRAITS
if (MercPtrs[ gusUIFullTargetID ]->bCollapsed && gGameExternalOptions.fEnhancedCloseCombatSystem) if (gusUIFullTargetID->bCollapsed && gGameExternalOptions.fEnhancedCloseCombatSystem)
{ {
sAPCost += (GetBasicAPsToPickupItem( pSoldier )); // stealing from collapsed soldiers is treated differently sAPCost += (GetBasicAPsToPickupItem( pSoldier )); // stealing from collapsed soldiers is treated differently
} }
@@ -4641,7 +4641,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags )
{ {
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
sActionGridNo = FindAdjacentGridEx( pSoldier, MercPtrs[ gusUIFullTargetID ]->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); sActionGridNo = FindAdjacentGridEx( pSoldier, gusUIFullTargetID->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
if (!TileIsOutOfBounds(sActionGridNo)) if (!TileIsOutOfBounds(sActionGridNo))
{ {
@@ -4813,7 +4813,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
{ {
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; usMapPos = gusUIFullTargetID->sGridNo;
} }
if ( IsRepairableStructAtGridNo( usMapPos, NULL ) && pSoldier->pathing.bLevel == 0 ) if ( IsRepairableStructAtGridNo( usMapPos, NULL ) && pSoldier->pathing.bLevel == 0 )
@@ -4830,7 +4830,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
{ {
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; usMapPos = gusUIFullTargetID->sGridNo;
} }
if ( IsRefuelableStructAtGridNo( usMapPos, NULL ) && pSoldier->pathing.bLevel == 0 ) if ( IsRefuelableStructAtGridNo( usMapPos, NULL ) && pSoldier->pathing.bLevel == 0 )
@@ -4847,7 +4847,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
{ {
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; usMapPos = gusUIFullTargetID->sGridNo;
} }
if ( pSoldier->pathing.bLevel == 0 ) if ( pSoldier->pathing.bLevel == 0 )
@@ -4874,7 +4874,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
{ {
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
usMapPos = MercPtrs[gusUIFullTargetID]->sGridNo; usMapPos = gusUIFullTargetID->sGridNo;
} }
UINT16 structindex; UINT16 structindex;
@@ -4893,7 +4893,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
{ {
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; usMapPos = gusUIFullTargetID->sGridNo;
return( TRUE ); return( TRUE );
} }
@@ -4916,7 +4916,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
{ {
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
if ( pSoldier->ubID != gusUIFullTargetID && MercPtrs[gusUIFullTargetID]->IsValidBloodDonor() ) if ( pSoldier->ubID != gusUIFullTargetID && gusUIFullTargetID->IsValidBloodDonor() )
return( TRUE ); return( TRUE );
} }
} }
@@ -4930,7 +4930,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
{ {
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
if ( pSoldier->ubID != gusUIFullTargetID && MercPtrs[gusUIFullTargetID]->CanReceiveSplint() ) if ( pSoldier->ubID != gusUIFullTargetID && gusUIFullTargetID->CanReceiveSplint() )
return( TRUE ); return( TRUE );
} }
} }
@@ -4944,7 +4944,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
{ {
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; usMapPos = gusUIFullTargetID->sGridNo;
return( TRUE ); return( TRUE );
} }
@@ -4998,7 +4998,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
} }
// IF a guy's here, chack if they need medical help! // IF a guy's here, chack if they need medical help!
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
// If we are a vehicle... // If we are a vehicle...
if ( ( pTSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_ROBOT ) ) ) if ( ( pTSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_ROBOT ) ) )
@@ -5578,12 +5578,12 @@ UINT32 UIHandleLCLook( UI_EVENT *pUIEvent )
UINT32 UIHandleTOnTerrain( UI_EVENT *pUIEvent ) UINT32 UIHandleTOnTerrain( UI_EVENT *pUIEvent )
{ {
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
UINT16 ubTargID; SoldierID ubTargID;
UINT32 uiRange; UINT32 uiRange;
INT32 usMapPos; INT32 usMapPos;
BOOLEAN fValidTalkableGuy = FALSE; BOOLEAN fValidTalkableGuy = FALSE;
INT32 sTargetGridNo; INT32 sTargetGridNo;
// Get soldier // Get soldier
if ( !GetSoldier( &pSoldier, gusSelectedSoldier ) ) if ( !GetSoldier( &pSoldier, gusSelectedSoldier ) )
@@ -5616,7 +5616,7 @@ UINT32 UIHandleTOnTerrain( UI_EVENT *pUIEvent )
// Get distance away // Get distance away
if ( fValidTalkableGuy ) if ( fValidTalkableGuy )
{ {
sTargetGridNo = MercPtrs[ ubTargID ]->sGridNo; sTargetGridNo = ubTargID->sGridNo;
} }
uiRange = PythSpacesAway( pSoldier->sGridNo, sTargetGridNo ); uiRange = PythSpacesAway( pSoldier->sGridNo, sTargetGridNo );
@@ -6365,7 +6365,7 @@ UINT32 UIHandleLAEndLockOurTurn( UI_EVENT *pUIEvent )
BOOLEAN IsValidTalkableNPCFromMouse( UINT16 * pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ) BOOLEAN IsValidTalkableNPCFromMouse( SoldierID *pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed )
{ {
// Check if there is a guy here to talk to! // Check if there is a guy here to talk to!
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
@@ -6790,7 +6790,7 @@ INT8 UIHandleInteractiveTilesAndItemsOnTerrain( SOLDIERTYPE *pSoldier, INT32 usM
// unless we are over our own vehicle, then we can call vehicle menu // unless we are over our own vehicle, then we can call vehicle menu
if( gfUIFullTargetFound ) if( gfUIFullTargetFound )
{ {
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
if( pSoldier->iVehicleId == pTSoldier->bVehicleID ) if( pSoldier->iVehicleId == pTSoldier->bVehicleID )
{ {
guiNewUICursor = ENTER_VEHICLE_UICURSOR; guiNewUICursor = ENTER_VEHICLE_UICURSOR;
@@ -6803,7 +6803,7 @@ INT8 UIHandleInteractiveTilesAndItemsOnTerrain( SOLDIERTYPE *pSoldier, INT32 usM
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
// anv: added condition - make sure we won't put vehicle in another vehicle // anv: added condition - make sure we won't put vehicle in another vehicle
if ( OK_ENTERABLE_VEHICLE( pTSoldier ) && pTSoldier->bVisible != -1 && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER | SOLDIER_VEHICLE ) ) ) if ( OK_ENTERABLE_VEHICLE( pTSoldier ) && pTSoldier->bVisible != -1 && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER | SOLDIER_VEHICLE ) ) )
@@ -7198,7 +7198,7 @@ BOOLEAN ValidQuickExchangePosition( )
// Check if we over a civ // Check if we over a civ
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
pOverSoldier = MercPtrs[ gusUIFullTargetID ]; pOverSoldier = gusUIFullTargetID;
//KM: Replaced this older if statement for the new one which allows exchanging with militia //KM: Replaced this older if statement for the new one which allows exchanging with militia
//if ( ( pOverSoldier->bSide != gbPlayerNum ) && pOverSoldier->aiData.bNeutral ) //if ( ( pOverSoldier->bSide != gbPlayerNum ) && pOverSoldier->aiData.bNeutral )
@@ -7265,7 +7265,7 @@ BOOLEAN IsValidJumpLocation( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fChec
INT32 sFourGrids[4], sDistance=0, sSpot, sInBetween, sInBetween2, iDoorGridNo; INT32 sFourGrids[4], sDistance=0, sSpot, sInBetween, sInBetween2, iDoorGridNo;
static const UINT8 sDirs[4] = { NORTH, EAST, SOUTH, WEST }; static const UINT8 sDirs[4] = { NORTH, EAST, SOUTH, WEST };
//INT32 cnt; //INT32 cnt;
UINT16 ubGuyThere; SoldierID ubGuyThere;
UINT8 ubMovementCost, ubDirection; UINT8 ubMovementCost, ubDirection;
INT8 bTileHeight = 0; INT8 bTileHeight = 0;
@@ -7370,7 +7370,7 @@ BOOLEAN IsValidJumpLocation( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fChec
ubGuyThere = WhoIsThere2( sInBetween, pSoldier->pathing.bLevel ); ubGuyThere = WhoIsThere2( sInBetween, pSoldier->pathing.bLevel );
if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID ) if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID )
{ {
if ( gAnimControl[ MercPtrs[ ubGuyThere ]->usAnimState ].ubHeight != ANIM_PRONE ) if ( gAnimControl[ ubGuyThere->usAnimState ].ubHeight != ANIM_PRONE )
{ {
return( FALSE ); return( FALSE );
} }
@@ -7444,12 +7444,12 @@ BOOLEAN IsValidJumpLocation( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fChec
// If there's a guy on any of the two middle tiles, and he's not prone, we can't jump over him // If there's a guy on any of the two middle tiles, and he's not prone, we can't jump over him
ubGuyThere = WhoIsThere2( sInBetween, pSoldier->pathing.bLevel ); ubGuyThere = WhoIsThere2( sInBetween, pSoldier->pathing.bLevel );
if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID && gAnimControl[ MercPtrs[ ubGuyThere ]->usAnimState ].ubHeight != ANIM_PRONE ) if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID && gAnimControl[ ubGuyThere->usAnimState ].ubHeight != ANIM_PRONE )
{ {
return( FALSE ); return( FALSE );
} }
ubGuyThere = WhoIsThere2( sInBetween2, pSoldier->pathing.bLevel ); ubGuyThere = WhoIsThere2( sInBetween2, pSoldier->pathing.bLevel );
if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID && gAnimControl[ MercPtrs[ ubGuyThere ]->usAnimState ].ubHeight != ANIM_PRONE ) if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID && gAnimControl[ ubGuyThere->usAnimState ].ubHeight != ANIM_PRONE )
{ {
return( FALSE ); return( FALSE );
} }
+4 -4
View File
@@ -198,7 +198,7 @@ extern UINT32 guiShowUPDownArrows;
extern BOOLEAN gfUIHandleSelection; extern BOOLEAN gfUIHandleSelection;
extern BOOLEAN gfUIHandleSelectionAboveGuy; extern BOOLEAN gfUIHandleSelectionAboveGuy;
extern INT32 gsSelectedGridNo; extern INT32 gsSelectedGridNo;
extern INT16 gsSelectedGuy; extern SoldierID gsSelectedGuy;
extern BOOLEAN gfUIInDeadlock; extern BOOLEAN gfUIInDeadlock;
extern UINT16 gUIDeadlockedSoldier; extern UINT16 gUIDeadlockedSoldier;
@@ -320,13 +320,13 @@ void AdjustSoldierCreationStartValues( );
BOOLEAN SelectedMercCanAffordAttack( ); BOOLEAN SelectedMercCanAffordAttack( );
BOOLEAN SelectedMercCanAffordMove( ); BOOLEAN SelectedMercCanAffordMove( );
void GetMercClimbDirection( UINT16 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ); void GetMercClimbDirection( SoldierID ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp );
void ToggleHandCursorMode( UINT32 *puiNewEvent ); void ToggleHandCursorMode( UINT32 *puiNewEvent );
void ToggleTalkCursorMode( UINT32 *puiNewEvent ); void ToggleTalkCursorMode( UINT32 *puiNewEvent );
void ToggleLookCursorMode( UINT32 *puiNewEvent ); void ToggleLookCursorMode( UINT32 *puiNewEvent );
void UIHandleSoldierStanceChange( UINT16 ubSoldierID, INT8 bNewStance ); void UIHandleSoldierStanceChange( SoldierID ubSoldierID, INT8 bNewStance );
void GetCursorMovementFlags( UINT32 *puiCursorFlags ); void GetCursorMovementFlags( UINT32 *puiCursorFlags );
BOOLEAN HandleUIMovementCursor( SOLDIERTYPE *pSoldier, UINT32 uiCursorFlags, INT32 usMapPos, UINT32 uiFlags ); BOOLEAN HandleUIMovementCursor( SOLDIERTYPE *pSoldier, UINT32 uiCursorFlags, INT32 usMapPos, UINT32 uiFlags );
@@ -334,7 +334,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier );
BOOLEAN UIOkForItemPickup( SOLDIERTYPE *pSoldier, INT32 sGridNo ); BOOLEAN UIOkForItemPickup( SOLDIERTYPE *pSoldier, INT32 sGridNo );
BOOLEAN IsValidTalkableNPCFromMouse( UINT16 * pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); BOOLEAN IsValidTalkableNPCFromMouse( SoldierID *pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed );
BOOLEAN IsValidTalkableNPC( SoldierID ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); BOOLEAN IsValidTalkableNPC( SoldierID ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed );
BOOLEAN HandleTalkInit( ); BOOLEAN HandleTalkInit( );
+1 -1
View File
@@ -335,7 +335,7 @@ BOOLEAN DrawUICursor( )
// If we are over a target, jump to that.... // If we are over a target, jump to that....
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
gusTargetDropPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; gusTargetDropPos = gusUIFullTargetID->sGridNo;
} }
// Put tile on the floor // Put tile on the floor
+22 -22
View File
@@ -8773,23 +8773,23 @@ BOOLEAN SoldierCanSeeCatchComing( SOLDIERTYPE *pSoldier, INT32 sSrcGridNo )
void DrawItemTileCursor( ) void DrawItemTileCursor( )
{ {
INT32 usMapPos; INT32 usMapPos;
UINT16 usIndex; UINT16 usIndex;
UINT16 ubSoldierID; SoldierID ubSoldierID;
INT16 sAPCost; INT16 sAPCost;
BOOLEAN fRecalc; BOOLEAN fRecalc;
UINT32 uiCursorFlags; UINT32 uiCursorFlags;
INT32 sFinalGridNo; INT32 sFinalGridNo;
UINT32 uiCursorId = CURSOR_ITEM_GOOD_THROW; UINT32 uiCursorId = CURSOR_ITEM_GOOD_THROW;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
BOOLEAN fGiveItem = FALSE; BOOLEAN fGiveItem = FALSE;
INT32 sActionGridNo; INT32 sActionGridNo;
UINT8 ubDirection; UINT8 ubDirection;
static UINT32 uiOldCursorId = 0; static UINT32 uiOldCursorId = 0;
static UINT16 usOldMousePos = 0; static UINT16 usOldMousePos = 0;
INT16 sEndZ = 0; INT16 sEndZ = 0;
INT16 sDist; INT16 sDist;
INT8 bLevel; INT8 bLevel;
if (GetMouseMapPos( &usMapPos) ) if (GetMouseMapPos( &usMapPos) )
{ {
@@ -9120,15 +9120,15 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos )
} }
UINT8 ubDirection; UINT8 ubDirection;
UINT16 ubSoldierID; SoldierID ubSoldierID;
UINT16 usItem; UINT16 usItem;
INT16 sAPCost; INT16 sAPCost;
SOLDIERTYPE *pSoldier=NULL; SOLDIERTYPE *pSoldier=NULL;
UINT8 ubThrowActionCode=0; UINT8 ubThrowActionCode=0;
UINT32 uiThrowActionData=0; UINT32 uiThrowActionData=0;
INT16 sEndZ = 0; INT16 sEndZ = 0;
BOOLEAN fGiveItem = FALSE; BOOLEAN fGiveItem = FALSE;
INT32 sGridNo; INT32 sGridNo;
INT16 sDist; INT16 sDist;
+3 -3
View File
@@ -6403,10 +6403,10 @@ void ShowRadioLocator( SoldierID ubID, UINT8 ubLocatorSpeed )
} }
} }
void EndRadioLocator( UINT16 ubID ) void EndRadioLocator( SoldierID ubID )
{ {
MercPtrs[ ubID ]->flags.fFlashLocator = FALSE; ubID->flags.fFlashLocator = FALSE;
MercPtrs[ ubID ]->flags.fShowLocator = FALSE; ubID->flags.fShowLocator = FALSE;
} }
+1 -1
View File
@@ -108,7 +108,7 @@ extern INT8 gbNewItemCycle[ NUM_INV_SLOTS ];
extern UINT8 gubNewItemMerc; extern UINT8 gubNewItemMerc;
void ShowRadioLocator( SoldierID ubID, UINT8 ubLocatorSpeed ); void ShowRadioLocator( SoldierID ubID, UINT8 ubLocatorSpeed );
void EndRadioLocator( UINT16 ubID ); void EndRadioLocator( SoldierID ubID );
extern MOUSE_REGION gSMPanelRegion; extern MOUSE_REGION gSMPanelRegion;
+1 -1
View File
@@ -1667,7 +1667,7 @@ void DrawCTHPixelToBuffer( UINT16 *pBuffer, UINT32 uiPitch, INT16 sLeft, INT16 s
//QUOTE_SYSTEM_STRUCT soldierTTInfo; //QUOTE_SYSTEM_STRUCT soldierTTInfo;
void DrawSelectedUIAboveGuy( UINT16 usSoldierID ) void DrawSelectedUIAboveGuy( SoldierID usSoldierID )
{ {
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
INT16 sXPos, sYPos; INT16 sXPos, sYPos;
+1 -1
View File
@@ -458,7 +458,7 @@ void HandleInterfaceBackgrounds( );
void BeginOverlayMessage( UINT32 uiFont, STR16 pFontString, ... ); void BeginOverlayMessage( UINT32 uiFont, STR16 pFontString, ... );
void EndOverlayMessage( ); void EndOverlayMessage( );
void DrawSelectedUIAboveGuy( UINT16 usSoldierID ); void DrawSelectedUIAboveGuy( SoldierID usSoldierID );
// HEADROCK HAM 4: Draw the CTH indicator, using values grabbed from the global CTH array // HEADROCK HAM 4: Draw the CTH indicator, using values grabbed from the global CTH array
BOOLEAN DrawCTHIndicator(); BOOLEAN DrawCTHIndicator();
+38 -38
View File
@@ -355,7 +355,7 @@ UINT8 ubHeliScripts[ NUM_HELI_STATES ][ MAX_HELI_SCRIPT ] =
BOOLEAN gfHandleHeli = FALSE; BOOLEAN gfHandleHeli = FALSE;
UINT16 gusHeliSeats[ MAX_MERC_IN_HELI ]; SoldierID gusHeliSeats[ MAX_MERC_IN_HELI ];
INT8 gbNumHeliSeatsOccupied = 0; INT8 gbNumHeliSeatsOccupied = 0;
BOOLEAN gfFirstGuyDown = FALSE; BOOLEAN gfFirstGuyDown = FALSE;
@@ -392,7 +392,7 @@ void ResetHeliSeats( )
gbNumHeliSeatsOccupied = 0; gbNumHeliSeatsOccupied = 0;
} }
void AddMercToHeli( UINT16 ubID ) void AddMercToHeli( SoldierID ubID )
{ {
if ( gbNumHeliSeatsOccupied < MAX_MERC_IN_HELI ) if ( gbNumHeliSeatsOccupied < MAX_MERC_IN_HELI )
{ {
@@ -502,21 +502,21 @@ void HandleHeliDrop( BOOLEAN fPlayer )
{ {
// Add merc to sector // Add merc to sector
#ifdef JA2UB #ifdef JA2UB
//MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; //gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH;
MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
MercPtrs[ gusHeliSeats[ cnt ] ]->usStrategicInsertionData = gGameUBOptions.LOCATEGRIDNO; gusHeliSeats[ cnt ]->usStrategicInsertionData = gGameUBOptions.LOCATEGRIDNO;
#else #else
//MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; //gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH;
MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
MercPtrs[ gusHeliSeats[ cnt ] ]->usStrategicInsertionData = gGameExternalOptions.iInitialMercArrivalLocation; gusHeliSeats[ cnt ]->usStrategicInsertionData = gGameExternalOptions.iInitialMercArrivalLocation;
#endif #endif
// HEADROCK HAM 3.5: Externalized! // HEADROCK HAM 3.5: Externalized!
UpdateMercInSector( MercPtrs[ gusHeliSeats[ cnt ] ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ ); UpdateMercInSector( gusHeliSeats[ cnt ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ );
// Check for merc arrives quotes... // Check for merc arrives quotes...
HandleMercArrivesQuotes( MercPtrs[ gusHeliSeats[ cnt ] ] ); HandleMercArrivesQuotes( gusHeliSeats[ cnt ] );
ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], MercPtrs[ gusHeliSeats[ cnt ] ]->GetName() ); ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], gusHeliSeats[ cnt ]->GetName() );
} }
@@ -558,23 +558,23 @@ void HandleHeliDrop( BOOLEAN fPlayer )
{ {
// Add merc to sector // Add merc to sector
#ifdef JA2UB #ifdef JA2UB
//MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; //gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH;
MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
MercPtrs[ gusHeliSeats[ cnt ] ]->usStrategicInsertionData = gGameUBOptions.LOCATEGRIDNO; gusHeliSeats[ cnt ]->usStrategicInsertionData = gGameUBOptions.LOCATEGRIDNO;
#else #else
//MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; //gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH;
MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
// sevenfm: if soldiers land into enemy sector, use gsGridNoSweetSpot // sevenfm: if soldiers land into enemy sector, use gsGridNoSweetSpot
//MercPtrs[ gusHeliSeats[ cnt ] ]->usStrategicInsertionData = gGameExternalOptions.iInitialMercArrivalLocation; //gusHeliSeats[ cnt ]->usStrategicInsertionData = gGameExternalOptions.iInitialMercArrivalLocation;
MercPtrs[gusHeliSeats[cnt]]->usStrategicInsertionData = gsGridNoSweetSpot; gusHeliSeats[ cnt ]->usStrategicInsertionData = gsGridNoSweetSpot;
#endif #endif
// HEADROCK HAM 3.5: Externalized! // HEADROCK HAM 3.5: Externalized!
UpdateMercInSector( MercPtrs[ gusHeliSeats[ cnt ] ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ ); UpdateMercInSector( gusHeliSeats[ cnt ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ );
// Check for merc arrives quotes... // Check for merc arrives quotes...
HandleMercArrivesQuotes( MercPtrs[ gusHeliSeats[ cnt ] ] ); HandleMercArrivesQuotes( gusHeliSeats[ cnt ] );
ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], MercPtrs[ gusHeliSeats[ cnt ] ]->GetName() ); ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], gusHeliSeats[ cnt ]->GetName() );
} }
// Remove heli // Remove heli
@@ -698,24 +698,24 @@ void HandleHeliDrop( BOOLEAN fPlayer )
{ {
// Flugente: it is now possible to use airdrops with soldiers after they have arrived in Arulco. In that case, they might have an animation that breaks EVENT_InitNewSoldierAnim prematurely. // Flugente: it is now possible to use airdrops with soldiers after they have arrived in Arulco. In that case, they might have an animation that breaks EVENT_InitNewSoldierAnim prematurely.
// In the worst case, this can cause the game to be unable to finish the airdrop. For that reason, we set all those soldiers to the STANDING animation. // In the worst case, this can cause the game to be unable to finish the airdrop. For that reason, we set all those soldiers to the STANDING animation.
MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->usAnimState = STANDING; gusHeliSeats[ gbCurDrop ]->usAnimState = STANDING;
MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->EVENT_InitNewSoldierAnim( HELIDROP, 0 , FALSE ); gusHeliSeats[ gbCurDrop ]->EVENT_InitNewSoldierAnim( HELIDROP, 0 , FALSE );
// Change insertion code // Change insertion code
MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; gusHeliSeats[ gbCurDrop ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->usStrategicInsertionData = gsGridNoSweetSpot; gusHeliSeats[ gbCurDrop ]->usStrategicInsertionData = gsGridNoSweetSpot;
// HEADROCK HAM 3.5: Externalized! // HEADROCK HAM 3.5: Externalized!
UpdateMercInSector( MercPtrs[ gusHeliSeats[ gbCurDrop ] ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ ); UpdateMercInSector( gusHeliSeats[ gbCurDrop ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ );
//EVENT_SetSoldierPosition( MercPtrs[ gusHeliSeats[ gbCurDrop ] ], sWorldX, sWorldY ); //EVENT_SetSoldierPosition( gusHeliSeats[ gbCurDrop ], sWorldX, sWorldY );
// IF the first guy down, set squad! // IF the first guy down, set squad!
if ( gfFirstGuyDown ) if ( gfFirstGuyDown )
{ {
gfFirstGuyDown = FALSE; gfFirstGuyDown = FALSE;
SetCurrentSquad( MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->bAssignment, TRUE ); SetCurrentSquad( gusHeliSeats[ gbCurDrop ]->bAssignment, TRUE );
} }
ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->GetName() ); ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], gusHeliSeats[ gbCurDrop ]->GetName() );
++gbCurDrop; ++gbCurDrop;
@@ -1024,7 +1024,7 @@ void HandleFirstHeliDropOfGame( )
CharacterDialogueWithSpecialEvent( 0, 0, 0, DIALOGUE_TACTICAL_UI , FALSE , FALSE , DIALOGUE_SPECIAL_EVENT_ENABLE_AI ,0, 0 ); CharacterDialogueWithSpecialEvent( 0, 0, 0, DIALOGUE_TACTICAL_UI , FALSE , FALSE , DIALOGUE_SPECIAL_EVENT_ENABLE_AI ,0, 0 );
} }
UINT16 SpawnAirDropElite( INT32 sGridNo ) SoldierID SpawnAirDropElite( INT32 sGridNo )
{ {
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
@@ -1076,7 +1076,7 @@ void InitiateEnemyAirDropSoldiers( INT32 sGridNo )
for ( int i = 0; i < 6; ++i ) for ( int i = 0; i < 6; ++i )
{ {
UINT16 id = SpawnAirDropElite( gMapInformation.sSouthGridNo + i ); SoldierID id = SpawnAirDropElite( gMapInformation.sSouthGridNo + i );
if ( id == NOBODY ) if ( id == NOBODY )
return; return;
@@ -1192,23 +1192,23 @@ void HandleEnemyAirdrop( )
{ {
// Flugente: it is now possible to use airdrops with soldiers after they have arrived in Arulco. In that case, they might have an animation that breaks EVENT_InitNewSoldierAnim prematurely. // Flugente: it is now possible to use airdrops with soldiers after they have arrived in Arulco. In that case, they might have an animation that breaks EVENT_InitNewSoldierAnim prematurely.
// In the worst case, this can cause the game to be unable to finish the airdrop. For that reason, we set all those soldiers to the STANDING aniamtion. // In the worst case, this can cause the game to be unable to finish the airdrop. For that reason, we set all those soldiers to the STANDING aniamtion.
//MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->usAnimState = STANDING; //gusHeliSeats[ gbCurDrop ]->usAnimState = STANDING;
MercPtrs[gusHeliSeats[gbCurDrop]]->EVENT_InitNewSoldierAnim( HELIDROP, 0, FALSE ); gusHeliSeats[gbCurDrop]->EVENT_InitNewSoldierAnim( HELIDROP, 0, FALSE );
// Change insertion code // Change insertion code
MercPtrs[gusHeliSeats[gbCurDrop]]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; gusHeliSeats[gbCurDrop]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
MercPtrs[gusHeliSeats[gbCurDrop]]->usStrategicInsertionData = gsGridNoSweetSpot; gusHeliSeats[gbCurDrop]->usStrategicInsertionData = gsGridNoSweetSpot;
// HEADROCK HAM 3.5: Externalized! // HEADROCK HAM 3.5: Externalized!
UpdateMercInSector( MercPtrs[gusHeliSeats[gbCurDrop]], gWorldSectorX, gWorldSectorY, startingZ ); UpdateMercInSector( gusHeliSeats[gbCurDrop], gWorldSectorX, gWorldSectorY, startingZ );
// IF the first guy down, set squad! // IF the first guy down, set squad!
if ( gfFirstGuyDown ) if ( gfFirstGuyDown )
{ {
gfFirstGuyDown = FALSE; gfFirstGuyDown = FALSE;
//SetCurrentSquad( MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->bAssignment, TRUE ); //SetCurrentSquad( gusHeliSeats[ gbCurDrop ]->bAssignment, TRUE );
} }
ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[MERC_HAS_ARRIVED_STR], MercPtrs[gusHeliSeats[gbCurDrop]]->GetName( ) ); ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[MERC_HAS_ARRIVED_STR], gusHeliSeats[gbCurDrop]->GetName( ) );
++gbCurDrop; ++gbCurDrop;
+2 -2
View File
@@ -425,7 +425,7 @@ INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc)
} }
void MercArrivesCallback( UINT16 ubSoldierID ) void MercArrivesCallback( SoldierID ubSoldierID )
{ {
MERCPROFILESTRUCT *pMerc; MERCPROFILESTRUCT *pMerc;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
@@ -457,7 +457,7 @@ void MercArrivesCallback( UINT16 ubSoldierID )
// stop time compression until player restarts it // stop time compression until player restarts it
StopTimeCompression(); StopTimeCompression();
pSoldier = &Menptr[ ubSoldierID ]; pSoldier = ubSoldierID;
pMerc = &gMercProfiles[ pSoldier->ubProfile ]; pMerc = &gMercProfiles[ pSoldier->ubProfile ];
+1 -1
View File
@@ -46,7 +46,7 @@ extern INT16 gsMercArriveSectorY;
INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc); INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc);
void MercArrivesCallback( UINT16 ubSoldierID ); void MercArrivesCallback( SoldierID ubSoldierID );
BOOLEAN IsMercHireable( UINT8 ubMercID ); BOOLEAN IsMercHireable( UINT8 ubMercID );
BOOLEAN IsMercDead( UINT8 ubMercID ); BOOLEAN IsMercDead( UINT8 ubMercID );
UINT16 NumberOfMercsOnPlayerTeam(); UINT16 NumberOfMercsOnPlayerTeam();
+1 -1
View File
@@ -361,7 +361,7 @@ typedef CHAR8 PaletteRepID[ 30 ];
typedef struct typedef struct
{ {
UINT8 ubType; UINT8 ubType;
PaletteRepID ID; PaletteRepID ID;
UINT8 ubPaletteSize; UINT8 ubPaletteSize;
UINT8 *r; UINT8 *r;
UINT8 *g; UINT8 *g;
+2 -2
View File
@@ -1489,7 +1489,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
{ {
if( gfUIFullTargetFound ) if( gfUIFullTargetFound )
{ {
if ( IsValidTalkableNPC( gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && MercPtrs[ gusUIFullTargetID ]->bTeam != ENEMY_TEAM && !ValidQuickExchangePosition( ) ) if ( IsValidTalkableNPC( gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && gusUIFullTargetID->bTeam != ENEMY_TEAM && !ValidQuickExchangePosition( ) )
{ {
uiMoveTargetSoldierId = gusUIFullTargetID; uiMoveTargetSoldierId = gusUIFullTargetID;
*puiNewEvent = T_CHANGE_TO_TALKING; *puiNewEvent = T_CHANGE_TO_TALKING;
@@ -1536,7 +1536,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
{ {
guiUITargetSoldierId = gusUIFullTargetID; guiUITargetSoldierId = gusUIFullTargetID;
if ( MercPtrs[ gusUIFullTargetID ]->bTeam != gbPlayerNum ) if ( gusUIFullTargetID->bTeam != gbPlayerNum )
{ {
fOnValidGuy = TRUE; fOnValidGuy = TRUE;
} }
+59 -59
View File
@@ -788,65 +788,65 @@ public:
void ConvertFrom_101_To_102(const OLDSOLDIERTYPE_101& src); void ConvertFrom_101_To_102(const OLDSOLDIERTYPE_101& src);
public: public:
// AI STUFF from before the changes to the memory structure // AI STUFF from before the changes to the memory structure
INT8 bOppList[MAX_NUM_SOLDIERS]; // AI knowledge database INT8 bOppList[MAX_NUM_SOLDIERS]; // AI knowledge database
INT8 bLastAction; INT8 bLastAction;
INT8 bAction; INT8 bAction;
INT32 usActionData; INT32 usActionData;
INT8 bNextAction; INT8 bNextAction;
INT32 usNextActionData; INT32 usNextActionData;
INT8 bActionInProgress; INT8 bActionInProgress;
INT8 bAlertStatus; INT8 bAlertStatus;
INT8 bOppCnt; INT8 bOppCnt;
INT8 bNeutral; INT8 bNeutral;
INT8 bNewSituation; INT8 bNewSituation;
INT8 bNextTargetLevel; INT8 bNextTargetLevel;
INT8 bOrders; INT8 bOrders;
INT8 bAttitude; INT8 bAttitude;
INT8 bUnderFire; INT8 bUnderFire;
INT8 bShock; INT8 bShock;
INT8 bUnderEscort; INT8 bUnderEscort;
INT8 bBypassToGreen; INT8 bBypassToGreen;
UINT8 ubLastMercToRadio; UINT8 ubLastMercToRadio;
INT8 bDominantDir; // AI main direction to face... INT8 bDominantDir; // AI main direction to face...
INT8 bPatrolCnt; // number of patrol gridnos INT8 bPatrolCnt; // number of patrol gridnos
INT8 bNextPatrolPnt; // index to next patrol gridno INT8 bNextPatrolPnt; // index to next patrol gridno
INT32 sPatrolGrid[MAXPATROLGRIDS];// AI list for ptr->orders==PATROL INT32 sPatrolGrid[MAXPATROLGRIDS];// AI list for ptr->orders==PATROL
INT32 sNoiseGridno; INT32 sNoiseGridno;
UINT8 ubNoiseVolume; UINT8 ubNoiseVolume;
INT8 bLastAttackHit; INT8 bLastAttackHit;
UINT16 ubXRayedBy; UINT16 ubXRayedBy;
FLOAT dHeightAdjustment; FLOAT dHeightAdjustment;
INT8 bMorale; INT8 bMorale;
INT8 bTeamMoraleMod; INT8 bTeamMoraleMod;
INT8 bTacticalMoraleMod; INT8 bTacticalMoraleMod;
INT8 bStrategicMoraleMod; INT8 bStrategicMoraleMod;
INT8 bAIMorale; INT8 bAIMorale;
UINT8 ubPendingAction; UINT8 ubPendingAction;
UINT8 ubPendingActionAnimCount; UINT8 ubPendingActionAnimCount;
UINT32 uiPendingActionData1; UINT32 uiPendingActionData1;
INT32 sPendingActionData2; INT32 sPendingActionData2;
INT8 bPendingActionData3; INT8 bPendingActionData3;
INT8 ubDoorHandleCode; INT8 ubDoorHandleCode;
UINT32 uiPendingActionData4; UINT32 uiPendingActionData4;
INT8 bInterruptDuelPts; INT8 bInterruptDuelPts;
INT8 bPassedLastInterrupt; INT8 bPassedLastInterrupt;
INT16 bIntStartAPs; //100AP INT16 bIntStartAPs; //100AP
INT8 bMoved; INT8 bMoved;
INT8 bHunting; INT8 bHunting;
UINT8 ubLastCall; UINT8 ubLastCall;
UINT16 ubCaller; SoldierID ubCaller;
INT32 sCallerGridNo; INT32 sCallerGridNo;
UINT8 bCallPriority; UINT8 bCallPriority;
INT8 bCallActedUpon; INT8 bCallActedUpon;
INT8 bFrenzied; INT8 bFrenzied;
INT8 bNormalSmell; INT8 bNormalSmell;
INT8 bMonsterSmell; INT8 bMonsterSmell;
INT8 bMobility; INT8 bMobility;
INT8 bRTPCombat; INT8 bRTPCombat;
INT8 fAIFlags; INT8 fAIFlags;
INT16 bAimTime; //100AP INT16 bAimTime; //100AP
INT8 bShownAimTime; INT8 bShownAimTime;
UINT8 ubInterruptCounter[MAX_NUM_SOLDIERS]; // SANDRO - interrupt counter added UINT8 ubInterruptCounter[MAX_NUM_SOLDIERS]; // SANDRO - interrupt counter added
}; };
class STRUCT_Flags//last edited at version 102 class STRUCT_Flags//last edited at version 102
+2 -2
View File
@@ -133,7 +133,7 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier )
{ {
//CHRISL: Changed the second parameter to use the same information as the 'F' hotkey uses. //CHRISL: Changed the second parameter to use the same information as the 'F' hotkey uses.
//iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( gusSelectedSoldier->sGridNo, sSoldierGridNo ) / 10; //iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( gusSelectedSoldier->sGridNo, sSoldierGridNo ) / 10;
iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( gusSelectedSoldier->sGridNo, MercPtrs[ gusUIFullTargetID ]->sGridNo ) / 10; iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( gusSelectedSoldier->sGridNo, gusUIFullTargetID->sGridNo ) / 10;
} }
// WANNE: If we want to show the tooltip of milita and no merc is present in the sector // WANNE: If we want to show the tooltip of milita and no merc is present in the sector
else else
@@ -145,7 +145,7 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier )
// SANDRO - don't use this if detail set to debug! // SANDRO - don't use this if detail set to debug!
if ( gGameExternalOptions.gfAllowUDTRange && gGameExternalOptions.ubSoldierTooltipDetailLevel != DL_Debug && !(gTacticalStatus.uiFlags & SHOW_ALL_MERCS) ) if ( gGameExternalOptions.gfAllowUDTRange && gGameExternalOptions.ubSoldierTooltipDetailLevel != DL_Debug && !(gTacticalStatus.uiFlags & SHOW_ALL_MERCS) )
{ {
uiMaxTooltipDistance = (UINT32)( gusSelectedSoldier->GetMaxDistanceVisible(MercPtrs[ gusUIFullTargetID ]->sGridNo, 0, CALC_FROM_WANTED_DIR) * (gGameExternalOptions.ubUDTModifier)); uiMaxTooltipDistance = (UINT32)( gusSelectedSoldier->GetMaxDistanceVisible(gusUIFullTargetID->sGridNo, 0, CALC_FROM_WANTED_DIR) * (gGameExternalOptions.ubUDTModifier));
uiMaxTooltipDistance /= 100; uiMaxTooltipDistance /= 100;
} }
//SCORE: Otherwise if we're using dynamics then do this //SCORE: Otherwise if we're using dynamics then do this
+12 -12
View File
@@ -573,7 +573,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
// Select guy // Select guy
if ( ( guiUIFullTargetFlags & SELECTED_MERC) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC ) && !( MercPtrs[ gusUIFullTargetID ]->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) if ( ( guiUIFullTargetFlags & SELECTED_MERC) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC ) && !( gusUIFullTargetID->flags.uiStatusFlags & SOLDIER_VEHICLE ) )
{ {
*puiNewEvent = M_CHANGE_TO_ADJPOS_MODE; *puiNewEvent = M_CHANGE_TO_ADJPOS_MODE;
fIgnoreLeftUp = FALSE; fIgnoreLeftUp = FALSE;
@@ -1250,7 +1250,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent )
if( gfUIFullTargetFound ) if( gfUIFullTargetFound )
{ {
// ATE: Don't do this automatically for enemies...... // ATE: Don't do this automatically for enemies......
if ( MercPtrs[ gusUIFullTargetID ]->bTeam != ENEMY_TEAM ) if ( gusUIFullTargetID->bTeam != ENEMY_TEAM )
{ {
uiMoveTargetSoldierId = gusUIFullTargetID; uiMoveTargetSoldierId = gusUIFullTargetID;
if ( IsValidTalkableNPC( gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && !ValidQuickExchangePosition( ) ) if ( IsValidTalkableNPC( gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && !ValidQuickExchangePosition( ) )
@@ -1280,7 +1280,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent )
{ {
guiUITargetSoldierId = gusUIFullTargetID; guiUITargetSoldierId = gusUIFullTargetID;
if ( MercPtrs[ gusUIFullTargetID ]->bTeam != gbPlayerNum ) if ( gusUIFullTargetID->bTeam != gbPlayerNum )
{ {
fOnValidGuy = TRUE; fOnValidGuy = TRUE;
//ddd turn off flag that indicates aim/autofire mode adjustment (aimed burst/auto) //ddd turn off flag that indicates aim/autofire mode adjustment (aimed burst/auto)
@@ -3593,7 +3593,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
//Display the range to the target //Display the range to the target
DisplayRangeToTarget( gusSelectedSoldier, MercPtrs[gusUIFullTargetID]->sGridNo ); DisplayRangeToTarget( gusSelectedSoldier, gusUIFullTargetID->sGridNo );
} }
else else
{ {
@@ -4648,7 +4648,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
// Get soldier... // Get soldier...
pSoldier2 = MercPtrs[ gusUIFullTargetID ]; pSoldier2 = gusUIFullTargetID;
// Check if both OK.... // Check if both OK....
if ( pSoldier1->stats.bLife >= OKLIFE && pSoldier2->ubID != gusSelectedSoldier ) if ( pSoldier1->stats.bLife >= OKLIFE && pSoldier2->ubID != gusSelectedSoldier )
@@ -5677,7 +5677,7 @@ INT8 CheckForAndHandleHandleVehicleInteractiveClick( SOLDIERTYPE *pSoldier, UINT
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
// anv: added condition - make sure we won't put vehicle in another vehicle // anv: added condition - make sure we won't put vehicle in another vehicle
if ( OK_ENTERABLE_VEHICLE( pTSoldier ) && pTSoldier->bVisible != -1 && OKUseVehicle( pTSoldier->ubProfile ) && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER | SOLDIER_VEHICLE ) ) ) if ( OK_ENTERABLE_VEHICLE( pTSoldier ) && pTSoldier->bVisible != -1 && OKUseVehicle( pTSoldier->ubProfile ) && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER | SOLDIER_VEHICLE ) ) )
@@ -5824,18 +5824,18 @@ void HandleHandCursorClick( INT32 usMapPos, UINT32 *puiNewEvent )
// Flugente: allow stealing if the other guy is an enemy, OR if we are on the same team // Flugente: allow stealing if the other guy is an enemy, OR if we are on the same team
if ( (( guiUIFullTargetFlags & ENEMY_MERC ) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC )) || (AllowedToStealFromTeamMate(pSoldier->ubID, (UINT8)gusUIFullTargetID) && guiUIFullTargetFlags & OWNED_MERC) ) if ( (( guiUIFullTargetFlags & ENEMY_MERC ) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC )) || (AllowedToStealFromTeamMate(pSoldier->ubID, (UINT8)gusUIFullTargetID) && guiUIFullTargetFlags & OWNED_MERC) )
{ {
sActionGridNo = FindAdjacentGridEx( pSoldier, MercPtrs[ gusUIFullTargetID ]->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); sActionGridNo = FindAdjacentGridEx( pSoldier, gusUIFullTargetID->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
if ( sActionGridNo == -1 ) if ( sActionGridNo == -1 )
{ {
sActionGridNo = sAdjustedGridNo; sActionGridNo = sAdjustedGridNo;
} }
// Steal! // Steal!
sAPCost = GetAPsToStealItem( pSoldier, MercPtrs[ gusUIFullTargetID ], sActionGridNo ); // SANDRO - added target variable sAPCost = GetAPsToStealItem( pSoldier, gusUIFullTargetID, sActionGridNo ); // SANDRO - added target variable
if ( EnoughPoints( pSoldier, sAPCost, 0, TRUE ) ) if ( EnoughPoints( pSoldier, sAPCost, 0, TRUE ) )
{ {
MercStealFromMerc( pSoldier, MercPtrs[ gusUIFullTargetID ] ); MercStealFromMerc( pSoldier, gusUIFullTargetID );
*puiNewEvent = A_CHANGE_TO_MOVE; *puiNewEvent = A_CHANGE_TO_MOVE;
@@ -5962,7 +5962,7 @@ void HandleHandCursorRightClick( INT32 usMapPos, UINT32 *puiNewEvent )
if( gfUIFullTargetFound ) if( gfUIFullTargetFound )
{ {
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
if( OK_ENTERABLE_VEHICLE( pTSoldier ) && pTSoldier->bVisible != -1 && OKUseVehicle( pTSoldier->ubProfile ) ) if( OK_ENTERABLE_VEHICLE( pTSoldier ) && pTSoldier->bVisible != -1 && OKUseVehicle( pTSoldier->ubProfile ) )
{ {
// anv: if we are passengers, only show menu when clicking on vehicle we're in // anv: if we are passengers, only show menu when clicking on vehicle we're in
@@ -6058,10 +6058,10 @@ INT8 HandleMoveModeInteractiveClick( INT32 usMapPos, UINT32 *puiNewEvent )
if ( ValidQuickExchangePosition( ) ) if ( ValidQuickExchangePosition( ) )
{ {
// Check if we can... // Check if we can...
if ( CanExchangePlaces( pSoldier, MercPtrs[ gusUIFullTargetID ], TRUE ) ) if ( CanExchangePlaces( pSoldier, gusUIFullTargetID, TRUE ) )
{ {
gpExchangeSoldier1 = pSoldier; gpExchangeSoldier1 = pSoldier;
gpExchangeSoldier2 = MercPtrs[ gusUIFullTargetID ]; gpExchangeSoldier2 = gusUIFullTargetID;
// Do message box... // Do message box...
//DoMessageBox( MSG_BOX_BASIC_STYLE, TacticalStr[ EXCHANGE_PLACES_REQUESTER ], GAME_SCREEN, ( UINT8 )MSG_BOX_FLAG_YESNO, ExchangeMessageBoxCallBack, NULL ); //DoMessageBox( MSG_BOX_BASIC_STYLE, TacticalStr[ EXCHANGE_PLACES_REQUESTER ], GAME_SCREEN, ( UINT8 )MSG_BOX_FLAG_YESNO, ExchangeMessageBoxCallBack, NULL );
+18 -18
View File
@@ -134,7 +134,7 @@ BOOLEAN GetMouseRecalcAndShowAPFlags( UINT32 *puiCursorFlags, BOOLEAN *pfShowAPs
// FUNCTIONS FOR CURSOR DETERMINATION! // FUNCTIONS FOR CURSOR DETERMINATION!
UINT8 GetProperItemCursor( UINT16 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ) UINT8 GetProperItemCursor( SoldierID ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated )
{ {
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
UINT32 uiCursorFlags; UINT32 uiCursorFlags;
@@ -144,7 +144,7 @@ UINT8 GetProperItemCursor( UINT16 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPo
UINT8 ubCursorID=0; UINT8 ubCursorID=0;
UINT8 ubItemCursor = 0; UINT8 ubItemCursor = 0;
pSoldier = MercPtrs[ ubSoldierID ]; pSoldier = ubSoldierID;
fRecalc = GetMouseRecalcAndShowAPFlags( &uiCursorFlags, &fShowAPs ); fRecalc = GetMouseRecalcAndShowAPFlags( &uiCursorFlags, &fShowAPs );
@@ -159,7 +159,7 @@ UINT8 GetProperItemCursor( UINT16 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPo
// Calculate target gridno! // Calculate target gridno!
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
sTargetGridNo = MercPtrs[ gusUIFullTargetID ]->sGridNo; sTargetGridNo = gusUIFullTargetID->sGridNo;
} }
else else
{ {
@@ -573,7 +573,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos, BOOLEA
{ {
if ( gusUIFullTargetID != NOBODY ) if ( gusUIFullTargetID != NOBODY )
{ {
if ( SoldierToSoldierBodyPartChanceToGetThrough( pSoldier, MercPtrs[ gusUIFullTargetID ], pSoldier->bAimShotLocation ) < OK_CHANCE_TO_GET_THROUGH ) if ( SoldierToSoldierBodyPartChanceToGetThrough( pSoldier, gusUIFullTargetID, pSoldier->bAimShotLocation ) < OK_CHANCE_TO_GET_THROUGH )
{ {
gfCannotGetThrough = TRUE; gfCannotGetThrough = TRUE;
} }
@@ -1556,7 +1556,7 @@ void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN
// Check if we can find a soldier here // Check if we can find a soldier here
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
pTargetSoldier = MercPtrs[ gusUIFullTargetID ]; pTargetSoldier = gusUIFullTargetID;
if ( FindRelativeSoldierPosition( pTargetSoldier, &usFlags, gusMouseXPos, gusMouseYPos ) ) if ( FindRelativeSoldierPosition( pTargetSoldier, &usFlags, gusMouseXPos, gusMouseYPos ) )
{ {
@@ -1594,7 +1594,7 @@ void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN
{ {
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
pTargetSoldier = MercPtrs[ gusUIFullTargetID ]; pTargetSoldier = gusUIFullTargetID;
if ( pTargetSoldier->ubBodyType == CROW ) if ( pTargetSoldier->ubBodyType == CROW )
{ {
@@ -2583,7 +2583,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos )
// 'snap' cursor to target tile.... // 'snap' cursor to target tile....
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; usMapPos = gusUIFullTargetID->sGridNo;
} }
@@ -2609,7 +2609,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos )
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
// Get target soldier, if one exists // Get target soldier, if one exists
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
sGridNo = pTSoldier->sGridNo; sGridNo = pTSoldier->sGridNo;
bTargetLevel = pSoldier->pathing.bLevel; bTargetLevel = pSoldier->pathing.bLevel;
@@ -2727,7 +2727,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos )
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
// Get target soldier, if one exists // Get target soldier, if one exists
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
sGridNo = pTSoldier->sGridNo; sGridNo = pTSoldier->sGridNo;
bTargetLevel = pSoldier->pathing.bLevel; bTargetLevel = pSoldier->pathing.bLevel;
@@ -3172,7 +3172,7 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, INT16 sDelta
// 'snap' cursor to target tile.... // 'snap' cursor to target tile....
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; sMapPos = gusUIFullTargetID->sGridNo;
} }
switch( ubCursor ) switch( ubCursor )
@@ -3180,8 +3180,8 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, INT16 sDelta
case TARGETCURS: case TARGETCURS:
// warn if bad chance to get through // warn if bad chance to get through
if ( gfUIFullTargetFound && if ( gfUIFullTargetFound &&
!HandleCheckForBadChangeToGetThrough( pSoldier, MercPtrs[ gusUIFullTargetID ], !HandleCheckForBadChangeToGetThrough( pSoldier, gusUIFullTargetID,
MercPtrs[ gusUIFullTargetID ]->sGridNo , MercPtrs[ gusUIFullTargetID ]->pathing.bLevel ) ) gusUIFullTargetID->sGridNo , gusUIFullTargetID->pathing.bLevel ) )
{ {
return; return;
} }
@@ -3370,7 +3370,7 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, INT16 sDelta
// 'snap' cursor to target tile.... // 'snap' cursor to target tile....
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; sMapPos = gusUIFullTargetID->sGridNo;
} }
@@ -3442,7 +3442,7 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, INT16 sDelta
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
// Get target soldier, if one exists // Get target soldier, if one exists
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
sGridNo = pTSoldier->sGridNo; sGridNo = pTSoldier->sGridNo;
bTargetLevel = pSoldier->pathing.bLevel; bTargetLevel = pSoldier->pathing.bLevel;
@@ -3608,7 +3608,7 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT32 sMapPos, INT32 sDelta
// 'snap' cursor to target tile.... // 'snap' cursor to target tile....
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; sMapPos = gusUIFullTargetID->sGridNo;
int aimlevelchange = 1; int aimlevelchange = 1;
int maxAimCanAfford = 0; int maxAimCanAfford = 0;
@@ -3681,7 +3681,7 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT32 sMapPos, INT32 sDelta
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
// Get target soldier, if one exists // Get target soldier, if one exists
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
sGridNo = pTSoldier->sGridNo; sGridNo = pTSoldier->sGridNo;
bTargetLevel = pSoldier->pathing.bLevel; bTargetLevel = pSoldier->pathing.bLevel;
@@ -3836,7 +3836,7 @@ void HandleWheelAdjustCursorWOAB( SOLDIERTYPE *pSoldier, INT32 sMapPos, INT32 sD
// 'snap' cursor to target tile.... // 'snap' cursor to target tile....
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; sMapPos = gusUIFullTargetID->sGridNo;
} }
@@ -3908,7 +3908,7 @@ void HandleWheelAdjustCursorWOAB( SOLDIERTYPE *pSoldier, INT32 sMapPos, INT32 sD
if ( gfUIFullTargetFound ) if ( gfUIFullTargetFound )
{ {
// Get target soldier, if one exists // Get target soldier, if one exists
pTSoldier = MercPtrs[ gusUIFullTargetID ]; pTSoldier = gusUIFullTargetID;
sGridNo = pTSoldier->sGridNo; sGridNo = pTSoldier->sGridNo;
bTargetLevel = pSoldier->pathing.bLevel; bTargetLevel = pSoldier->pathing.bLevel;
+1 -1
View File
@@ -9,7 +9,7 @@
#define REFINE_KNIFE_2 (gGameExternalOptions.fEnhancedCloseCombatSystem ? gSkillTraitValues.ubModifierForAPsAddedOnAimedBladedAttackes*2 : 6) #define REFINE_KNIFE_2 (gGameExternalOptions.fEnhancedCloseCombatSystem ? gSkillTraitValues.ubModifierForAPsAddedOnAimedBladedAttackes*2 : 6)
UINT8 GetProperItemCursor( UINT16 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ); UINT8 GetProperItemCursor( SoldierID ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated );
void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc ); void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc );
void HandleLeftClickCursor( SOLDIERTYPE *pSoldier ); void HandleLeftClickCursor( SOLDIERTYPE *pSoldier );
+2 -2
View File
@@ -4,7 +4,7 @@
extern BOOLEAN gfIngagedInDrop; extern BOOLEAN gfIngagedInDrop;
void ResetHeliSeats( ); void ResetHeliSeats( );
void AddMercToHeli( UINT16 ubID ); void AddMercToHeli( SoldierID ubID );
// Flugente: we might want to set the helicopter dropoff point without starting it at the same time // Flugente: we might want to set the helicopter dropoff point without starting it at the same time
void SetHelicopterDroppoint( INT32 sGridNo ); void SetHelicopterDroppoint( INT32 sGridNo );
@@ -14,7 +14,7 @@ void StartHelicopterRun();
void HandleHeliDrop( BOOLEAN fPlayer = TRUE ); void HandleHeliDrop( BOOLEAN fPlayer = TRUE );
UINT16 SpawnAirDropElite( INT32 sGridNo ); SoldierID SpawnAirDropElite( INT32 sGridNo );
void InitiateEnemyAirDropSoldiers( INT32 sGridNo ); void InitiateEnemyAirDropSoldiers( INT32 sGridNo );
void HandleEnemyAirdrop( ); void HandleEnemyAirdrop( );
+15 -15
View File
@@ -130,20 +130,20 @@ typedef struct
class ATTACKTYPE class ATTACKTYPE
{ {
public: public:
UINT8 ubPossible; // is this attack form possible UINT8 ubPossible; // is this attack form possible
UINT16 ubOpponent; // which soldier is the victim SoldierID ubOpponent; // which soldier is the victim
//CHANGED STRUCTURE VALUE BY GOTTHARD 7/14/07 //CHANGED STRUCTURE VALUE BY GOTTHARD 7/14/07
INT16 ubAimTime; // how many extra APs to spend on aiming INT16 ubAimTime; // how many extra APs to spend on aiming
INT16 ubChanceToReallyHit; // chance to hit * chance to get through cover INT16 ubChanceToReallyHit; // chance to hit * chance to get through cover
//END STRUCTURE CHANGE BY GOTTHARD 7/14/07 //END STRUCTURE CHANGE BY GOTTHARD 7/14/07
INT16 ubAPCost; // how many APs the attack will use up INT16 ubAPCost; // how many APs the attack will use up
INT32 iAttackValue; // relative worthiness of this type of attack INT32 iAttackValue; // relative worthiness of this type of attack
INT32 sTarget; // target gridno of this attack INT32 sTarget; // target gridno of this attack
INT8 bTargetLevel; // target level of this attack INT8 bTargetLevel; // target level of this attack
INT8 bWeaponIn; // the inv slot of the weapon in question INT8 bWeaponIn; // the inv slot of the weapon in question
INT8 bScopeMode; // SANDRO: added for scope mode and alternative weapon holding INT8 bScopeMode; // SANDRO: added for scope mode and alternative weapon holding
UINT8 ubStance; // recommended stance for attack UINT8 ubStance; // recommended stance for attack
UINT8 ubFriendlyFireChance; // highest chance to hit someone of our guys //dnl ch61 180813 UINT8 ubFriendlyFireChance; // highest chance to hit someone of our guys //dnl ch61 180813
ATTACKTYPE(void){ InitAttackType(this); } ATTACKTYPE(void){ InitAttackType(this); }
void InitAttackType(ATTACKTYPE *pAttack); void InitAttackType(ATTACKTYPE *pAttack);
@@ -212,7 +212,7 @@ void CreatureDecideAlertStatus( SOLDIERTYPE *pCreature );
// sevenfm: // sevenfm:
void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow); void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow);
void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow); void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow);
void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT16 ubOpponentID); void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, SoldierID ubOpponentID);
INT32 FindTossSpotInDirection(INT32 sSpot, INT8 bLevel, INT32 sTargetSpot, BOOLEAN fCheckAdjacentDirections, BOOLEAN fCheckFarther); INT32 FindTossSpotInDirection(INT32 sSpot, INT8 bLevel, INT32 sTargetSpot, BOOLEAN fCheckAdjacentDirections, BOOLEAN fCheckFarther);
void CheckTossGrenadeAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT8 ubGrenadeType); void CheckTossGrenadeAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT8 ubGrenadeType);
@@ -254,7 +254,7 @@ INT32 InternalGoAsFarAsPossibleTowards(SOLDIERTYPE *pSoldier, INT32 sDesGrid, IN
int LegalNPCDestination(SOLDIERTYPE *pSoldier, INT32 sGridno, UINT8 ubPathMode, UINT8 ubWaterOK, UINT8 fFlags); int LegalNPCDestination(SOLDIERTYPE *pSoldier, INT32 sGridno, UINT8 ubPathMode, UINT8 ubWaterOK, UINT8 fFlags);
void LoadWeaponIfNeeded(SOLDIERTYPE *pSoldier); void LoadWeaponIfNeeded(SOLDIERTYPE *pSoldier);
INT32 MostImportantNoiseHeard( SOLDIERTYPE *pSoldier, INT32 *piRetValue, BOOLEAN * pfClimbingNecessary, BOOLEAN * pfReachable ); INT32 MostImportantNoiseHeard( SOLDIERTYPE *pSoldier, INT32 *piRetValue, BOOLEAN * pfClimbingNecessary, BOOLEAN * pfReachable );
INT32 NPCConsiderInitiatingConv( SOLDIERTYPE * pNPC, UINT8 * pubDesiredMerc ); INT32 NPCConsiderInitiatingConv( SOLDIERTYPE * pNPC, SoldierID * pubDesiredMerc );
void NPCDoesAct(SOLDIERTYPE *pSoldier); void NPCDoesAct(SOLDIERTYPE *pSoldier);
void NPCDoesNothing(SOLDIERTYPE *pSoldier); void NPCDoesNothing(SOLDIERTYPE *pSoldier);
INT8 OKToAttack(SOLDIERTYPE *ptr, int target); INT8 OKToAttack(SOLDIERTYPE *ptr, int target);
@@ -318,7 +318,7 @@ BOOLEAN GetBestAoEGridNo(SOLDIERTYPE *pSoldier, INT32* pGridNo, INT16 aRadius, U
// Get the ID of the farthest opponent we can see, with an optional minimum range // Get the ID of the farthest opponent we can see, with an optional minimum range
// puID - ID of the farthest opponent pSoldier can see // puID - ID of the farthest opponent pSoldier can see
// sRange - only return true and give an idea if opponent found is further away than this // sRange - only return true and give an idea if opponent found is further away than this
BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, UINT16 * puID, INT16 sRange); BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, SoldierID *puID, INT16 sRange);
// are there more allies than friends in adjacent sectors? // are there more allies than friends in adjacent sectors?
BOOLEAN MoreFriendsThanEnemiesinNearbysectors(UINT8 ausTeam, INT16 aX, INT16 aY, INT8 aZ); BOOLEAN MoreFriendsThanEnemiesinNearbysectors(UINT8 ausTeam, INT16 aX, INT16 aY, INT8 aZ);
+11 -11
View File
@@ -46,7 +46,7 @@ void DeleteAIListEntry( AILIST * pEntry )
pEntry->pNext = NULL; pEntry->pNext = NULL;
} }
UINT16 FindEmptyAIListEntry( void ) SoldierID FindEmptyAIListEntry( void )
{ {
UINT16 ubLoop; UINT16 ubLoop;
@@ -61,7 +61,7 @@ UINT16 FindEmptyAIListEntry( void )
return( AI_LIST_SIZE ); return( AI_LIST_SIZE );
} }
AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, UINT16 ubID, INT8 bPriority ) AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, SoldierID ubID, INT8 bPriority )
{ {
gAIList[ ubNewEntry ].ubID = ubID; gAIList[ ubNewEntry ].ubID = ubID;
gAIList[ ubNewEntry ].bPriority = bPriority; gAIList[ ubNewEntry ].bPriority = bPriority;
@@ -69,10 +69,10 @@ AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, UINT16 ubID, INT8 bPriority )
return( &(gAIList[ ubNewEntry ]) ); return( &(gAIList[ ubNewEntry ]) );
} }
UINT16 RemoveFirstAIListEntry( void ) SoldierID RemoveFirstAIListEntry( void )
{ {
AILIST *pOldFirstEntry; AILIST *pOldFirstEntry;
UINT16 ubID; SoldierID ubID;
while ( gpFirstAIListEntry != NULL) while ( gpFirstAIListEntry != NULL)
{ {
@@ -94,7 +94,7 @@ UINT16 RemoveFirstAIListEntry( void )
return( NOBODY ); return( NOBODY );
} }
void RemoveAIListEntryForID( UINT16 ubID ) void RemoveAIListEntryForID( SoldierID ubID )
{ {
AILIST * pEntry; AILIST * pEntry;
AILIST * pPrevEntry; AILIST * pPrevEntry;
@@ -123,9 +123,9 @@ void RemoveAIListEntryForID( UINT16 ubID )
// none found, that's okay // none found, that's okay
} }
BOOLEAN InsertIntoAIList( UINT16 ubID, INT8 bPriority ) BOOLEAN InsertIntoAIList( SoldierID ubID, INT8 bPriority )
{ {
UINT16 ubNewEntry; SoldierID ubNewEntry;
AILIST * pEntry, * pNewEntry, * pPrevEntry = NULL; AILIST * pEntry, * pNewEntry, * pPrevEntry = NULL;
ubNewEntry = FindEmptyAIListEntry(); ubNewEntry = FindEmptyAIListEntry();
@@ -276,15 +276,15 @@ BOOLEAN SatisfiesAIListConditions( SOLDIERTYPE * pSoldier, UINT16 * pubDoneCount
return( TRUE ); return( TRUE );
} }
BOOLEAN MoveToFrontOfAIList( UINT16 ubID ) BOOLEAN MoveToFrontOfAIList( SoldierID ubID )
{ {
// we'll have to fake this guy's alert status (in the list) to be the same as the current // we'll have to fake this guy's alert status (in the list) to be the same as the current
// front of the list // front of the list
INT8 bPriority; INT8 bPriority;
UINT16 ubNewEntry; SoldierID ubNewEntry;
AILIST * pNewEntry; AILIST *pNewEntry;
if ( !SatisfiesAIListConditions( MercPtrs[ ubID ], NULL, FALSE ) ) if ( !SatisfiesAIListConditions( ubID, NULL, FALSE ) )
{ {
// can't do dat! // can't do dat!
return( FALSE ); return( FALSE );
+9 -9
View File
@@ -1,18 +1,18 @@
#include "Types.h" #include "Overhead Types.h"
typedef struct AILIST typedef struct AILIST
{ {
UINT16 ubID; SoldierID ubID;
INT8 bPriority; INT8 bPriority;
UINT8 ubUnused; UINT8 ubUnused;
struct AILIST * pNext; struct AILIST *pNext;
} AILIST; } AILIST;
#define MAX_AI_PRIORITY 100 #define MAX_AI_PRIORITY 100
extern void ClearAIList( void ); extern void ClearAIList( void );
extern AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, UINT16 ubID, INT8 bAlertStatus ); extern AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, SoldierID ubID, INT8 bAlertStatus );
extern BOOLEAN InsertIntoAIList( UINT16 ubID, INT8 bAlertStatus ); extern BOOLEAN InsertIntoAIList( SoldierID ubID, INT8 bAlertStatus );
extern UINT16 RemoveFirstAIListEntry( void ); extern SoldierID RemoveFirstAIListEntry( void );
extern BOOLEAN BuildAIListForTeam( INT8 bTeam ); extern BOOLEAN BuildAIListForTeam( INT8 bTeam );
extern BOOLEAN MoveToFrontOfAIList( UINT16 ubID ); extern BOOLEAN MoveToFrontOfAIList( SoldierID ubID );
+17 -17
View File
@@ -874,7 +874,7 @@ void HandleSoldierAI( SOLDIERTYPE *pSoldier ) // FIXME - this function is named
void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) void EndAIGuysTurn( SOLDIERTYPE *pSoldier )
{ {
UINT16 ubID; SoldierID ubID;
if (gfTurnBasedAI) if (gfTurnBasedAI)
{ {
@@ -885,19 +885,19 @@ void EndAIGuysTurn( SOLDIERTYPE *pSoldier )
} }
// search for any player merc to say close call quote // search for any player merc to say close call quote
for ( ubID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubID++ ) for ( ubID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubID )
{ {
if ( OK_INSECTOR_MERC( MercPtrs[ ubID ] ) ) if ( OK_INSECTOR_MERC( ubID ) )
{ {
if ( MercPtrs[ ubID ]->flags.fCloseCall ) if ( ubID->flags.fCloseCall )
{ {
if ( !gTacticalStatus.fSomeoneHit && MercPtrs[ ubID ]->bNumHitsThisTurn == 0 && !(MercPtrs[ ubID ]->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL) && Random( 3 ) == 0 ) if ( !gTacticalStatus.fSomeoneHit && ubID->bNumHitsThisTurn == 0 && !(ubID->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL) && Random( 3 ) == 0 )
{ {
// say close call quote! // say close call quote!
TacticalCharacterDialogue( MercPtrs[ ubID ], QUOTE_CLOSE_CALL ); TacticalCharacterDialogue( ubID, QUOTE_CLOSE_CALL );
MercPtrs[ ubID ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL; ubID->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL;
} }
MercPtrs[ ubID ]->flags.fCloseCall = FALSE; ubID->flags.fCloseCall = FALSE;
} }
} }
} }
@@ -942,7 +942,7 @@ void EndAIGuysTurn( SOLDIERTYPE *pSoldier )
ubID = RemoveFirstAIListEntry(); ubID = RemoveFirstAIListEntry();
if (ubID != NOBODY) if (ubID != NOBODY)
{ {
StartNPCAI( MercPtrs[ ubID ] ); StartNPCAI( ubID );
return; return;
} }
@@ -1165,12 +1165,12 @@ INT32 FindAdjacentSpotBeside(SOLDIERTYPE *pSoldier, INT32 sGridNo)
return(sCheapestDest); return(sCheapestDest);
} }
UINT16 GetMostThreateningOpponent( SOLDIERTYPE *pSoldier ) SoldierID GetMostThreateningOpponent( SOLDIERTYPE *pSoldier )
{ {
UINT32 uiLoop; UINT32 uiLoop;
INT32 iThreatVal,iMinThreat = 30000; INT32 iThreatVal,iMinThreat = 30000;
SOLDIERTYPE *pTargetSoldier; SOLDIERTYPE *pTargetSoldier;
UINT16 ubTargetSoldier = NOBODY; SoldierID ubTargetSoldier = NOBODY;
// Loop through all mercs // Loop through all mercs
@@ -1914,7 +1914,7 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
UINT16 usHandItem = pSoldier->inv[HANDPOS].usItem; UINT16 usHandItem = pSoldier->inv[HANDPOS].usItem;
INT8 bSlot; INT8 bSlot;
UINT16 usSoldierIndex; // added by SANDRO SoldierID usSoldierIndex; // added by SANDRO
#ifdef TESTAICONTROL #ifdef TESTAICONTROL
if (gfTurnBasedAI || gTacticalStatus.fAutoBandageMode) if (gfTurnBasedAI || gTacticalStatus.fAutoBandageMode)
@@ -2594,7 +2594,7 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
usSoldierIndex = WhoIsThere2( pSoldier->aiData.usActionData, pSoldier->bTargetLevel); usSoldierIndex = WhoIsThere2( pSoldier->aiData.usActionData, pSoldier->bTargetLevel);
if ( usSoldierIndex != NOBODY ) if ( usSoldierIndex != NOBODY )
{ {
MercStealFromMerc( pSoldier, MercPtrs[usSoldierIndex] ); MercStealFromMerc( pSoldier, usSoldierIndex );
PossiblyStartEnemyTaunt( pSoldier, TAUNT_STEAL, usSoldierIndex ); PossiblyStartEnemyTaunt( pSoldier, TAUNT_STEAL, usSoldierIndex );
} }
@@ -2628,7 +2628,7 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
case AI_ACTION_USE_SKILL: case AI_ACTION_USE_SKILL:
{ {
UINT16 ubID = WhoIsThere2( pSoldier->aiData.usActionData, 0 ); SoldierID ubID = WhoIsThere2( pSoldier->aiData.usActionData, 0 );
BOOLEAN result = pSoldier->UseSkill(pSoldier->usAISkillUse, pSoldier->aiData.usActionData, ubID); BOOLEAN result = pSoldier->UseSkill(pSoldier->usAISkillUse, pSoldier->aiData.usActionData, ubID);
+28 -26
View File
@@ -716,16 +716,16 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot)
//dnl ch62 180813 ignore firing into breathless targets if there are targets in better condition //dnl ch62 180813 ignore firing into breathless targets if there are targets in better condition
// sevenfm: check that best opponent exists // sevenfm: check that best opponent exists
if (pBestShot->ubOpponent != NOBODY && if (pBestShot->ubOpponent != NOBODY &&
(Menptr[pBestShot->ubOpponent].bCollapsed || Menptr[pBestShot->ubOpponent].bBreathCollapsed) && (pBestShot->ubOpponent->bCollapsed || pBestShot->ubOpponent->bBreathCollapsed) &&
Menptr[pBestShot->ubOpponent].bBreath < OKBREATH pBestShot->ubOpponent->bBreath < OKBREATH
&& Menptr[pBestShot->ubOpponent].bBreath < pOpponent->bBreath) && pBestShot->ubOpponent->bBreath < pOpponent->bBreath)
{ {
iPercentBetter = PERCENT_TO_IGNORE_THREAT; iPercentBetter = PERCENT_TO_IGNORE_THREAT;
} }
// sevenfm: if best opponent is dying and new opponent is ok, use new opponent // sevenfm: if best opponent is dying and new opponent is ok, use new opponent
if (pBestShot->ubOpponent != NOBODY && if (pBestShot->ubOpponent != NOBODY &&
Menptr[pBestShot->ubOpponent].stats.bLife < OKLIFE && pBestShot->ubOpponent->stats.bLife < OKLIFE &&
pOpponent->stats.bLife >= OKLIFE) pOpponent->stats.bLife >= OKLIFE)
{ {
iPercentBetter = PERCENT_TO_IGNORE_THREAT; iPercentBetter = PERCENT_TO_IGNORE_THREAT;
@@ -735,7 +735,7 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot)
// guy is conscious at all // guy is conscious at all
if (iPercentBetter < -PERCENT_TO_IGNORE_THREAT && if (iPercentBetter < -PERCENT_TO_IGNORE_THREAT &&
pBestShot->ubOpponent != NOBODY && pBestShot->ubOpponent != NOBODY &&
Menptr[pBestShot->ubOpponent].stats.bLife >= OKLIFE) pBestShot->ubOpponent->stats.bLife >= OKLIFE)
{ {
// then stick with the older guy as the better target // then stick with the older guy as the better target
continue; continue;
@@ -753,7 +753,7 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot)
// sevenfm: if new opponent is dying and best opponent is ok, ignore new opponent // sevenfm: if new opponent is dying and best opponent is ok, ignore new opponent
if (pBestShot->ubOpponent != NOBODY && if (pBestShot->ubOpponent != NOBODY &&
Menptr[pBestShot->ubOpponent].stats.bLife >= OKLIFE && pBestShot->ubOpponent->stats.bLife >= OKLIFE &&
pOpponent->stats.bLife < OKLIFE) pOpponent->stats.bLife < OKLIFE)
{ {
//DebugShot(pSoldier, String("new opponent is dying, best opponent is ok - skip")); //DebugShot(pSoldier, String("new opponent is dying, best opponent is ok - skip"));
@@ -845,7 +845,8 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
INT32 sGridNo, sEndGridNo, sFriendTile[MAXMERCS], sOpponentTile[MAXMERCS]; INT32 sGridNo, sEndGridNo, sFriendTile[MAXMERCS], sOpponentTile[MAXMERCS];
INT8 bFriendLevel[MAXMERCS], bOpponentLevel[MAXMERCS]; INT8 bFriendLevel[MAXMERCS], bOpponentLevel[MAXMERCS];
INT32 iEstDamage; INT32 iEstDamage;
UINT16 ubFriendCnt = 0,ubOpponentCnt = 0, ubOpponentID[MAXMERCS]; UINT16 ubFriendCnt = 0, ubOpponentCnt = 0;
SoldierID ubOpponentID[MAXMERCS];
UINT8 ubMaxPossibleAimTime; UINT8 ubMaxPossibleAimTime;
INT16 sRawAPCost, sMinAPcost; INT16 sRawAPCost, sMinAPcost;
UINT8 ubChanceToHit, ubChanceToGetThrough, ubChanceToReallyHit, ubFriendlyFireChance; UINT8 ubChanceToHit, ubChanceToGetThrough, ubChanceToReallyHit, ubFriendlyFireChance;
@@ -1479,7 +1480,7 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
iThreatValue = iOppThreatValue[ubLoop2]; iThreatValue = iOppThreatValue[ubLoop2];
// estimate how much damage this tossed item would do to him // estimate how much damage this tossed item would do to him
iEstDamage = EstimateThrowDamage(pSoldier,bPayloadPocket,MercPtrs[ubOpponentID[ubLoop2]],sGridNo); iEstDamage = EstimateThrowDamage(pSoldier, bPayloadPocket, ubOpponentID[ubLoop2], sGridNo);
if (usOppDist) if (usOppDist)
{ {
@@ -1492,7 +1493,7 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
iTotalThreatValue += (iThreatValue * iEstDamage); iTotalThreatValue += (iThreatValue * iEstDamage);
// only count opponents still standing worth shooting at (in range) // only count opponents still standing worth shooting at (in range)
if (Menptr[ ubOpponentID[ubLoop2] ].stats.bLife >= OKLIFE) if (ubOpponentID[ubLoop2]->stats.bLife >= OKLIFE)
{ {
ubOppsInRange++; ubOppsInRange++;
if (usOppDist < 2) if (usOppDist < 2)
@@ -1599,7 +1600,7 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
// limit RPG use, unless can hit several enemies, shooting at tank or opponent is in a room // limit RPG use, unless can hit several enemies, shooting at tank or opponent is in a room
if (ItemIsRocketLauncher(usInHand) && if (ItemIsRocketLauncher(usInHand) &&
ubOppsInRange < 2 && ubOppsInRange < 2 &&
!ARMED_VEHICLE(MercPtrs[ubOpponentID[ubLoop]]) && !ARMED_VEHICLE(ubOpponentID[ubLoop]) &&
(!InARoom(sOpponentTile[ubLoop], NULL) || pSoldier->bTeam != ENEMY_TEAM)) (!InARoom(sOpponentTile[ubLoop], NULL) || pSoldier->bTeam != ENEMY_TEAM))
{ {
continue; // next gridno continue; // next gridno
@@ -1691,7 +1692,7 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
{ {
ubMinChanceToReallyHit = 30; ubMinChanceToReallyHit = 30;
} }
else if (EXPLOSIVE_GUN(usInHand) && !ARMED_VEHICLE(pSoldier) && (pBestThrow->ubOpponent == NOBODY || !ARMED_VEHICLE(MercPtrs[pBestThrow->ubOpponent]))) else if (EXPLOSIVE_GUN(usInHand) && !ARMED_VEHICLE(pSoldier) && (pBestThrow->ubOpponent == NOBODY || !ARMED_VEHICLE(pBestThrow->ubOpponent)))
{ {
ubMinChanceToReallyHit = 80; ubMinChanceToReallyHit = 80;
} }
@@ -1916,7 +1917,7 @@ void CalcBestStab(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestStab, BOOLEAN fBladeAt
// guy is conscious at all // guy is conscious at all
if (iPercentBetter < -PERCENT_TO_IGNORE_THREAT && if (iPercentBetter < -PERCENT_TO_IGNORE_THREAT &&
pBestStab->ubOpponent != NOBODY && pBestStab->ubOpponent != NOBODY &&
Menptr[pBestStab->ubOpponent].stats.bLife >= OKLIFE) pBestStab->ubOpponent->stats.bLife >= OKLIFE)
{ {
// then stick with the older guy as the better target // then stick with the older guy as the better target
continue; continue;
@@ -1937,12 +1938,12 @@ void CalcBestStab(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestStab, BOOLEAN fBladeAt
// OOOF! That was a lot of work! But we've got a new best target! // OOOF! That was a lot of work! But we've got a new best target!
pBestStab->ubPossible = TRUE; pBestStab->ubPossible = TRUE;
pBestStab->ubOpponent = pOpponent->ubID; pBestStab->ubOpponent = pOpponent->ubID;
pBestStab->ubAimTime = ubBestAimTime; pBestStab->ubAimTime = ubBestAimTime;
pBestStab->ubChanceToReallyHit = ubChanceToReallyHit; pBestStab->ubChanceToReallyHit = ubChanceToReallyHit;
pBestStab->sTarget = pOpponent->sGridNo; pBestStab->sTarget = pOpponent->sGridNo;
pBestStab->bTargetLevel = pOpponent->pathing.bLevel; pBestStab->bTargetLevel = pOpponent->pathing.bLevel;
pBestStab->iAttackValue = iAttackValue; pBestStab->iAttackValue = iAttackValue;
pBestStab->ubAPCost = ubMinAPCost + ubBestAimTime; pBestStab->ubAPCost = ubMinAPCost + ubBestAimTime;
} }
} }
@@ -3480,7 +3481,8 @@ BOOLEAN GetBestAoEGridNo(SOLDIERTYPE *pSoldier, INT32* pGridNo, INT16 aRadius, U
{ {
UINT16 ubLoop, ubLoop2; UINT16 ubLoop, ubLoop2;
INT32 sGridNo, sFriendTile[MAXMERCS], sOpponentTile[MAXMERCS], sTabooTile[MAXMERCS]; INT32 sGridNo, sFriendTile[MAXMERCS], sOpponentTile[MAXMERCS], sTabooTile[MAXMERCS];
UINT16 ubFriendCnt = 0,ubOpponentCnt = 0, ubTabooCnt = 0, ubOpponentID[MAXMERCS]; UINT16 ubFriendCnt = 0, ubOpponentCnt = 0, ubTabooCnt = 0;
SoldierID ubOpponentID[MAXMERCS];
INT32 bMaxLeft,bMaxRight,bMaxUp,bMaxDown, i, j; INT32 bMaxLeft,bMaxRight,bMaxUp,bMaxDown, i, j;
INT8 bPersOL, bPublOL; INT8 bPersOL, bPublOL;
SOLDIERTYPE *pFriend; SOLDIERTYPE *pFriend;
@@ -3670,7 +3672,7 @@ BOOLEAN GetBestAoEGridNo(SOLDIERTYPE *pSoldier, INT32* pGridNo, INT16 aRadius, U
// Get the ID of the farthest opponent we can see, with an optional minimum range // Get the ID of the farthest opponent we can see, with an optional minimum range
// puID - ID of the farthest opponent pSoldier can see // puID - ID of the farthest opponent pSoldier can see
// sRange - only return an true and give an idea if opponent found is further away than this // sRange - only return an true and give an idea if opponent found is further away than this
BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, UINT16 * puID, INT16 sRange) BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, SoldierID *puID, INT16 sRange)
{ {
INT32 sGridNo; INT32 sGridNo;
UINT32 uiLoop; UINT32 uiLoop;
@@ -3885,13 +3887,13 @@ void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
INT8 bLevel = pSoldier->pathing.bLevel; INT8 bLevel = pSoldier->pathing.bLevel;
// check all friends // check all friends
SOLDIERTYPE * pFriend; SOLDIERTYPE *pFriend;
INT32 sClosestFriendSpot = NOWHERE; INT32 sClosestFriendSpot = NOWHERE;
INT8 bClosestFriendLevel = 0; INT8 bClosestFriendLevel = 0;
UINT16 ubClosestFriendID = NOBODY; SoldierID ubClosestFriendID = NOBODY;
INT32 sFriendSpot; INT32 sFriendSpot;
INT8 bFriendLevel; INT8 bFriendLevel;
INT32 sClosestOpponent; INT32 sClosestOpponent;
@@ -3999,7 +4001,7 @@ void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
// check if we can toss grenade at spot, and prepare attack data // check if we can toss grenade at spot, and prepare attack data
// grenade should be in hand // grenade should be in hand
void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT16 ubOpponentID) void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, SoldierID ubOpponentID)
{ {
UINT16 usInHand, usGrenade; UINT16 usInHand, usGrenade;
INT32 iTossRange; INT32 iTossRange;
+2 -2
View File
@@ -1154,8 +1154,8 @@ INT8 CreatureDecideActionBlack( SOLDIERTYPE * pSoldier )
// if the selected opponent is not a threat (unconscious & !serviced) // if the selected opponent is not a threat (unconscious & !serviced)
// (usually, this means all the guys we see our unconscious, but, on // (usually, this means all the guys we see our unconscious, but, on
// rare occasions, we may not be able to shoot a healthy guy, too) // rare occasions, we may not be able to shoot a healthy guy, too)
if ((Menptr[BestShot.ubOpponent].stats.bLife < OKLIFE) && if ((BestShot.ubOpponent->stats.bLife < OKLIFE) &&
!Menptr[BestShot.ubOpponent].bService) !BestShot.ubOpponent->bService)
{ {
// if our attitude is NOT aggressive // if our attitude is NOT aggressive
if (pSoldier->aiData.bAttitude != AGGRESSIVE) if (pSoldier->aiData.bAttitude != AGGRESSIVE)
+4 -4
View File
@@ -595,10 +595,10 @@ INT8 DecideActionBoxerEnteringRing(SOLDIERTYPE *pSoldier)
INT8 DecideActionNamedNPC( SOLDIERTYPE * pSoldier ) INT8 DecideActionNamedNPC( SOLDIERTYPE * pSoldier )
{ {
INT32 sDesiredMercLoc; INT32 sDesiredMercLoc;
UINT8 ubDesiredMercDir; UINT8 ubDesiredMercDir;
UINT8 ubDesiredMerc; SoldierID ubDesiredMerc;
INT32 sDesiredMercDist; INT32 sDesiredMercDist;
#ifdef DEBUGDECISIONS #ifdef DEBUGDECISIONS
STR16 tempstr; STR16 tempstr;
#endif #endif
+5 -5
View File
@@ -119,7 +119,7 @@ void AICenterXY( INT32 sGridNo, FLOAT * pdX, FLOAT * pdY )
*pdY = (FLOAT) (sYPos * CELL_Y_SIZE + CELL_Y_SIZE / 2); *pdY = (FLOAT) (sYPos * CELL_Y_SIZE + CELL_Y_SIZE / 2);
} }
INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft )
{ {
// When considering a gridno for cover, we want to take into account cover if we // When considering a gridno for cover, we want to take into account cover if we
// lie down, so we return the LOWEST chance to get through for that location. // lie down, so we return the LOWEST chance to get through for that location.
@@ -158,7 +158,7 @@ INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOp
return( bWorstCTGT ); return( bWorstCTGT );
} }
INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft )
{ {
// When considering a gridno for cover, we want to take into account cover if we // When considering a gridno for cover, we want to take into account cover if we
// lie down, so we return the LOWEST chance to get through for that location. // lie down, so we return the LOWEST chance to get through for that location.
@@ -192,7 +192,7 @@ INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 s
} }
INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft )
{ {
// NOTE: CTGT stands for "ChanceToGetThrough..." // NOTE: CTGT stands for "ChanceToGetThrough..."
@@ -592,7 +592,7 @@ INT32 CalcCoverValue(SOLDIERTYPE *pMe, INT32 sMyGridNo, INT32 iMyThreat, INT32 i
UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo ) UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo )
{ {
UINT8 ubLoop, ubCount; UINT8 ubLoop, ubCount;
UINT16 ubWhoIsThere; SoldierID ubWhoIsThere;
INT32 sTempGridNo; INT32 sTempGridNo;
ubCount = 0; ubCount = 0;
@@ -603,7 +603,7 @@ UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo )
if ( sTempGridNo != sGridNo ) if ( sTempGridNo != sGridNo )
{ {
ubWhoIsThere = WhoIsThere2( sTempGridNo, pSoldier->pathing.bLevel ); ubWhoIsThere = WhoIsThere2( sTempGridNo, pSoldier->pathing.bLevel );
if ( ubWhoIsThere != NOBODY && ubWhoIsThere != pSoldier->ubID && MercPtrs[ ubWhoIsThere ]->bTeam == pSoldier->bTeam ) if ( ubWhoIsThere != NOBODY && ubWhoIsThere != pSoldier->ubID && ubWhoIsThere->bTeam == pSoldier->bTeam )
{ {
ubCount++; ubCount++;
} }
+1 -1
View File
@@ -200,7 +200,7 @@ INT32 MostImportantNoiseHeard( SOLDIERTYPE *pSoldier, INT32 *piRetValue, BOOLEAN
if (*pbPublOL < NOT_HEARD_OR_SEEN) if (*pbPublOL < NOT_HEARD_OR_SEEN)
{ {
// calculate how far this noise was, and its relative "importance" // calculate how far this noise was, and its relative "importance"
iDistAway = SpacesAway(pSoldier->sGridNo,gsPublicLastKnownOppLoc[pSoldier->bTeam][pTemp->ubID]); iDistAway = SpacesAway(pSoldier->sGridNo, gsPublicLastKnownOppLoc[pSoldier->bTeam][pTemp->ubID]);
iNoiseValue = (*pbPublOL) * iDistAway; // always a negative number! iNoiseValue = (*pbPublOL) * iDistAway; // always a negative number!
if (iNoiseValue > iBestValue) if (iNoiseValue > iBestValue)
+7 -7
View File
@@ -42,7 +42,7 @@ BOOLEAN FindAutobandageClimbPoint( INT32 sDesiredGridNo, BOOLEAN fClimbUp )
BUILDING * pBuilding; BUILDING * pBuilding;
UINT8 ubNumClimbSpots; UINT8 ubNumClimbSpots;
UINT8 ubLoop; UINT8 ubLoop;
UINT16 ubWhoIsThere; SoldierID ubWhoIsThere;
pBuilding = FindBuilding( sDesiredGridNo ); pBuilding = FindBuilding( sDesiredGridNo );
if (!pBuilding) if (!pBuilding)
@@ -55,12 +55,12 @@ BOOLEAN FindAutobandageClimbPoint( INT32 sDesiredGridNo, BOOLEAN fClimbUp )
for ( ubLoop = 0; ubLoop < ubNumClimbSpots; ubLoop++ ) for ( ubLoop = 0; ubLoop < ubNumClimbSpots; ubLoop++ )
{ {
ubWhoIsThere = WhoIsThere2( pBuilding->sUpClimbSpots[ ubLoop ], 1 ); ubWhoIsThere = WhoIsThere2( pBuilding->sUpClimbSpots[ ubLoop ], 1 );
if ( ubWhoIsThere != NOBODY && !CanCharacterAutoBandageTeammate( MercPtrs[ ubWhoIsThere ] ) ) if ( ubWhoIsThere != NOBODY && !CanCharacterAutoBandageTeammate( ubWhoIsThere ) )
{ {
continue; continue;
} }
ubWhoIsThere = WhoIsThere2( pBuilding->sDownClimbSpots[ ubLoop ], 0 ); ubWhoIsThere = WhoIsThere2( pBuilding->sDownClimbSpots[ ubLoop ], 0 );
if ( ubWhoIsThere != NOBODY && !CanCharacterAutoBandageTeammate( MercPtrs[ ubWhoIsThere ] ) ) if ( ubWhoIsThere != NOBODY && !CanCharacterAutoBandageTeammate( ubWhoIsThere ) )
{ {
continue; continue;
} }
@@ -122,7 +122,7 @@ BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck )
UINT16 cnt; UINT16 cnt;
UINT16 ubMedics = 0, ubPatients = 0; UINT16 ubMedics = 0, ubPatients = 0;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
static UINT16 ubIDForFullCheck = NOBODY; static SoldierID ubIDForFullCheck = NOBODY;
// run though the list of chars on team // run though the list of chars on team
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
@@ -311,7 +311,7 @@ INT8 FindBestPatient( SOLDIERTYPE * pSoldier, BOOLEAN * pfDoClimb )
{ {
// only switch to this patient if our distance is closer than // only switch to this patient if our distance is closer than
// the other medic's // the other medic's
pOtherMedic = MercPtrs[ pPatient->ubAutoBandagingMedic ]; pOtherMedic = pPatient->ubAutoBandagingMedic;
sOtherAdjacentGridNo = FindAdjacentGridEx( pOtherMedic, sPatientGridNo, &ubDirection, &sAdjustedGridNo, FALSE, FALSE ); sOtherAdjacentGridNo = FindAdjacentGridEx( pOtherMedic, sPatientGridNo, &ubDirection, &sAdjustedGridNo, FALSE, FALSE );
if (sOtherAdjacentGridNo != -1) if (sOtherAdjacentGridNo != -1)
{ {
@@ -379,8 +379,8 @@ INT8 FindBestPatient( SOLDIERTYPE * pSoldier, BOOLEAN * pfDoClimb )
if (pBestPatient->ubAutoBandagingMedic != NOBODY) if (pBestPatient->ubAutoBandagingMedic != NOBODY)
{ {
// cancel that medic // cancel that medic
DebugAI(AI_MSG_INFO, MercPtrs[pBestPatient->ubAutoBandagingMedic], String("CancelAIAction: medic: find patient")); DebugAI(AI_MSG_INFO, pBestPatient->ubAutoBandagingMedic, String("CancelAIAction: medic: find patient"));
CancelAIAction( MercPtrs[ pBestPatient->ubAutoBandagingMedic ], TRUE ); CancelAIAction( pBestPatient->ubAutoBandagingMedic, TRUE );
} }
pBestPatient->ubAutoBandagingMedic = pSoldier->ubID; pBestPatient->ubAutoBandagingMedic = pSoldier->ubID;
*pfDoClimb = FALSE; *pfDoClimb = FALSE;
+6 -5
View File
@@ -2557,12 +2557,13 @@ void Converse( UINT8 ubNPC, UINT8 ubMerc, INT8 bApproach, UINT32 uiApproachData
} }
} }
INT32 NPCConsiderInitiatingConv( SOLDIERTYPE * pNPC, UINT8 * pubDesiredMerc ) INT32 NPCConsiderInitiatingConv( SOLDIERTYPE * pNPC, SoldierID * pubDesiredMerc )
{ {
INT32 sMyGridNo, sDist, sDesiredMercDist = 100; INT32 sMyGridNo, sDist, sDesiredMercDist = 100;
UINT8 ubNPC; UINT8 ubNPC;
UINT16 ubMerc, ubDesiredMerc = NOBODY; UINT16 ubMerc;
UINT8 ubTalkDesire, ubHighestTalkDesire = 0; SoldierID ubDesiredMerc = NOBODY;
UINT8 ubTalkDesire, ubHighestTalkDesire = 0;
SOLDIERTYPE * pMerc; SOLDIERTYPE * pMerc;
SOLDIERTYPE * pDesiredMerc = NULL; SOLDIERTYPE * pDesiredMerc = NULL;
NPCQuoteInfo * pNPCQuoteInfoArray; NPCQuoteInfo * pNPCQuoteInfoArray;
+4 -4
View File
@@ -228,7 +228,7 @@ void FreeUpNPCFromLoweringGun( SOLDIERTYPE *pSoldier );
void FreeUpNPCFromRoofClimb(SOLDIERTYPE *pSoldier ); void FreeUpNPCFromRoofClimb(SOLDIERTYPE *pSoldier );
UINT8 GetClosestOpponent( SOLDIERTYPE *pSoldier ); UINT8 GetClosestOpponent( SOLDIERTYPE *pSoldier );
UINT16 GetMostThreateningOpponent( SOLDIERTYPE *pSoldier ); SoldierID GetMostThreateningOpponent( SOLDIERTYPE *pSoldier );
void HandleSoldierAI( SOLDIERTYPE *pSoldier ); void HandleSoldierAI( SOLDIERTYPE *pSoldier );
void HandleInitialRedAlert( INT8 bTeam, UINT8 ubCommunicate); void HandleInitialRedAlert( INT8 bTeam, UINT8 ubCommunicate);
@@ -271,9 +271,9 @@ INT32 FindFlankingSpot(SOLDIERTYPE *pSoldier, INT32 sPos, INT8 bAction );
BOOLEAN CanClimbFromHere (SOLDIERTYPE * pSoldier, BOOLEAN fUp ); BOOLEAN CanClimbFromHere (SOLDIERTYPE * pSoldier, BOOLEAN fUp );
// HEADROCK HAM 3.6: Adding includes for A* cover calculations // HEADROCK HAM 3.6: Adding includes for A* cover calculations
INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft );
INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft );
INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft );
UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo ); UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo );
// Flugente: get the id of the closest soldier (coser than x tiles) of a specific team with a specific flag that we can currently see // Flugente: get the id of the closest soldier (coser than x tiles) of a specific team with a specific flag that we can currently see
+1 -1
View File
@@ -4855,7 +4855,7 @@ void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency )
} }
} }
void SetOffPanicBombs( UINT16 ubID, INT8 bPanicTrigger ) void SetOffPanicBombs( SoldierID ubID, INT8 bPanicTrigger )
{ {
// need to turn off gridnos & flags in gTacticalStatus // need to turn off gridnos & flags in gTacticalStatus
gTacticalStatus.sPanicTriggerGridNo[ bPanicTrigger ] = NOWHERE; gTacticalStatus.sPanicTriggerGridNo[ bPanicTrigger ] = NOWHERE;
+1 -1
View File
@@ -109,7 +109,7 @@ void DecayBombTimers( void );
void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency ); void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency );
BOOLEAN SetOffBombsInGridNo( SoldierID ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ); BOOLEAN SetOffBombsInGridNo( SoldierID ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel );
void ActivateSwitchInGridNo( SoldierID ubID, INT32 sGridNo ); void ActivateSwitchInGridNo( SoldierID ubID, INT32 sGridNo );
void SetOffPanicBombs( UINT16 ubID, INT8 bPanicTrigger ); void SetOffPanicBombs( SoldierID ubID, INT8 bPanicTrigger );
void UpdateExplosionFrame( INT32 iIndex, INT16 sCurrentFrame ); void UpdateExplosionFrame( INT32 iIndex, INT16 sCurrentFrame );
void RemoveExplosionData( INT32 iIndex ); void RemoveExplosionData( INT32 iIndex );
+1 -1
View File
@@ -348,7 +348,7 @@ INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwne
// OJW - 20091027 - Synchronizing smoke effect start for multiplayer // OJW - 20091027 - Synchronizing smoke effect start for multiplayer
if (is_networked && is_client) if (is_networked && is_client)
{ {
SOLDIERTYPE* pSoldier = MercPtrs[ubOwner]; SOLDIERTYPE* pSoldier = ubOwner;
if (pSoldier != NULL) if (pSoldier != NULL)
{ {
if (pSoldier->bTeam == 0 || (pSoldier->bTeam == 1 && is_server)) if (pSoldier->bTeam == 0 || (pSoldier->bTeam == 1 && is_server))
+9 -9
View File
@@ -28,16 +28,16 @@ typedef struct TAG_SMOKE_EFFECT
UINT8 ubDuration; // the number of turns gas will remain effective UINT8 ubDuration; // the number of turns gas will remain effective
UINT8 ubRadius; // the current radius of the cloud in map tiles UINT8 ubRadius; // the current radius of the cloud in map tiles
UINT8 bFlags; // 0 - outdoors (fast spread), 1 - indoors (slow) UINT8 bFlags; // 0 - outdoors (fast spread), 1 - indoors (slow)
UINT8 bAge; // the number of turns gas has been around UINT8 bAge; // the number of turns gas has been around
BOOLEAN fAllocated; BOOLEAN fAllocated;
INT8 bType; INT8 bType;
UINT16 usItem; UINT16 usItem;
UINT16 ubOwner; SoldierID ubOwner;
UINT8 ubGeneration; UINT8 ubGeneration;
UINT32 uiTimeOfLastUpdate; UINT32 uiTimeOfLastUpdate;
INT8 iMPTeamIndex; INT8 iMPTeamIndex;
INT32 iMPSmokeEffectID; INT32 iMPSmokeEffectID;
} SMOKEEFFECT; } SMOKEEFFECT;
extern SMOKEEFFECT gSmokeEffectData[ NUM_SMOKE_EFFECT_SLOTS ]; extern SMOKEEFFECT gSmokeEffectData[ NUM_SMOKE_EFFECT_SLOTS ];
+1 -1
View File
@@ -768,7 +768,7 @@ void HandleOverheadUI(void)
{ {
INT32 sMousePos = 0; INT32 sMousePos = 0;
InputAtom InputEvent; InputAtom InputEvent;
UINT16 ubID; SoldierID ubID;
// CHECK FOR MOUSE OVER REGIONS... // CHECK FOR MOUSE OVER REGIONS...
if(GetOverheadMouseGridNo(&sMousePos)) if(GetOverheadMouseGridNo(&sMousePos))
+2 -2
View File
@@ -2734,7 +2734,7 @@ void HandleArmedObjectImpact( REAL_OBJECT *pObject )
(*pObj)[0]->data.misc.bDelay = 1; (*pObj)[0]->data.misc.bDelay = 1;
// for non-player grenades, add turn so player could disarm grenade or run away // for non-player grenades, add turn so player could disarm grenade or run away
if ( pObject->ubOwner != NOBODY && MercPtrs[pObject->ubOwner]->bTeam != gbPlayerNum ) if ( pObject->ubOwner != NOBODY && pObject->ubOwner->bTeam != gbPlayerNum )
{ {
(*pObj)[0]->data.misc.bDelay++; (*pObj)[0]->data.misc.bDelay++;
} }
@@ -2762,7 +2762,7 @@ void HandleArmedObjectImpact( REAL_OBJECT *pObject )
if ( pObject->ubOwner != NOBODY && !fGoodStatus ) if ( pObject->ubOwner != NOBODY && !fGoodStatus )
{ {
MercPtrs[ pObject->ubOwner ]->DoMercBattleSound( (INT8)( BATTLE_SOUND_CURSE1 ) ); pObject->ubOwner->DoMercBattleSound( (INT8)( BATTLE_SOUND_CURSE1 ) );
} }
} }
} }
+2 -2
View File
@@ -207,7 +207,7 @@ void RemoveAllPits()
void SearchForOtherMembersWithinPitRadiusAndMakeThemFall( INT32 sGridNo, INT16 sRadius ) void SearchForOtherMembersWithinPitRadiusAndMakeThemFall( INT32 sGridNo, INT16 sRadius )
{ {
INT32 x, y, sNewGridNo; INT32 x, y, sNewGridNo;
UINT16 ubID; SoldierID ubID;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
@@ -227,7 +227,7 @@ void SearchForOtherMembersWithinPitRadiusAndMakeThemFall( INT32 sGridNo, INT16 s
{ {
// OK, make guy fall... // OK, make guy fall...
// Set data to look for exit grid.... // Set data to look for exit grid....
pSoldier = MercPtrs[ ubID ]; pSoldier = ubID;
pSoldier->aiData.uiPendingActionData4 = sNewGridNo; pSoldier->aiData.uiPendingActionData4 = sNewGridNo;
+2 -2
View File
@@ -1915,9 +1915,9 @@ INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, IN
gpWorldLevelData[ tmpgridno ].uiFlags |= MAPELEMENT_STRUCTURE_DAMAGED; gpWorldLevelData[ tmpgridno ].uiFlags |= MAPELEMENT_STRUCTURE_DAMAGED;
// handle structure revenge - damage to vehicle - to be resolved after movement // handle structure revenge - damage to vehicle - to be resolved after movement
if ( ubOwner != NOBODY && MercPtrs[ubOwner] && !ARMED_VEHICLE( MercPtrs[ubOwner] ) ) if ( ubOwner != NOBODY && !ARMED_VEHICLE( ubOwner ) )
{ {
MercPtrs[ubOwner]->SoldierTakeDelayedDamage(0, Random(max(0,(ubBaseArmour-10)/5)) + max(0,(ubBaseArmour-10)/5), 0, TAKE_DAMAGE_STRUCTURE_EXPLOSION, NOBODY, MercPtrs[ ubOwner ]->sGridNo, 0, TRUE); ubOwner->SoldierTakeDelayedDamage(0, Random(max(0,(ubBaseArmour-10)/5)) + max(0,(ubBaseArmour-10)/5), 0, TAKE_DAMAGE_STRUCTURE_EXPLOSION, NOBODY, ubOwner->sGridNo, 0, TRUE);
} }
// recompile = TRUE means that we destroyed something // recompile = TRUE means that we destroyed something