mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
**********************************************************
** Big Maps Projects code (incl. Multiplayer v1.5 ** ********************************************************** - Merged Big Maps Project code from BMP+MP trunk (Revision: 3340) o Complete SVN Revision history: https://81.169.133.124/source/ja2/branches/Wanne/JA2%201.13%20MP - Before THIS merge, I made a branch of the existing 1.13 source o SVN Branch: https://81.169.133.124/source/ja2/branches/JA2_rev.3336/src - Removed old VS 6.0 and VS 2003 project and solutions files, because compilation is broken long time ago - I will add VS 2010 projects and solution file in the next few days git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@3341 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+23
-23
@@ -118,7 +118,7 @@ typedef struct
|
||||
FLOAT dYPos;
|
||||
INT16 sX;
|
||||
INT16 sY;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
|
||||
|
||||
UINT8 ubFiller[ 32 ];
|
||||
@@ -308,7 +308,7 @@ BOOLEAN BeginAirRaid( )
|
||||
}
|
||||
|
||||
|
||||
INT16 PickLocationNearAnyMercInSector( )
|
||||
INT32 PickLocationNearAnyMercInSector( )
|
||||
{
|
||||
UINT8 ubMercsInSector[ 20 ] = { 0 };
|
||||
UINT8 ubNumMercs = 0;
|
||||
@@ -349,18 +349,18 @@ INT16 PickLocationNearAnyMercInSector( )
|
||||
return( NOWHERE );
|
||||
}
|
||||
|
||||
INT16 PickRandomLocationAtMinSpacesAway( INT16 sGridNo, INT16 sMinValue, INT16 sRandomVar )
|
||||
INT32 PickRandomLocationAtMinSpacesAway( INT32 sGridNo, INT16 sMinValue, INT16 sRandomVar )
|
||||
{
|
||||
INT16 sNewGridNo = NOWHERE;
|
||||
INT32 sNewGridNo = NOWHERE;
|
||||
INT16 sX, sY, sNewX, sNewY;
|
||||
INT16 cnt = 0;
|
||||
INT32 cnt = 0;
|
||||
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,"PickRandomLocationAtMinSpacesAway");
|
||||
|
||||
sX = CenterX( sGridNo );
|
||||
sY = CenterY( sGridNo );
|
||||
|
||||
while( sNewGridNo == NOWHERE )
|
||||
|
||||
while(TileIsOutOfBounds(sNewGridNo))
|
||||
{
|
||||
sNewX = sX + sMinValue + (INT16)Random( sRandomVar );
|
||||
sNewY = sY + sMinValue + (INT16)Random( sRandomVar );
|
||||
@@ -379,10 +379,8 @@ INT16 PickRandomLocationAtMinSpacesAway( INT16 sGridNo, INT16 sMinValue, INT16 s
|
||||
sNewGridNo = GETWORLDINDEXFROMWORLDCOORDS( sNewY, sNewX );
|
||||
|
||||
// Check if visible on screen....
|
||||
if ( cnt < 50 && !GridNoOnVisibleWorldTile( sNewGridNo ) )
|
||||
{
|
||||
if(!GridNoOnVisibleWorldTile(sNewGridNo))//dnl ch56 141009
|
||||
sNewGridNo = NOWHERE;
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
|
||||
@@ -575,7 +573,7 @@ void AirRaidStartEnding( )
|
||||
|
||||
void BeginBombing( )
|
||||
{
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT32 iSoundStartDelay;
|
||||
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("BeginBombing"));
|
||||
@@ -590,9 +588,10 @@ void BeginBombing( )
|
||||
|
||||
// Pick location...
|
||||
gsDiveTargetLocation = PickLocationNearAnyMercInSector( );
|
||||
|
||||
if ( gsDiveTargetLocation == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(gsDiveTargetLocation))
|
||||
{
|
||||
// TODO.WANNE: Hardcoded grid number
|
||||
gsDiveTargetLocation = 10234;
|
||||
}
|
||||
|
||||
@@ -632,7 +631,7 @@ void BeginBombing( )
|
||||
|
||||
void BeginDive( )
|
||||
{
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT32 iSoundStartDelay;
|
||||
|
||||
|
||||
@@ -650,9 +649,10 @@ void BeginDive( )
|
||||
// Pick location...
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("BeginDive: pick location"));
|
||||
gsDiveTargetLocation = PickLocationNearAnyMercInSector( );
|
||||
|
||||
if ( gsDiveTargetLocation == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(gsDiveTargetLocation))
|
||||
{
|
||||
// TODO.WANNE: Hardcoded grid number
|
||||
gsDiveTargetLocation = 10234;
|
||||
}
|
||||
|
||||
@@ -711,7 +711,7 @@ void MoveDiveAirplane( FLOAT dAngle )
|
||||
void DoDive( )
|
||||
{
|
||||
INT16 sRange;
|
||||
INT16 sGridNo, sOldGridNo;
|
||||
INT32 sGridNo, sOldGridNo;
|
||||
|
||||
INT16 sTargetX, sTargetY;
|
||||
INT16 sStrafeX, sStrafeY;
|
||||
@@ -810,7 +810,7 @@ void DoDive( )
|
||||
}
|
||||
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,"DoDive: Fire bullets");
|
||||
if ( GridNoOnVisibleWorldTile( (INT16)( GETWORLDINDEXFROMWORLDCOORDS( sStrafeY, sStrafeX ) ) ) )
|
||||
if ( GridNoOnVisibleWorldTile( GETWORLDINDEXFROMWORLDCOORDS( sStrafeY, sStrafeX ) ) )
|
||||
{
|
||||
//if ( gsNotLocatedYet && !( gTacticalStatus.uiFlags & INCOMBAT ) )
|
||||
// {
|
||||
@@ -851,7 +851,7 @@ void DoDive( )
|
||||
// Find delta Movement for Y pos
|
||||
sStrafeY = (INT16)( sY + dDeltaYPos );
|
||||
|
||||
if ( GridNoOnVisibleWorldTile( (INT16)( GETWORLDINDEXFROMWORLDCOORDS( sStrafeY, sStrafeX ) ) ) )
|
||||
if ( GridNoOnVisibleWorldTile( GETWORLDINDEXFROMWORLDCOORDS( sStrafeY, sStrafeX ) ) )
|
||||
{
|
||||
//if ( ( gTacticalStatus.uiFlags & INCOMBAT ) )
|
||||
{
|
||||
@@ -888,7 +888,7 @@ void DoDive( )
|
||||
void DoBombing( )
|
||||
{
|
||||
INT16 sRange;
|
||||
INT16 sGridNo, sOldGridNo, sBombGridNo;
|
||||
INT32 sGridNo, sOldGridNo, sBombGridNo;
|
||||
|
||||
INT16 sTargetX, sTargetY;
|
||||
UINT16 usItem;
|
||||
@@ -975,7 +975,7 @@ void DoBombing( )
|
||||
dDeltaYPos = BOMB_DIST * (FLOAT)cos( dAngle );
|
||||
sStrafeY = (INT16)( gsDiveY + dDeltaYPos );
|
||||
|
||||
if ( GridNoOnVisibleWorldTile( (INT16)( GETWORLDINDEXFROMWORLDCOORDS( sStrafeY, sStrafeX ) ) ) )
|
||||
if ( GridNoOnVisibleWorldTile( GETWORLDINDEXFROMWORLDCOORDS( sStrafeY, sStrafeX ) ) )
|
||||
{
|
||||
//if ( gsNotLocatedYet && !( gTacticalStatus.uiFlags & INCOMBAT ) )
|
||||
//{
|
||||
@@ -994,7 +994,7 @@ void DoBombing( )
|
||||
}
|
||||
|
||||
// Pick random gridno....
|
||||
sBombGridNo = PickRandomLocationAtMinSpacesAway( (INT16)( GETWORLDINDEXFROMWORLDCOORDS( sStrafeY, sStrafeX ) ) , 40, 40 );
|
||||
sBombGridNo = PickRandomLocationAtMinSpacesAway( GETWORLDINDEXFROMWORLDCOORDS( sStrafeY, sStrafeX ), 40, 40 );
|
||||
|
||||
if ( ( gTacticalStatus.uiFlags & INCOMBAT ) )
|
||||
{
|
||||
@@ -1006,7 +1006,7 @@ void DoBombing( )
|
||||
}
|
||||
|
||||
// Drop bombs...
|
||||
InternalIgniteExplosion( NOBODY, CenterX( sBombGridNo ), CenterY( sBombGridNo ), 0, sBombGridNo, usItem, fLocate , (UINT8)IsRoofPresentAtGridno( sBombGridNo ) );
|
||||
InternalIgniteExplosion( NOBODY, CenterX( sBombGridNo ), CenterY( sBombGridNo ), 0, sBombGridNo, usItem, fLocate , (UINT8)IsRoofPresentAtGridNo( sBombGridNo ) );
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -3438,7 +3438,7 @@ UINT16 DetermineSoldierAnimationSurface( SOLDIERTYPE *pSoldier, UINT16 usAnimSta
|
||||
|
||||
// Assume a target gridno is here.... get direction...
|
||||
// ATE: use +2 in gridno because here head is far from body
|
||||
bDir = (INT8)GetDirectionToGridNoFromGridNo( (INT16)( pSoldier->sGridNo + 2 ), pSoldier->sTargetGridNo );
|
||||
bDir = (INT8)GetDirectionToGridNoFromGridNo( pSoldier->sGridNo + 2, pSoldier->sTargetGridNo );
|
||||
|
||||
return( gusQueenMonsterSpitAnimPerDir[ bDir ] );
|
||||
}
|
||||
|
||||
@@ -225,11 +225,12 @@ BOOLEAN SaveArmsDealerInventoryToSaveGameFile( HWFILE hFile )
|
||||
//loop through all the dealers inventories
|
||||
for( ubArmsDealer=0; ubArmsDealer<NUM_ARMS_DEALERS; ubArmsDealer++ )
|
||||
{
|
||||
int size = gArmsDealersInventory[ubArmsDealer].size();
|
||||
int size = gArmsDealersInventory.empty() ? 0 : gArmsDealersInventory[ubArmsDealer].size();
|
||||
if (!FileWrite( hFile, &size, sizeof( int ), &uiNumBytesWritten ))
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
if(gArmsDealersInventory.empty()) continue;
|
||||
//loop through this dealer's individual items
|
||||
for (DealerItemList::iterator iter = gArmsDealersInventory[ubArmsDealer].begin();
|
||||
iter != gArmsDealersInventory[ubArmsDealer].end(); ++iter) {
|
||||
|
||||
+8
-8
@@ -26,7 +26,7 @@
|
||||
#include "message.h"
|
||||
#endif
|
||||
|
||||
INT16 gsBoxerGridNo[ NUM_BOXERS ] = { 11393, 11233, 11073 };
|
||||
INT32 gsBoxerGridNo[ NUM_BOXERS ] = { 11393, 11233, 11073 };
|
||||
UINT8 gubBoxerID[ NUM_BOXERS ] = { NOBODY, NOBODY, NOBODY };
|
||||
BOOLEAN gfBoxerFought[ NUM_BOXERS ] = { FALSE, FALSE, FALSE };
|
||||
BOOLEAN gfLastBoxingMatchWonByPlayer = FALSE;
|
||||
@@ -82,13 +82,14 @@ void ExitBoxing( void )
|
||||
CancelAIAction( pSoldier, TRUE );
|
||||
pSoldier->aiData.bAlertStatus = STATUS_GREEN;
|
||||
pSoldier->aiData.bUnderFire = 0;
|
||||
|
||||
// HEADROCK HAM 3.6: Make sure all boxers' APs have been reset to a reasonable number. Otherwise,
|
||||
// the AI combatant may fail several conditions in subsequent functions, and fail to leave the ring
|
||||
// as a result.
|
||||
if (pSoldier->bActionPoints < (APBPConstants[AP_MAXIMUM]*6)/10)
|
||||
{
|
||||
pSoldier->bActionPoints = (APBPConstants[AP_MAXIMUM]*6)/10;
|
||||
}
|
||||
// the AI combatant may fail several conditions in subsequent functions, and fail to leave the ring
|
||||
// as a result.
|
||||
if (pSoldier->bActionPoints < (APBPConstants[AP_MAXIMUM]*6)/10)
|
||||
{
|
||||
pSoldier->bActionPoints = (APBPConstants[AP_MAXIMUM]*6)/10;
|
||||
}
|
||||
|
||||
// if necessary, revive boxer so he can leave ring
|
||||
if (pSoldier->stats.bLife > 0 && (pSoldier->stats.bLife < OKLIFE || pSoldier->bBreath < OKBREATH ) )
|
||||
@@ -151,7 +152,6 @@ void BoxingPlayerDisqualified( SOLDIERTYPE * pOffender, INT8 bReason )
|
||||
|
||||
void TriggerEndOfBoxingRecord( SOLDIERTYPE * pSoldier )
|
||||
{
|
||||
// This trigger runs once for each boxer, so only when the SECOND boxer gets out will this function run in its entirely.
|
||||
// unlock UI
|
||||
guiPendingOverrideEvent = LU_ENDUILOCK;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ enum DisqualificationReasons
|
||||
BAD_ATTACK
|
||||
} ;
|
||||
|
||||
extern INT16 gsBoxerGridNo[ NUM_BOXERS ];
|
||||
extern INT32 gsBoxerGridNo[ NUM_BOXERS ];
|
||||
extern UINT8 gubBoxerID[ NUM_BOXERS ];
|
||||
extern BOOLEAN gfBoxerFought[ NUM_BOXERS ];
|
||||
extern INT8 gbBoxingState;
|
||||
|
||||
+2
-2
@@ -31,7 +31,7 @@ typedef struct
|
||||
UINT8 ubTargetID;
|
||||
INT8 bStartCubesAboveLevelZ;
|
||||
INT8 bEndCubesAboveLevelZ;
|
||||
UINT32 sGridNo;
|
||||
INT32 sGridNo;
|
||||
INT16 sUnused;
|
||||
UINT16 usLastStructureHit;
|
||||
FIXEDPT qCurrX;
|
||||
@@ -57,7 +57,7 @@ typedef struct
|
||||
UINT8 ubTilesPerUpdate;
|
||||
UINT16 usClockTicksPerUpdate;
|
||||
SOLDIERTYPE *pFirer;
|
||||
UINT32 sTargetGridNo;
|
||||
INT32 sTargetGridNo;
|
||||
INT16 sHitBy;
|
||||
INT32 iImpact;
|
||||
INT32 iImpactReduction;
|
||||
|
||||
@@ -1299,7 +1299,6 @@ UINT8 CurrentPlayerProgressPercentage(void)
|
||||
{
|
||||
UINT32 uiCurrentIncome;
|
||||
UINT32 uiPossibleIncome;
|
||||
// HEADROCK HAM 3: Changed to UINT16 to avoid overflow
|
||||
UINT16 usCurrentProgress;
|
||||
UINT16 ubKillsPerPoint;
|
||||
UINT16 usKillsProgress;
|
||||
@@ -1458,7 +1457,6 @@ UINT8 CurrentPlayerProgressPercentage(void)
|
||||
|
||||
return((UINT8)usCurrentProgress);
|
||||
}
|
||||
|
||||
UINT8 HighestPlayerProgressPercentage(void)
|
||||
{
|
||||
if( gfEditMode )
|
||||
@@ -1467,6 +1465,7 @@ UINT8 HighestPlayerProgressPercentage(void)
|
||||
return(gStrategicStatus.ubHighestProgress);
|
||||
}
|
||||
|
||||
|
||||
// monitors the highest level of progress that player has achieved so far (checking hourly),
|
||||
// as opposed to his immediate situation (which may be worse if he's suffered a setback).
|
||||
void HourlyProgressUpdate(void)
|
||||
|
||||
@@ -655,14 +655,14 @@ void HandleDialogue( )
|
||||
if ( gfMikeShouldSayHi == TRUE )
|
||||
{
|
||||
SOLDIERTYPE * pMike;
|
||||
INT16 sPlayerGridNo;
|
||||
INT32 sPlayerGridNo;
|
||||
UINT8 ubPlayerID;
|
||||
|
||||
pMike = FindSoldierByProfileID( MIKE, FALSE );
|
||||
if ( pMike )
|
||||
{
|
||||
sPlayerGridNo = ClosestPC( pMike, NULL );
|
||||
if (sPlayerGridNo != NOWHERE )
|
||||
sPlayerGridNo = ClosestPC( pMike, NULL );
|
||||
if (!TileIsOutOfBounds(sPlayerGridNo))
|
||||
{
|
||||
ubPlayerID = WhoIsThere2( sPlayerGridNo, 0 );
|
||||
if (ubPlayerID != NOBODY)
|
||||
@@ -896,7 +896,7 @@ void HandleDialogue( )
|
||||
gTacticalStatus.fLockItemLocators = FALSE;
|
||||
|
||||
// Slide to location!
|
||||
SlideToLocation( 0, (INT16)QItem->uiSpecialEventData );
|
||||
SlideToLocation( 0, QItem->uiSpecialEventData );
|
||||
|
||||
gpCurrentTalkingFace = &gFacesData[ QItem->iFaceIndex ];
|
||||
gubCurrentTalkingID = QItem->ubCharacterNum;
|
||||
@@ -1086,7 +1086,7 @@ void HandleDialogue( )
|
||||
{
|
||||
if ( QItem->bUIHandlerID == DIALOGUE_NPC_UI )
|
||||
{
|
||||
HandleNPCGotoGridNo( (UINT8)QItem->uiSpecialEventData, (INT16)QItem->uiSpecialEventData2, (UINT8)QItem->uiSpecialEventData3 );
|
||||
HandleNPCGotoGridNo( (UINT8)QItem->uiSpecialEventData, (UINT16)QItem->uiSpecialEventData2, (UINT8)QItem->uiSpecialEventData3 );//dnl!!!
|
||||
}
|
||||
}
|
||||
else if ( QItem->uiSpecialEventFlag & DIALOGUE_SPECIAL_EVENT_DO_ACTION )
|
||||
@@ -2569,7 +2569,7 @@ void SayQuoteFromAnyBodyInThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSect
|
||||
}
|
||||
}
|
||||
|
||||
void SayQuoteFromNearbyMercInSector( INT16 sGridNo, INT8 bDistance, UINT16 usQuoteNum )
|
||||
void SayQuoteFromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuoteNum )
|
||||
{
|
||||
// WDS - make number of mercenaries, etc. be configurable
|
||||
std::vector<UINT8> ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0 );
|
||||
@@ -2614,7 +2614,7 @@ void SayQuoteFromNearbyMercInSector( INT16 sGridNo, INT8 bDistance, UINT16 usQuo
|
||||
|
||||
}
|
||||
|
||||
void SayQuote58FromNearbyMercInSector( INT16 sGridNo, INT8 bDistance, UINT16 usQuoteNum, INT8 bSex )
|
||||
void SayQuote58FromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuoteNum, INT8 bSex )
|
||||
{
|
||||
// WDS - make number of mercenaries, etc. be configurable
|
||||
std::vector<UINT8> ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0);
|
||||
|
||||
@@ -298,8 +298,8 @@ void ShutdownStaticExternalNPCFaces( void );
|
||||
|
||||
void SayQuoteFromAnyBodyInSector( UINT16 usQuoteNum );
|
||||
void SayQuoteFromAnyBodyInThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT16 usQuoteNum );
|
||||
void SayQuoteFromNearbyMercInSector( INT16 sGridNo, INT8 bDistance, UINT16 usQuoteNum );
|
||||
void SayQuote58FromNearbyMercInSector( INT16 sGridNo, INT8 bDistance, UINT16 usQuoteNum, INT8 bSex );
|
||||
void SayQuoteFromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuoteNum );
|
||||
void SayQuote58FromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuoteNum, INT8 bSex );
|
||||
|
||||
|
||||
void ExecuteTacticalTextBox( INT16 sLeftPosition, STR16 pString );
|
||||
|
||||
+38
-37
@@ -42,7 +42,7 @@ class SOLDIERTYPE;
|
||||
|
||||
struct CoverCell
|
||||
{
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
INT8 bCover;
|
||||
BOOLEAN fInverseColor;
|
||||
|
||||
@@ -81,7 +81,11 @@ const UINT8 animArr[3] = {
|
||||
|
||||
INT16 gsMinCellX, gsMinCellY, gsMaxCellX, gsMaxCellY = -1;
|
||||
|
||||
CoverCell gCoverViewArea[ COVER_X_CELLS ][ COVER_Y_CELLS ][ COVER_Z_CELLS ];
|
||||
// WANNE - BMP: COVER_X_CELLS, COVER_Y_CELLS, have to be constants,
|
||||
// so I set them to 2000 (for rows and cols). In normal map it is 160
|
||||
|
||||
//CoverCell gCoverViewArea[ COVER_X_CELLS ][ COVER_Y_CELLS ][ COVER_Z_CELLS ];
|
||||
CoverCell gCoverViewArea[ 2000 ][ 2000 ][ COVER_Z_CELLS ];
|
||||
|
||||
DWORD guiCoverNextUpdateTime = 0;
|
||||
|
||||
@@ -93,22 +97,22 @@ CHAR16* GetTerrainName( const UINT8& ubTerrainType );
|
||||
|
||||
TileDefines GetTileCoverIndex( const INT8& bCover );
|
||||
|
||||
void AddCoverObjectToWorld( const INT16& sGridNo, const UINT16& usGraphic, const BOOLEAN& fRoof );
|
||||
void RemoveCoverObjectFromWorld( const INT16 sGridNo, const UINT16& usGraphic, const BOOLEAN& fRoof );
|
||||
void AddCoverObjectToWorld( const INT32& sGridNo, const UINT16& usGraphic, const BOOLEAN& fRoof );
|
||||
void RemoveCoverObjectFromWorld( const INT32 sGridNo, const UINT16& usGraphic, const BOOLEAN& fRoof );
|
||||
|
||||
void AddCoverObjectsToViewArea();
|
||||
void RemoveCoverObjectsFromViewArea();
|
||||
|
||||
void CalculateCover();
|
||||
void CalculateCoverForSoldier( SOLDIERTYPE* pForSoldier, const INT16& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover );
|
||||
void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT16& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover, SOLDIERTYPE* pToSoldier=NULL );
|
||||
void CalculateCoverForSoldier( SOLDIERTYPE* pForSoldier, const INT32& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover );
|
||||
void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT32& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover, SOLDIERTYPE* pToSoldier=NULL );
|
||||
|
||||
void GetGridNoForViewPort( const UINT8& ubX, const UINT8& ubY, INT16& sGridNo );
|
||||
void GetGridNoForViewPort( const INT32& ubX, const INT32& ubY, INT32& sGridNo );
|
||||
|
||||
BOOLEAN GridNoOnScreenAndAround( const INT16& sGridNo, const UINT8& ubRadius=2 );
|
||||
BOOLEAN GridNoOnScreenAndAround( const INT32& sGridNo, const UINT8& ubRadius=2 );
|
||||
|
||||
BOOLEAN IsTheRoofVisible( const INT16& sGridNo );
|
||||
BOOLEAN HasAdjTile( const UINT8& ubX, const UINT8& ubY );
|
||||
BOOLEAN IsTheRoofVisible( const INT32& sGridNo );
|
||||
BOOLEAN HasAdjTile( const INT32& ubX, const INT32& ubY );
|
||||
|
||||
//******* Functions **************************************************
|
||||
|
||||
@@ -137,7 +141,7 @@ void SwitchCoverDrawMode()
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, zDebugString );
|
||||
}
|
||||
|
||||
void GetGridNoForViewPort( const UINT8& ubX, const UINT8& ubY, INT16& sGridNo )
|
||||
void GetGridNoForViewPort( const INT32& ubX, const INT32& ubY, INT32& sGridNo )
|
||||
{
|
||||
sGridNo = MAPROWCOLTOPOS( ubY, ubX );
|
||||
}
|
||||
@@ -177,7 +181,7 @@ TileDefines GetTileCoverIndex( const INT8& bCover )
|
||||
}
|
||||
}
|
||||
|
||||
void AddCoverObjectToWorld( const INT16& sGridNo, const UINT16& usGraphic, const BOOLEAN& fRoof )
|
||||
void AddCoverObjectToWorld( const INT32& sGridNo, const UINT16& usGraphic, const BOOLEAN& fRoof )
|
||||
{
|
||||
LEVELNODE *pNode;
|
||||
|
||||
@@ -201,7 +205,7 @@ void AddCoverObjectToWorld( const INT16& sGridNo, const UINT16& usGraphic, const
|
||||
}
|
||||
}
|
||||
|
||||
void RemoveCoverObjectFromWorld( const INT16 sGridNo, const UINT16& usGraphic, const BOOLEAN& fRoof )
|
||||
void RemoveCoverObjectFromWorld( const INT32 sGridNo, const UINT16& usGraphic, const BOOLEAN& fRoof )
|
||||
{
|
||||
if( fRoof )
|
||||
{
|
||||
@@ -213,9 +217,9 @@ void RemoveCoverObjectFromWorld( const INT16 sGridNo, const UINT16& usGraphic, c
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN HasAdjTile( const UINT8& ubX, const UINT8& ubY, const UINT8& ubZ )
|
||||
BOOLEAN HasAdjTile( const INT32& ubX, const INT32& ubY, const INT32& ubZ )
|
||||
{
|
||||
UINT8 ubTX, ubTY;
|
||||
INT32 ubTX, ubTY;
|
||||
|
||||
for ( ubTX = ubX-1; ubTX <= ubX+1; ++ubTX )
|
||||
{
|
||||
@@ -249,17 +253,16 @@ void AddCoverObjectsToViewArea()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UINT8 ubX, ubY, ubZ;
|
||||
INT32 ubX, ubY, ubZ;
|
||||
BOOLEAN fChanged = FALSE;
|
||||
|
||||
for ( ubX=(UINT8)gsMinCellX; ubX<=gsMaxCellX; ++ubX )
|
||||
for ( ubX=gsMinCellX; ubX<=gsMaxCellX; ++ubX )
|
||||
{
|
||||
for ( ubY=(UINT8)gsMinCellY; ubY<=gsMaxCellY; ++ubY )
|
||||
for ( ubY=gsMinCellY; ubY<=gsMaxCellY; ++ubY )
|
||||
{
|
||||
for ( ubZ=0; ubZ<COVER_Z_CELLS; ++ubZ )
|
||||
{
|
||||
INT16& sGridNo = gCoverViewArea[ ubX ][ ubY ][ ubZ ].sGridNo;
|
||||
INT32& sGridNo = gCoverViewArea[ ubX ][ ubY ][ ubZ ].sGridNo;
|
||||
INT8& bCover = gCoverViewArea[ ubX ][ ubY ][ ubZ ].bCover;
|
||||
BOOLEAN& fInverseColor = gCoverViewArea[ ubX ][ ubY ][ ubZ ].fInverseColor;
|
||||
|
||||
@@ -286,17 +289,16 @@ void RemoveCoverObjectsFromViewArea()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UINT8 ubX, ubY, ubZ;
|
||||
INT32 ubX, ubY, ubZ;
|
||||
BOOLEAN fChanged = FALSE;
|
||||
|
||||
for ( ubX=(UINT8)gsMinCellX; ubX<=gsMaxCellX; ++ubX )
|
||||
for ( ubX=gsMinCellX; ubX<=gsMaxCellX; ++ubX )
|
||||
{
|
||||
for ( ubY=(UINT8)gsMinCellY; ubY<=gsMaxCellY; ++ubY )
|
||||
for ( ubY=gsMinCellY; ubY<=gsMaxCellY; ++ubY )
|
||||
{
|
||||
for ( ubZ=0; ubZ<COVER_Z_CELLS; ++ubZ )
|
||||
{
|
||||
INT16& sGridNo = gCoverViewArea[ ubX ][ ubY ][ ubZ ].sGridNo;
|
||||
INT32& sGridNo = gCoverViewArea[ ubX ][ ubY ][ ubZ ].sGridNo;
|
||||
INT8& bCover = gCoverViewArea[ ubX ][ ubY ][ ubZ ].bCover;
|
||||
BOOLEAN& fInverseColor = gCoverViewArea[ ubX ][ ubY ][ ubZ ].fInverseColor;
|
||||
|
||||
@@ -319,7 +321,7 @@ void RemoveCoverObjectsFromViewArea()
|
||||
}
|
||||
|
||||
// ubRadius in times of y or x cell sizes
|
||||
BOOLEAN GridNoOnScreenAndAround( const INT16& sGridNo, const UINT8& ubRadius )
|
||||
BOOLEAN GridNoOnScreenAndAround( const INT32& sGridNo, const UINT8& ubRadius )
|
||||
{
|
||||
INT16 sNewCenterWorldX, sNewCenterWorldY;
|
||||
INT16 sWorldX;
|
||||
@@ -359,7 +361,7 @@ void DisplayCover( const BOOLEAN& forceUpdate )
|
||||
|
||||
void CalculateCover()
|
||||
{
|
||||
UINT8 ubX, ubY, ubZ;
|
||||
INT32 ubX, ubY, ubZ;
|
||||
SOLDIERTYPE* pSoldier;
|
||||
|
||||
RemoveCoverObjectsFromViewArea();
|
||||
@@ -376,7 +378,7 @@ void CalculateCover()
|
||||
|
||||
GetSoldier( &pSoldier, gusSelectedSoldier );
|
||||
|
||||
const INT16& sSelectedSoldierGridNo = MercPtrs[ gusSelectedSoldier ]->sGridNo;
|
||||
const INT32& sSelectedSoldierGridNo = MercPtrs[ gusSelectedSoldier ]->sGridNo;
|
||||
|
||||
INT16 usTmp;
|
||||
GetScreenXYWorldCell( gsVIEWPORT_START_X, gsVIEWPORT_START_Y, &gsMinCellX, &usTmp );
|
||||
@@ -384,14 +386,13 @@ void CalculateCover()
|
||||
|
||||
GetScreenXYWorldCell( gsVIEWPORT_END_X, gsVIEWPORT_START_Y, &usTmp, &gsMinCellY );
|
||||
GetScreenXYWorldCell( gsVIEWPORT_START_X, gsVIEWPORT_END_Y, &usTmp, &gsMaxCellY );
|
||||
|
||||
for ( ubX=(UINT8)gsMinCellX; ubX<=gsMaxCellX; ++ubX )
|
||||
for ( ubX=gsMinCellX; ubX<=gsMaxCellX; ++ubX )
|
||||
{
|
||||
for ( ubY=(UINT8)gsMinCellY; ubY<=gsMaxCellY; ++ubY )
|
||||
for ( ubY=gsMinCellY; ubY<=gsMaxCellY; ++ubY )
|
||||
{
|
||||
for ( ubZ=0; ubZ<COVER_Z_CELLS; ++ubZ )
|
||||
{
|
||||
INT16& sGridNo = gCoverViewArea[ ubX ][ ubY ][ ubZ ].sGridNo;
|
||||
INT32& sGridNo = gCoverViewArea[ ubX ][ ubY ][ ubZ ].sGridNo;
|
||||
INT8& bCover = gCoverViewArea[ ubX ][ ubY ][ ubZ ].bCover;
|
||||
BOOLEAN& fInverseColor = gCoverViewArea[ ubX ][ ubY ][ ubZ ].fInverseColor;
|
||||
|
||||
@@ -443,7 +444,7 @@ void CalculateCover()
|
||||
AddCoverObjectsToViewArea();
|
||||
}
|
||||
|
||||
void CalculateCoverForSoldier( SOLDIERTYPE* pSoldier, const INT16& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover )
|
||||
void CalculateCoverForSoldier( SOLDIERTYPE* pSoldier, const INT32& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover )
|
||||
{
|
||||
UINT32 uiLoop;
|
||||
SOLDIERTYPE *pOpponent;
|
||||
@@ -489,7 +490,7 @@ void CalculateCoverForSoldier( SOLDIERTYPE* pSoldier, const INT16& sTargetGridNo
|
||||
}
|
||||
}
|
||||
|
||||
void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT16& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover, SOLDIERTYPE* pToSoldier )
|
||||
void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT32& sTargetGridNo, const BOOLEAN& fRoof, INT8& bCover, SOLDIERTYPE* pToSoldier )
|
||||
{
|
||||
UINT16 usSightLimit = pFromSoldier->GetMaxDistanceVisible(sTargetGridNo, (INT8)fRoof, CALC_FROM_WANTED_DIR);
|
||||
|
||||
@@ -497,7 +498,7 @@ void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT16& sTargetG
|
||||
{
|
||||
const UINT8& ubStance = animArr[i];
|
||||
|
||||
UINT16 usAdjustedSight;
|
||||
INT32 usAdjustedSight;
|
||||
|
||||
if (pToSoldier == NULL) {
|
||||
usAdjustedSight = usSightLimit;
|
||||
@@ -513,7 +514,7 @@ void CalculateCoverFromSoldier( SOLDIERTYPE* pFromSoldier, const INT16& sTargetG
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayRangeToTarget( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
|
||||
void DisplayRangeToTarget( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
|
||||
{
|
||||
UINT16 usRange=0;
|
||||
CHAR16 zOutputString[512];
|
||||
@@ -575,7 +576,7 @@ void DisplayRangeToTarget( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
|
||||
//gJa25SaveStruct.uiDisplayGunRangeCounter++;
|
||||
}
|
||||
|
||||
BOOLEAN IsTheRoofVisible( const INT16& sGridNo )
|
||||
BOOLEAN IsTheRoofVisible( const INT32& sGridNo )
|
||||
{
|
||||
if( FlatRoofAboveGridNo( sGridNo ) )
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _DISPLAY_COVER__H_
|
||||
#define _DISPLAY_COVER__H_
|
||||
|
||||
void DisplayRangeToTarget( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo );
|
||||
void DisplayRangeToTarget( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo );
|
||||
void DisplayCover(const BOOLEAN& forceUpdate = FALSE);
|
||||
void SwitchCoverDrawMode();
|
||||
|
||||
|
||||
@@ -49,15 +49,15 @@ class OBJECTTYPE;
|
||||
class SOLDIERTYPE;
|
||||
|
||||
|
||||
INT16 sStatueGridNos[] = { 13829, 13830, 13669, 13670 };
|
||||
INT32 sStatueGridNos[] = { 13829, 13830, 13669, 13670 };
|
||||
|
||||
SOLDIERTYPE *gpKillerSoldier = NULL;
|
||||
INT16 gsGridNo;
|
||||
INT32 gsGridNo;
|
||||
INT8 gbLevel;
|
||||
|
||||
|
||||
// This function checks if our statue exists in the current sector at given gridno
|
||||
BOOLEAN DoesO3SectorStatueExistHere( INT16 sGridNo )
|
||||
BOOLEAN DoesO3SectorStatueExistHere( INT32 sGridNo )
|
||||
{
|
||||
INT32 cnt;
|
||||
EXITGRID ExitGrid;
|
||||
@@ -116,7 +116,7 @@ void ChangeO3SectorStatue( BOOLEAN fFromExplosion )
|
||||
ExitGrid.ubGotoSectorX = 3;
|
||||
ExitGrid.ubGotoSectorY = MAP_ROW_O;
|
||||
ExitGrid.ubGotoSectorZ = 1;
|
||||
ExitGrid.sGridNo = 13037;
|
||||
ExitGrid.usGridNo = 13037;
|
||||
|
||||
AddExitGridToWorld( 13669, &ExitGrid );
|
||||
gpWorldLevelData[ 13669 ].uiFlags |= MAPELEMENT_REVEALED;
|
||||
@@ -143,7 +143,7 @@ void DeidrannaTimerCallback( void )
|
||||
}
|
||||
|
||||
|
||||
void BeginHandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel )
|
||||
void BeginHandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
gpKillerSoldier = pKillerSoldier;
|
||||
gsGridNo = sGridNo;
|
||||
@@ -160,7 +160,7 @@ void BeginHandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8
|
||||
|
||||
}
|
||||
|
||||
void HandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel )
|
||||
void HandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
INT32 cnt;
|
||||
@@ -251,7 +251,7 @@ void DoneFadeOutKilledQueen( void )
|
||||
|
||||
// Set gridno
|
||||
pSoldier->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
|
||||
pSoldier->usStrategicInsertionData = 5687;
|
||||
pSoldier->usStrategicInsertionData = 5687;//dnl!!!
|
||||
// Set direction to face....
|
||||
pSoldier->ubInsertionDirection = 100 + NORTHWEST;
|
||||
}
|
||||
@@ -403,7 +403,7 @@ void QueenBitchTimerCallback( void )
|
||||
}
|
||||
|
||||
|
||||
void BeginHandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel )
|
||||
void BeginHandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
INT32 cnt;
|
||||
@@ -449,7 +449,7 @@ void BeginHandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT
|
||||
|
||||
}
|
||||
|
||||
void HandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel )
|
||||
void HandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
INT32 cnt;
|
||||
|
||||
+5
-5
@@ -2,19 +2,19 @@
|
||||
#define __ENDGAME_H
|
||||
|
||||
|
||||
BOOLEAN DoesO3SectorStatueExistHere( INT16 sGridNo );
|
||||
BOOLEAN DoesO3SectorStatueExistHere( INT32 sGridNo );
|
||||
void ChangeO3SectorStatue( BOOLEAN fFromExplosion );
|
||||
|
||||
void HandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel );
|
||||
void BeginHandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel );
|
||||
void HandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel );
|
||||
void BeginHandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel );
|
||||
|
||||
void HandleDoneLastKilledQueenQuote( );
|
||||
|
||||
void EndQueenDeathEndgameBeginEndCimenatic( );
|
||||
void EndQueenDeathEndgame( );
|
||||
|
||||
void HandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel );
|
||||
void BeginHandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel );
|
||||
void HandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel );
|
||||
void BeginHandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel );
|
||||
|
||||
void HandleDoneLastEndGameQuote( );
|
||||
|
||||
|
||||
@@ -305,11 +305,11 @@ BOOLEAN LoadEnemySoldiersFromTempFile()
|
||||
curr->pBasicPlacement->ubSoldierClass = curr->pDetailedPlacement->ubSoldierClass;
|
||||
curr->pBasicPlacement->ubCivilianGroup = curr->pDetailedPlacement->ubCivilianGroup;
|
||||
curr->pBasicPlacement->fHasKeys = curr->pDetailedPlacement->fHasKeys;
|
||||
curr->pBasicPlacement->sStartingGridNo = curr->pDetailedPlacement->sInsertionGridNo;
|
||||
curr->pBasicPlacement->usStartingGridNo = curr->pDetailedPlacement->sInsertionGridNo;
|
||||
|
||||
curr->pBasicPlacement->bPatrolCnt = curr->pDetailedPlacement->bPatrolCnt;
|
||||
memcpy( curr->pBasicPlacement->sPatrolGrid, curr->pDetailedPlacement->sPatrolGrid,
|
||||
sizeof( INT16 ) * curr->pBasicPlacement->bPatrolCnt );
|
||||
sizeof( INT32 ) * curr->pBasicPlacement->bPatrolCnt );
|
||||
|
||||
if( curr->pBasicPlacement->bTeam == CIV_TEAM )
|
||||
{
|
||||
@@ -907,11 +907,11 @@ BOOLEAN NewWayOfLoadingEnemySoldiersFromTempFile()
|
||||
curr->pBasicPlacement->ubSoldierClass = curr->pDetailedPlacement->ubSoldierClass;
|
||||
curr->pBasicPlacement->ubCivilianGroup = curr->pDetailedPlacement->ubCivilianGroup;
|
||||
curr->pBasicPlacement->fHasKeys = curr->pDetailedPlacement->fHasKeys;
|
||||
curr->pBasicPlacement->sStartingGridNo = curr->pDetailedPlacement->sInsertionGridNo;
|
||||
curr->pBasicPlacement->usStartingGridNo = curr->pDetailedPlacement->sInsertionGridNo;
|
||||
|
||||
curr->pBasicPlacement->bPatrolCnt = curr->pDetailedPlacement->bPatrolCnt;
|
||||
memcpy( curr->pBasicPlacement->sPatrolGrid, curr->pDetailedPlacement->sPatrolGrid,
|
||||
sizeof( INT16 ) * curr->pBasicPlacement->bPatrolCnt );
|
||||
sizeof( INT32 ) * curr->pBasicPlacement->bPatrolCnt );
|
||||
|
||||
|
||||
//Add preserved placements as long as they don't exceed the actual population.
|
||||
@@ -1222,11 +1222,11 @@ BOOLEAN NewWayOfLoadingCiviliansFromTempFile()
|
||||
curr->pBasicPlacement->ubSoldierClass = curr->pDetailedPlacement->ubSoldierClass;
|
||||
curr->pBasicPlacement->ubCivilianGroup = curr->pDetailedPlacement->ubCivilianGroup;
|
||||
curr->pBasicPlacement->fHasKeys = curr->pDetailedPlacement->fHasKeys;
|
||||
curr->pBasicPlacement->sStartingGridNo = curr->pDetailedPlacement->sInsertionGridNo;
|
||||
curr->pBasicPlacement->usStartingGridNo = curr->pDetailedPlacement->sInsertionGridNo;
|
||||
|
||||
curr->pBasicPlacement->bPatrolCnt = curr->pDetailedPlacement->bPatrolCnt;
|
||||
memcpy( curr->pBasicPlacement->sPatrolGrid, curr->pDetailedPlacement->sPatrolGrid,
|
||||
sizeof( INT16 ) * curr->pBasicPlacement->bPatrolCnt );
|
||||
sizeof( INT32 ) * curr->pBasicPlacement->bPatrolCnt );
|
||||
|
||||
|
||||
if( curr->pDetailedPlacement->bLife < curr->pDetailedPlacement->bLifeMax )
|
||||
@@ -1391,7 +1391,7 @@ BOOLEAN NewWayOfSavingEnemyAndCivliansToTempFile( INT16 sSectorX, INT16 sSectorY
|
||||
{
|
||||
//use original position
|
||||
curr->pDetailedPlacement->fOnRoof = curr->pBasicPlacement->fOnRoof;
|
||||
curr->pDetailedPlacement->sInsertionGridNo = curr->pBasicPlacement->sStartingGridNo;
|
||||
curr->pDetailedPlacement->sInsertionGridNo = curr->pBasicPlacement->usStartingGridNo;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1785,7 +1785,7 @@ BOOLEAN CountNumberOfElitesRegularsAdminsAndCreaturesFromEnemySoldiersTempFile(
|
||||
|
||||
curr->pBasicPlacement->bPatrolCnt = curr->pDetailedPlacement->bPatrolCnt;
|
||||
memcpy( curr->pBasicPlacement->sPatrolGrid, curr->pDetailedPlacement->sPatrolGrid,
|
||||
sizeof( INT16 ) * curr->pBasicPlacement->bPatrolCnt );
|
||||
sizeof( INT32 ) * curr->pBasicPlacement->bPatrolCnt );
|
||||
|
||||
|
||||
//Add preserved placements as long as they don't exceed the actual population.
|
||||
|
||||
+2
-3
@@ -1493,7 +1493,6 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
|
||||
case( TRAIN_BY_OTHER ):
|
||||
sPtsAvailable = GetSoldierStudentPts( MercPtrs[ pFace->ubSoldierID ], MercPtrs[ pFace->ubSoldierID ]->bTrainStat, &usMaximumPts );
|
||||
break;
|
||||
// HEADROCK HAM 3.6: New assignment. Works just like Town Training.
|
||||
case( TRAIN_TOWN ):
|
||||
case( TRAIN_MOBILE ):
|
||||
sPtsAvailable = GetTownTrainPtsForCharacter( MercPtrs[ pFace->ubSoldierID ], &usMaximumPts );
|
||||
@@ -1851,8 +1850,8 @@ void HandleAutoFaces( )
|
||||
{
|
||||
pFace->uiFlags &= ( ~FACE_SHOW_WHITE_HILIGHT );
|
||||
}
|
||||
|
||||
if ( pSoldier->sGridNo != pSoldier->pathing.sFinalDestination && pSoldier->sGridNo != NOWHERE )
|
||||
|
||||
if ( pSoldier->sGridNo != pSoldier->pathing.sFinalDestination && !TileIsOutOfBounds(pSoldier->sGridNo))
|
||||
{
|
||||
pFace->uiFlags |= FACE_SHOW_MOVING_HILIGHT;
|
||||
}
|
||||
|
||||
@@ -42,9 +42,9 @@
|
||||
BOOLEAN gfSetPerceivedDoorState = FALSE;
|
||||
|
||||
|
||||
BOOLEAN HandleDoorsOpenClose( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE * pStructure, BOOLEAN fNoAnimations );
|
||||
BOOLEAN HandleDoorsOpenClose( SOLDIERTYPE *pSoldier, INT32 sGridNo, STRUCTURE * pStructure, BOOLEAN fNoAnimations );
|
||||
|
||||
void HandleDoorChangeFromGridNo( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fNoAnimations )
|
||||
void HandleDoorChangeFromGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fNoAnimations )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
DOOR_STATUS * pDoorStatus;
|
||||
@@ -452,7 +452,7 @@ void ProcessImplicationsOfPCMessingWithDoor( SOLDIERTYPE * pSoldier )
|
||||
|
||||
|
||||
|
||||
BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *pStructure )
|
||||
BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT32 sGridNo, STRUCTURE *pStructure )
|
||||
{
|
||||
BOOLEAN fHandleDoor = FALSE;
|
||||
INT16 sAPCost = 0, sBPCost = 0;
|
||||
@@ -944,8 +944,30 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
|
||||
{
|
||||
if ( fDoor )
|
||||
{
|
||||
HandleDoorChangeFromGridNo( pSoldier, sGridNo, FALSE );
|
||||
if(is_client)send_door( pSoldier, sGridNo, FALSE );
|
||||
if (is_networked)
|
||||
{
|
||||
// If we are the server, always handle the doors
|
||||
if (is_server)
|
||||
HandleDoorChangeFromGridNo( pSoldier, sGridNo, FALSE );
|
||||
// if we are the pure client, only handle doors for MERC (and not for enemies)!!
|
||||
// The reason for this is, because the method "receive_door" (client.cpp) handles the "HandleDoorChangeFromGridNo()"
|
||||
else
|
||||
{
|
||||
if (pSoldier->ubID <= 19)
|
||||
HandleDoorChangeFromGridNo( pSoldier, sGridNo, FALSE );
|
||||
}
|
||||
|
||||
// WANNE - MP: The "receive_door" method only gets called for the pure clients and not for the server!
|
||||
// WANNE - MP: General Info!
|
||||
// If pure client calls "send_door" also the method "receive_door" (client.cpp) gets called
|
||||
// If server calls "send_door", the method "receive_door" on the server doest not get called.
|
||||
if(is_client)
|
||||
send_door( pSoldier, sGridNo, FALSE );
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleDoorChangeFromGridNo( pSoldier, sGridNo, FALSE );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -963,7 +985,7 @@ BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *p
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN HandleDoorsOpenClose( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE * pStructure, BOOLEAN fNoAnimations )
|
||||
BOOLEAN HandleDoorsOpenClose( SOLDIERTYPE *pSoldier, INT32 sGridNo, STRUCTURE * pStructure, BOOLEAN fNoAnimations )
|
||||
{
|
||||
LEVELNODE * pShadowNode;
|
||||
LEVELNODE * pNode;
|
||||
@@ -1303,7 +1325,7 @@ BOOLEAN HandleDoorsOpenClose( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *
|
||||
return( fDoAnimation );
|
||||
}
|
||||
|
||||
void SetDoorString( INT16 sGridNo )
|
||||
void SetDoorString( INT32 sGridNo )
|
||||
{
|
||||
DOOR *pDoor;
|
||||
DOOR_STATUS * pDoorStatus;
|
||||
|
||||
@@ -14,15 +14,15 @@
|
||||
extern BOOLEAN gfSetPerceivedDoorState;
|
||||
|
||||
|
||||
BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT16 sGridNo, STRUCTURE *pStructure );
|
||||
BOOLEAN HandleOpenableStruct( SOLDIERTYPE *pSoldier, INT32 sGridNo, STRUCTURE *pStructure );
|
||||
|
||||
void InteractWithOpenableStruct( SOLDIERTYPE *pSoldier, STRUCTURE *pStructure, UINT8 ubDirection, BOOLEAN fDoor );
|
||||
|
||||
void InteractWithClosedDoor( SOLDIERTYPE *pSoldier, UINT8 ubHandleCode );
|
||||
|
||||
void SetDoorString( INT16 sGridNo );
|
||||
void SetDoorString( INT32 sGridNo );
|
||||
|
||||
void HandleDoorChangeFromGridNo( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fNoAnimations );
|
||||
void HandleDoorChangeFromGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fNoAnimations );
|
||||
|
||||
|
||||
|
||||
|
||||
+140
-106
@@ -72,11 +72,11 @@ ITEM_POOL_LOCATOR FlashItemSlots[ NUM_ITEM_FLASH_SLOTS ];
|
||||
UINT32 guiNumFlashItemSlots = 0;
|
||||
|
||||
|
||||
LEVELNODE *AddItemGraphicToWorld( INVTYPE *pItem, INT16 sGridNo, UINT8 ubLevel );
|
||||
LEVELNODE *AddItemGraphicToWorld( INVTYPE *pItem, INT32 sGridNo, UINT8 ubLevel );
|
||||
INT8 GetListMouseHotSpot( INT16 sLargestLineWidth, INT8 bNumItemsListed, INT16 sFontX, INT16 sFontY, INT8 bCurStart );
|
||||
void RemoveItemGraphicFromWorld( INVTYPE *pItem, INT16 sGridNo, UINT8 ubLevel, LEVELNODE *pLevelNode );
|
||||
void RemoveItemGraphicFromWorld( INVTYPE *pItem, INT32 sGridNo, UINT8 ubLevel, LEVELNODE *pLevelNode );
|
||||
|
||||
ITEM_POOL * GetItemPoolForIndex( INT16 sGridNo, INT32 iItemIndex, UINT8 ubLevel );
|
||||
ITEM_POOL * GetItemPoolForIndex( INT32 sGridNo, INT32 iItemIndex, UINT8 ubLevel );
|
||||
|
||||
INT32 GetFreeFlashItemSlot(void);
|
||||
void RecountFlashItemSlots(void);
|
||||
@@ -85,7 +85,7 @@ BOOLEAN RemoveFlashItemSlot( ITEM_POOL *pItemPool );
|
||||
|
||||
// Disgusting hacks: have to keep track of these values for accesses in callbacks
|
||||
static SOLDIERTYPE * gpTempSoldier;
|
||||
static INT16 gsTempGridno;
|
||||
static INT32 gsTempGridNo;
|
||||
static INT8 bTempFrequency;
|
||||
|
||||
void BombMessageBoxCallBack( UINT8 ubExitValue );
|
||||
@@ -100,7 +100,7 @@ void CheckForPickedOwnership( void );
|
||||
void BoobyTrapInMapScreenMessageBoxCallBack( UINT8 ubExitValue );
|
||||
|
||||
|
||||
BOOLEAN ContinuePastBoobyTrap( SOLDIERTYPE * pSoldier, INT16 sGridNo, INT8 bLevel, INT32 iItemIndex, BOOLEAN fInStrategic, BOOLEAN *pfSaidQuote );
|
||||
BOOLEAN ContinuePastBoobyTrap( SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bLevel, INT32 iItemIndex, BOOLEAN fInStrategic, BOOLEAN *pfSaidQuote );
|
||||
extern BOOLEAN ItemIsCool( OBJECTTYPE * pObj );
|
||||
extern INT8 gbItemPointerSrcSlot;
|
||||
extern void MAPEndItemPointer( );
|
||||
@@ -110,16 +110,16 @@ BOOLEAN ItemPoolOKForPickup( SOLDIERTYPE * pSoldier, ITEM_POOL *pItemPool, INT8
|
||||
|
||||
SOLDIERTYPE * gpBoobyTrapSoldier;
|
||||
ITEM_POOL * gpBoobyTrapItemPool;
|
||||
INT16 gsBoobyTrapGridNo;
|
||||
INT32 gsBoobyTrapGridNo;
|
||||
INT8 gbBoobyTrapLevel;
|
||||
BOOLEAN gfDisarmingBuriedBomb;
|
||||
extern BOOLEAN gfDontChargeAPsToPickup;
|
||||
INT8 gbTrapDifficulty;
|
||||
BOOLEAN gfJustFoundBoobyTrap = FALSE;
|
||||
|
||||
void StartBombMessageBox( SOLDIERTYPE * pSoldier, INT16 sGridNo );
|
||||
void StartBombMessageBox( SOLDIERTYPE * pSoldier, INT32 sGridNo );
|
||||
|
||||
BOOLEAN HandleCheckForBadChangeToGetThrough( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pTargetSoldier, INT16 sTargetGridNo , INT8 bLevel )
|
||||
BOOLEAN HandleCheckForBadChangeToGetThrough( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pTargetSoldier, INT32 sTargetGridNo , INT8 bLevel )
|
||||
{
|
||||
BOOLEAN fBadChangeToGetThrough = FALSE;
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("HandleCheckForBadChangeToGetThrough"));
|
||||
@@ -183,15 +183,15 @@ BOOLEAN HandleCheckForBadChangeToGetThrough( SOLDIERTYPE *pSoldier, SOLDIERTYPE
|
||||
|
||||
|
||||
|
||||
INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHandItem, BOOLEAN fFromUI )
|
||||
INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHandItem, BOOLEAN fFromUI )
|
||||
{
|
||||
SOLDIERTYPE *pTargetSoldier = NULL;
|
||||
UINT16 usSoldierIndex;
|
||||
INT16 sTargetGridNo;
|
||||
INT32 sTargetGridNo;
|
||||
INT16 sAPCost;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo;
|
||||
UINT8 ubDirection = 0;
|
||||
INT16 sAdjustedGridNo = 0;
|
||||
INT32 sAdjustedGridNo;
|
||||
BOOLEAN fDropBomb = FALSE;
|
||||
BOOLEAN fAddingTurningCost = FALSE;
|
||||
BOOLEAN fAddingRaiseGunCost = FALSE;
|
||||
@@ -216,7 +216,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
|
||||
if ( fFromUI )
|
||||
{
|
||||
INT16 sInteractiveGridNo;
|
||||
INT32 sInteractiveGridNo;
|
||||
|
||||
// ATE: Check if we are targeting an interactive tile, and adjust gridno accordingly...
|
||||
pIntNode = GetCurInteractiveTileGridNoAndStructure( &sInteractiveGridNo, &pStructure );
|
||||
@@ -653,9 +653,9 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
if ( Item[ usHandItem ].usItemClass == IC_PUNCH )
|
||||
{
|
||||
//INT16 sCnt;
|
||||
INT16 sSpot;
|
||||
INT32 sSpot;
|
||||
UINT8 ubGuyThere;
|
||||
INT16 sGotLocation = NOWHERE;
|
||||
INT32 sGotLocation = NOWHERE;
|
||||
BOOLEAN fGotAdjacent = FALSE;
|
||||
|
||||
for ( INT8 sCnt = 0; sCnt < NUM_WORLD_DIRECTIONS; sCnt++ )
|
||||
@@ -681,8 +681,8 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( sGotLocation == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(sGotLocation))
|
||||
{
|
||||
// See if we can get there to punch
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
@@ -695,8 +695,8 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
}
|
||||
}
|
||||
|
||||
// Did we get a loaction?
|
||||
if ( sGotLocation != NOWHERE )
|
||||
// Did we get a loaction?
|
||||
if (!TileIsOutOfBounds(sGotLocation))
|
||||
{
|
||||
pSoldier->sTargetGridNo = sGridNo;
|
||||
|
||||
@@ -736,16 +736,16 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
if ( Item[ usHandItem ].usItemClass == IC_MEDKIT )
|
||||
{
|
||||
// ATE: AI CANNOT GO THROUGH HERE!
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
BOOLEAN fHadToUseCursorPos = FALSE;
|
||||
|
||||
if (gTacticalStatus.fAutoBandageMode)
|
||||
{
|
||||
sMapPos = sGridNo;
|
||||
usMapPos = sGridNo;
|
||||
}
|
||||
else
|
||||
{
|
||||
GetMouseMapPos( &sMapPos );
|
||||
GetMouseMapPos( &usMapPos );
|
||||
}
|
||||
|
||||
// See if we can get there to stab
|
||||
@@ -753,7 +753,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
if ( sActionGridNo == -1 )
|
||||
{
|
||||
// Try another location...
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, sMapPos, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, usMapPos, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
|
||||
if ( sActionGridNo == -1 )
|
||||
{
|
||||
@@ -783,7 +783,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
|
||||
if ( fHadToUseCursorPos )
|
||||
{
|
||||
pSoldier->aiData.sPendingActionData2 = sMapPos;
|
||||
pSoldier->aiData.sPendingActionData2 = usMapPos;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -875,17 +875,17 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
{
|
||||
UINT8 ubMercID;
|
||||
BOOLEAN fVehicle = FALSE;
|
||||
INT16 sVehicleGridNo=-1;
|
||||
INT32 sVehicleGridNo=-1;
|
||||
|
||||
// For repair, check if we are over a vehicle, then get gridnot to edge of that vehicle!
|
||||
if ( IsRepairableStructAtGridNo( sGridNo, &ubMercID ) == 2 )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
UINT8 ubDirection;
|
||||
|
||||
sNewGridNo = FindGridNoFromSweetSpotWithStructDataFromSoldier( pSoldier, pSoldier->usUIMovementMode, 5, &ubDirection, 0, MercPtrs[ ubMercID ] );
|
||||
|
||||
if ( sNewGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sNewGridNo))
|
||||
{
|
||||
sGridNo = sNewGridNo;
|
||||
|
||||
@@ -953,17 +953,17 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
if ( Item[usHandItem].gascan )
|
||||
{
|
||||
UINT8 ubMercID;
|
||||
INT16 sVehicleGridNo=-1;
|
||||
INT32 sVehicleGridNo=-1;
|
||||
|
||||
// For repair, check if we are over a vehicle, then get gridnot to edge of that vehicle!
|
||||
if ( IsRefuelableStructAtGridNo( sGridNo, &ubMercID ) )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
UINT8 ubDirection;
|
||||
|
||||
sNewGridNo = FindGridNoFromSweetSpotWithStructDataFromSoldier( pSoldier, pSoldier->usUIMovementMode, 5, &ubDirection, 0, MercPtrs[ ubMercID ] );
|
||||
|
||||
if ( sNewGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sNewGridNo))
|
||||
{
|
||||
sGridNo = sNewGridNo;
|
||||
|
||||
@@ -1080,7 +1080,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
LEVELNODE *pIntTile;
|
||||
|
||||
// Get structure info for in tile!
|
||||
pIntTile = GetCurInteractiveTileGridNoAndStructure( (INT16 *)&sGridNo, &pStructure );
|
||||
pIntTile = GetCurInteractiveTileGridNoAndStructure( &sGridNo, &pStructure );
|
||||
|
||||
// We should not have null here if we are given this flag...
|
||||
if ( pIntTile != NULL )
|
||||
@@ -1312,7 +1312,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
// THIS IS IF WE WERE FROM THE UI
|
||||
if ( Item[ usHandItem ].usItemClass == IC_GRENADE || Item[ usHandItem ].usItemClass == IC_LAUNCHER || Item[ usHandItem ].usItemClass == IC_THROWN )
|
||||
{
|
||||
INT16 sCheckGridNo;
|
||||
INT32 sCheckGridNo;
|
||||
|
||||
// Get gridno - either soldier's position or the gridno
|
||||
if ( pTargetSoldier != NULL )
|
||||
@@ -1332,7 +1332,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
ubDirection = (UINT8)GetDirectionFromGridNo( sTargetGridNo, pSoldier );
|
||||
|
||||
// Get new gridno!
|
||||
sCheckGridNo = NewGridNo( (INT16)pSoldier->sGridNo, (UINT16)DirectionInc( ubDirection ) );
|
||||
sCheckGridNo = NewGridNo( pSoldier->sGridNo, (UINT16)DirectionInc( ubDirection ) );
|
||||
|
||||
if ( !OKFallDirection( pSoldier, sCheckGridNo, pSoldier->pathing.bLevel, ubDirection , pSoldier->usAnimState ) )
|
||||
{
|
||||
@@ -1437,7 +1437,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
}
|
||||
|
||||
|
||||
void HandleSoldierDropBomb( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
void HandleSoldierDropBomb( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
// Does this have detonator that needs info?
|
||||
if ( IsDetonatorAttached ( &(pSoldier->inv[ HANDPOS ] ) ) || IsRemoteDetonatorAttached( &(pSoldier->inv[ HANDPOS ] ) ) )
|
||||
@@ -1484,7 +1484,7 @@ void HandleSoldierDropBomb( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
}
|
||||
}
|
||||
|
||||
void HandleSoldierUseRemote( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
void HandleSoldierUseRemote( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
StartBombMessageBox( pSoldier, sGridNo );
|
||||
}
|
||||
@@ -1507,7 +1507,7 @@ void SoldierHandleDropItem( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
void HandleSoldierThrowItem( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
void HandleSoldierThrowItem( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
// Determine what to do
|
||||
UINT8 ubDirection;
|
||||
@@ -1598,7 +1598,7 @@ void HandleSoldierThrowItem( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
|
||||
void SoldierGiveItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pTargetSoldier, OBJECTTYPE *pObject, INT8 bInvPos )
|
||||
{
|
||||
INT16 sActionGridNo, sAdjustedGridNo;
|
||||
INT32 sActionGridNo, sAdjustedGridNo;
|
||||
UINT8 ubDirection;
|
||||
|
||||
// Remove any previous actions
|
||||
@@ -1654,9 +1654,9 @@ BOOLEAN SoldierDropItem( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj )
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
void SoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo, INT8 bZLevel )
|
||||
void SoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel )
|
||||
{
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo;
|
||||
|
||||
// Remove any previous actions
|
||||
pSoldier->aiData.ubPendingAction = NO_PENDING_ACTION;
|
||||
@@ -1697,13 +1697,13 @@ void SoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo,
|
||||
else
|
||||
{
|
||||
// DO ANIMATION OF PICKUP NOW!
|
||||
PickPickupAnimation( pSoldier, pSoldier->aiData.uiPendingActionData1, (INT16)( pSoldier->aiData.uiPendingActionData4 ), pSoldier->aiData.bPendingActionData3 );
|
||||
PickPickupAnimation( pSoldier, pSoldier->aiData.uiPendingActionData1, pSoldier->aiData.uiPendingActionData4, pSoldier->aiData.bPendingActionData3 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void HandleAutoPlaceFail( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo )
|
||||
void HandleAutoPlaceFail( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo )
|
||||
{
|
||||
if (pSoldier->bTeam == gbPlayerNum)
|
||||
{
|
||||
@@ -1726,7 +1726,7 @@ void HandleAutoPlaceFail( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo
|
||||
}
|
||||
}
|
||||
|
||||
void SoldierGetItemFromWorld( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo, INT8 bZLevel, BOOLEAN *pfSelectionList )
|
||||
void SoldierGetItemFromWorld( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel, BOOLEAN *pfSelectionList )
|
||||
{
|
||||
ITEM_POOL * pItemPool;
|
||||
ITEM_POOL * pItemPoolToDelete = NULL;
|
||||
@@ -1948,12 +1948,12 @@ void SoldierGetItemFromWorld( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGr
|
||||
}
|
||||
|
||||
gpTempSoldier = pSoldier;
|
||||
gsTempGridno = sGridNo;
|
||||
gsTempGridNo = sGridNo;
|
||||
SetCustomizableTimerCallbackAndDelay( 1000, CheckForPickedOwnership, TRUE );
|
||||
}
|
||||
|
||||
|
||||
void HandleSoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo, INT8 bZLevel )
|
||||
void HandleSoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
UINT16 usNum;
|
||||
@@ -1973,7 +1973,8 @@ void HandleSoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGr
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gpWorldLevelData[ sGridNo ].uiFlags & MAPELEMENT_PLAYER_MINE_PRESENT)
|
||||
if (gpWorldLevelData[ sGridNo ].uiFlags & MAPELEMENT_PLAYER_MINE_PRESENT ||
|
||||
(is_networked && is_client && FindWorldItemForBombInGridNo( sGridNo, pSoldier->pathing.bLevel ) != -1)) // 20091029 - OJW - Disarm player planted bombs!
|
||||
{
|
||||
// have the computer ask us if we want to proceed
|
||||
|
||||
@@ -2079,7 +2080,7 @@ void HandleSoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGr
|
||||
}
|
||||
|
||||
|
||||
LEVELNODE *AddItemGraphicToWorld( INVTYPE *pItem, INT16 sGridNo, UINT8 ubLevel )
|
||||
LEVELNODE *AddItemGraphicToWorld( INVTYPE *pItem, INT32 sGridNo, UINT8 ubLevel )
|
||||
{
|
||||
UINT16 usTileIndex;
|
||||
LEVELNODE *pNode;
|
||||
@@ -2112,7 +2113,7 @@ LEVELNODE *AddItemGraphicToWorld( INVTYPE *pItem, INT16 sGridNo, UINT8 ubLevel )
|
||||
}
|
||||
|
||||
|
||||
void RemoveItemGraphicFromWorld( INVTYPE *pItem, INT16 sGridNo, UINT8 ubLevel, LEVELNODE *pLevelNode )
|
||||
void RemoveItemGraphicFromWorld( INVTYPE *pItem, INT32 sGridNo, UINT8 ubLevel, LEVELNODE *pLevelNode )
|
||||
{
|
||||
LEVELNODE *pNode;
|
||||
|
||||
@@ -2159,31 +2160,31 @@ void RemoveItemGraphicFromWorld( INVTYPE *pItem, INT16 sGridNo, UINT8 ubLevel, L
|
||||
}
|
||||
|
||||
// INVENTORY POOL STUFF
|
||||
OBJECTTYPE* AddItemToPool( INT16 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID )
|
||||
OBJECTTYPE* AddItemToPool( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID )
|
||||
{
|
||||
return InternalAddItemToPool( &sGridNo, pObject, bVisible, ubLevel, usFlags, bRenderZHeightAboveLevel, soldierID, NULL );
|
||||
}
|
||||
|
||||
OBJECTTYPE * AddItemToPoolAndGetIndex( INT16 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex )
|
||||
OBJECTTYPE * AddItemToPoolAndGetIndex( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex )
|
||||
{
|
||||
return( InternalAddItemToPool( &sGridNo, pObject, bVisible, ubLevel, usFlags, bRenderZHeightAboveLevel, soldierID, piItemIndex ) );
|
||||
}
|
||||
|
||||
OBJECTTYPE* InternalAddItemToPool( INT16 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex )
|
||||
OBJECTTYPE* InternalAddItemToPool( INT32 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
ITEM_POOL *pItemPoolTemp;
|
||||
INT32 iWorldItem = 0;
|
||||
STRUCTURE *pStructure, *pBase;
|
||||
INT16 sDesiredLevel;
|
||||
INT16 sNewGridNo = *psGridNo;
|
||||
INT32 sNewGridNo = *psGridNo;
|
||||
LEVELNODE *pNode;
|
||||
BOOLEAN fForceOnGround = FALSE;
|
||||
BOOLEAN fObjectInOpenable = FALSE;
|
||||
INT8 bTerrainID;
|
||||
|
||||
// ATE: Check if the gridno is OK
|
||||
if ( (*psGridNo) == NOWHERE )
|
||||
// ATE: Check if the gridno is OK
|
||||
if (TileIsOutOfBounds((*psGridNo)))
|
||||
{
|
||||
// Display warning.....
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_BETAVERSION, L"Error: Item %d was given invalid grid location %d for item pool. Please Report.", pObject->usItem, (*psGridNo) );
|
||||
@@ -2464,7 +2465,7 @@ OBJECTTYPE* InternalAddItemToPool( INT16 *psGridNo, OBJECTTYPE *pObject, INT8 bV
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN ItemExistsAtLocation( INT16 sGridNo, INT32 iItemIndex, UINT8 ubLevel )
|
||||
BOOLEAN ItemExistsAtLocation( INT32 sGridNo, INT32 iItemIndex, UINT8 ubLevel )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
ITEM_POOL *pItemPoolTemp;
|
||||
@@ -2488,7 +2489,7 @@ BOOLEAN ItemExistsAtLocation( INT16 sGridNo, INT32 iItemIndex, UINT8 ubLevel )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN ItemTypeExistsAtLocation( INT16 sGridNo, UINT16 usItem, UINT8 ubLevel, INT32 * piItemIndex )
|
||||
BOOLEAN ItemTypeExistsAtLocation( INT32 sGridNo, UINT16 usItem, UINT8 ubLevel, INT32 * piItemIndex )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
ITEM_POOL *pItemPoolTemp;
|
||||
@@ -2516,7 +2517,7 @@ BOOLEAN ItemTypeExistsAtLocation( INT16 sGridNo, UINT16 usItem, UINT8 ubLevel, I
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN MarblesExistAtLocation( INT16 sGridNo, UINT8 ubLevel, INT32 * piItemIndex )
|
||||
BOOLEAN MarblesExistAtLocation( INT32 sGridNo, UINT8 ubLevel, INT32 * piItemIndex )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
ITEM_POOL *pItemPoolTemp;
|
||||
@@ -2545,7 +2546,7 @@ BOOLEAN MarblesExistAtLocation( INT16 sGridNo, UINT8 ubLevel, INT32 * piItemInde
|
||||
}
|
||||
|
||||
|
||||
INT32 GetItemOfClassTypeInPool( INT16 sGridNo, UINT32 uiItemClass, UINT8 ubLevel )
|
||||
INT32 GetItemOfClassTypeInPool( INT32 sGridNo, UINT32 uiItemClass, UINT8 ubLevel )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
ITEM_POOL *pItemPoolTemp;
|
||||
@@ -2569,7 +2570,7 @@ INT32 GetItemOfClassTypeInPool( INT16 sGridNo, UINT32 uiItemClass, UINT8 ubLevel
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
ITEM_POOL * GetItemPoolForIndex( INT16 sGridNo, INT32 iItemIndex, UINT8 ubLevel )
|
||||
ITEM_POOL * GetItemPoolForIndex( INT32 sGridNo, INT32 iItemIndex, UINT8 ubLevel )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
ITEM_POOL *pItemPoolTemp;
|
||||
@@ -2628,7 +2629,7 @@ BOOLEAN DoesItemPoolContainAllHiddenItems( ITEM_POOL *pItemPool )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN LookForHiddenItems( INT16 sGridNo, INT8 ubLevel, BOOLEAN fSetLocator, INT8 bZLevel )
|
||||
BOOLEAN LookForHiddenItems( INT32 sGridNo, INT8 ubLevel, BOOLEAN fSetLocator, INT8 bZLevel )
|
||||
{
|
||||
ITEM_POOL *pItemPool = NULL;
|
||||
ITEM_POOL *pHeadItemPool = NULL;
|
||||
@@ -2662,7 +2663,7 @@ BOOLEAN LookForHiddenItems( INT16 sGridNo, INT8 ubLevel, BOOLEAN fSetLocator, IN
|
||||
}
|
||||
|
||||
|
||||
INT8 GetZLevelOfItemPoolGivenStructure( INT16 sGridNo, UINT8 ubLevel, STRUCTURE *pStructure )
|
||||
INT8 GetZLevelOfItemPoolGivenStructure( INT32 sGridNo, UINT8 ubLevel, STRUCTURE *pStructure )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
|
||||
@@ -2695,7 +2696,7 @@ INT8 GetLargestZLevelOfItemPool( ITEM_POOL *pItemPool )
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
void RemoveItemPool( INT16 sGridNo, UINT8 ubLevel )
|
||||
void RemoveItemPool( INT32 sGridNo, UINT8 ubLevel )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
|
||||
@@ -2706,7 +2707,7 @@ void RemoveItemPool( INT16 sGridNo, UINT8 ubLevel )
|
||||
}
|
||||
}
|
||||
|
||||
void RemoveAllUnburiedItems( INT16 sGridNo, UINT8 ubLevel )
|
||||
void RemoveAllUnburiedItems( INT32 sGridNo, UINT8 ubLevel )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
|
||||
@@ -2729,7 +2730,7 @@ void RemoveAllUnburiedItems( INT16 sGridNo, UINT8 ubLevel )
|
||||
}
|
||||
|
||||
|
||||
void LoopLevelNodeForShowThroughFlag( LEVELNODE *pNode, INT16 sGridNo, UINT8 ubLevel )
|
||||
void LoopLevelNodeForShowThroughFlag( LEVELNODE *pNode, INT32 sGridNo, UINT8 ubLevel )
|
||||
{
|
||||
while ( pNode != NULL )
|
||||
{
|
||||
@@ -2758,7 +2759,7 @@ void LoopLevelNodeForShowThroughFlag( LEVELNODE *pNode, INT16 sGridNo, UINT8 ubL
|
||||
}
|
||||
}
|
||||
|
||||
void HandleItemObscuredFlag( INT16 sGridNo, UINT8 ubLevel )
|
||||
void HandleItemObscuredFlag( INT32 sGridNo, UINT8 ubLevel )
|
||||
{
|
||||
LEVELNODE *pNode;
|
||||
|
||||
@@ -2950,7 +2951,7 @@ void AdjustItemPoolVisibility( ITEM_POOL *pItemPool )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN RemoveItemFromPool( INT16 sGridNo, INT32 iItemIndex, UINT8 ubLevel )
|
||||
BOOLEAN RemoveItemFromPool( INT32 sGridNo, INT32 iItemIndex, UINT8 ubLevel )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
ITEM_POOL *pItemPoolTemp;
|
||||
@@ -3073,7 +3074,7 @@ BOOLEAN RemoveItemFromPool( INT16 sGridNo, INT32 iItemIndex, UINT8 ubLevel )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN MoveItemPools( INT16 sStartPos, INT16 sEndPos, INT8 bStartLevel, INT8 bEndLevel )
|
||||
BOOLEAN MoveItemPools( INT32 sStartPos, INT32 sEndPos, INT8 bStartLevel, INT8 bEndLevel )
|
||||
{
|
||||
// note, only works between locations on the ground
|
||||
ITEM_POOL *pItemPool;
|
||||
@@ -3090,17 +3091,17 @@ BOOLEAN MoveItemPools( INT16 sStartPos, INT16 sEndPos, INT8 bStartLevel, INT8 bE
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
BOOLEAN GetItemPool( INT16 sMapPos, ITEM_POOL **ppItemPool, UINT8 ubLevel )
|
||||
BOOLEAN GetItemPool( INT32 usMapPos, ITEM_POOL **ppItemPool, UINT8 ubLevel )
|
||||
{
|
||||
LEVELNODE *pObject;
|
||||
|
||||
if ( ubLevel == 0 )
|
||||
{
|
||||
pObject = gpWorldLevelData[ sMapPos ].pStructHead;
|
||||
pObject = gpWorldLevelData[ usMapPos ].pStructHead;
|
||||
}
|
||||
else
|
||||
{
|
||||
pObject = gpWorldLevelData[ sMapPos ].pOnRoofHead;
|
||||
pObject = gpWorldLevelData[ usMapPos ].pOnRoofHead;
|
||||
}
|
||||
|
||||
(*ppItemPool) = NULL;
|
||||
@@ -3125,7 +3126,7 @@ BOOLEAN GetItemPool( INT16 sMapPos, ITEM_POOL **ppItemPool, UINT8 ubLevel )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN GetItemPoolFromGround( INT16 sMapPos, ITEM_POOL **ppItemPool )
|
||||
BOOLEAN GetItemPoolFromGround( INT32 sMapPos, ITEM_POOL **ppItemPool )
|
||||
{
|
||||
//if we know the level, we can avoid an if, and this function is called alot
|
||||
LEVELNODE *pObject = gpWorldLevelData[ sMapPos ].pStructHead;
|
||||
@@ -3291,7 +3292,7 @@ BOOLEAN ItemPoolOKForPickup( SOLDIERTYPE * pSoldier, ITEM_POOL *pItemPool, INT8
|
||||
extern void HandleAnyMercInSquadHasCompatibleStuff( UINT8 ubSquad, OBJECTTYPE *pObject, BOOLEAN fReset );
|
||||
|
||||
|
||||
BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT16 sGridNo, UINT8 bCommand, INT8 bZLevel, INT16 sXPos, INT16 sYPos )
|
||||
BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, INT8 bZLevel, INT16 sXPos, INT16 sYPos )
|
||||
{
|
||||
INT16 sY;
|
||||
INVTYPE *pItem;
|
||||
@@ -3895,7 +3896,7 @@ BOOLEAN VerifyGiveItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE **ppTargetSoldier )
|
||||
UINT16 usSoldierIndex;
|
||||
OBJECTTYPE *pObject;
|
||||
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT8 ubDirection;
|
||||
UINT8 ubTargetMercID;
|
||||
|
||||
@@ -3960,7 +3961,7 @@ void SoldierGiveItemFromAnimation( SOLDIERTYPE *pSoldier )
|
||||
INT8 bInvPos;
|
||||
UINT8 ubProfile;
|
||||
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT8 ubDirection;
|
||||
UINT8 ubTargetMercID;
|
||||
UINT16 usItemNum;
|
||||
@@ -4149,14 +4150,14 @@ void SoldierGiveItemFromAnimation( SOLDIERTYPE *pSoldier )
|
||||
|
||||
|
||||
|
||||
INT16 AdjustGridNoForItemPlacement( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
INT32 AdjustGridNoForItemPlacement( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE *pStructure;
|
||||
INT16 sDesiredLevel;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo;
|
||||
BOOLEAN fStructFound = FALSE;
|
||||
UINT8 ubDirection;
|
||||
INT16 sAdjustedGridNo;
|
||||
INT32 sAdjustedGridNo;
|
||||
UINT8 ubTargetID;
|
||||
|
||||
|
||||
@@ -4167,7 +4168,7 @@ INT16 AdjustGridNoForItemPlacement( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
{
|
||||
// Something is here, check obstruction in future
|
||||
sDesiredLevel = pSoldier->pathing.bLevel ? STRUCTURE_ON_ROOF : STRUCTURE_ON_GROUND;
|
||||
pStructure = FindStructure( (INT16)sGridNo, STRUCTURE_BLOCKSMOVES );
|
||||
pStructure = FindStructure( sGridNo, STRUCTURE_BLOCKSMOVES );
|
||||
while( pStructure )
|
||||
{
|
||||
if( !(pStructure->fFlags & STRUCTURE_PASSABLE) && pStructure->sCubeOffset == sDesiredLevel )
|
||||
@@ -4201,12 +4202,12 @@ INT16 AdjustGridNoForItemPlacement( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
void StartBombMessageBox( SOLDIERTYPE * pSoldier, INT16 sGridNo )
|
||||
void StartBombMessageBox( SOLDIERTYPE * pSoldier, INT32 sGridNo )
|
||||
{
|
||||
UINT8 ubRoom;
|
||||
|
||||
gpTempSoldier = pSoldier;
|
||||
gsTempGridno = sGridNo;
|
||||
gsTempGridNo = sGridNo;
|
||||
if (Item[ pSoldier->inv[HANDPOS].usItem].remotetrigger )
|
||||
{
|
||||
DoMessageBox( MSG_BOX_BASIC_SMALL_BUTTONS, TacticalStr[ CHOOSE_BOMB_FREQUENCY_STR ], GAME_SCREEN, ( UINT8 )MSG_BOX_FLAG_FOUR_NUMBERED_BUTTONS, BombMessageBoxCallBack, NULL );
|
||||
@@ -4319,7 +4320,7 @@ void BombMessageBoxCallBack( UINT8 ubExitValue )
|
||||
// so we add 2 to all owner IDs passed through here and subtract 2 later
|
||||
if (gpTempSoldier->inv[HANDPOS].MoveThisObjectTo(gTempObject, 1) == 0) {
|
||||
gTempObject[0]->data.misc.ubBombOwner = gpTempSoldier->ubID + 2;
|
||||
AddItemToPool( gsTempGridno, &gTempObject, 1, gpTempSoldier->pathing.bLevel, WORLD_ITEM_ARMED_BOMB, 0 );
|
||||
AddItemToPool( gsTempGridNo, &gTempObject, 1, gpTempSoldier->pathing.bLevel, WORLD_ITEM_ARMED_BOMB, 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4425,7 +4426,7 @@ void SetOffBoobyTrap( ITEM_POOL * pItemPool )
|
||||
|
||||
}
|
||||
|
||||
BOOLEAN ContinuePastBoobyTrap( SOLDIERTYPE * pSoldier, INT16 sGridNo, INT8 bLevel, INT32 iItemIndex, BOOLEAN fInStrategic, BOOLEAN *pfSaidQuote )
|
||||
BOOLEAN ContinuePastBoobyTrap( SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bLevel, INT32 iItemIndex, BOOLEAN fInStrategic, BOOLEAN *pfSaidQuote )
|
||||
{
|
||||
BOOLEAN fBoobyTrapKnowledge;
|
||||
INT8 bTrapDifficulty, bTrapDetectLevel;
|
||||
@@ -4615,6 +4616,27 @@ void BoobyTrapMessageBoxCallBack( UINT8 ubExitValue )
|
||||
{
|
||||
// switch action item to the real item type
|
||||
CreateItem( gTempObject[0]->data.misc.usBombItem, gTempObject[0]->data.misc.bBombStatus, &gTempObject );
|
||||
|
||||
if (is_networked && is_client)
|
||||
{
|
||||
OBJECTTYPE TempAttachment;
|
||||
// attach whatever trigger the bomb originally had
|
||||
if (gWorldItems[ gpBoobyTrapItemPool->iItemIndex ].object[0]->data.misc.bDetonatorType == BOMB_REMOTE)
|
||||
{
|
||||
// attack a remote deonator, but they will need a trigger to use it :)
|
||||
CreateItem( REMDETONATOR, gTempObject[0]->data.misc.bBombStatus, &TempAttachment );
|
||||
}
|
||||
else
|
||||
{
|
||||
// always just give a timed detonator so they can use it
|
||||
CreateItem( DETONATOR, gTempObject[0]->data.misc.bBombStatus, &TempAttachment );
|
||||
}
|
||||
|
||||
if (ValidAttachment( TempAttachment.usItem , gTempObject.usItem ))
|
||||
{
|
||||
gTempObject.AttachObject(NULL, &TempAttachment, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// remove any blue flag graphic
|
||||
@@ -4629,6 +4651,9 @@ void BoobyTrapMessageBoxCallBack( UINT8 ubExitValue )
|
||||
// place it in the guy's inventory/cursor
|
||||
if ( AutoPlaceObject( gpBoobyTrapSoldier, &gTempObject, TRUE ) )
|
||||
{
|
||||
// OJW - 20091029 - disarm explosives
|
||||
if (is_networked && is_client)
|
||||
send_disarm_explosive( gsBoobyTrapGridNo , gpBoobyTrapItemPool->iItemIndex , gpBoobyTrapSoldier->ubID );
|
||||
// remove it from the ground
|
||||
RemoveItemFromPool( gsBoobyTrapGridNo, gpBoobyTrapItemPool->iItemIndex, gbBoobyTrapLevel );
|
||||
}
|
||||
@@ -4647,6 +4672,11 @@ void BoobyTrapMessageBoxCallBack( UINT8 ubExitValue )
|
||||
// ATE; If we failed to add to inventory, put failed one in our cursor...
|
||||
gfDontChargeAPsToPickup = TRUE;
|
||||
HandleAutoPlaceFail( gpBoobyTrapSoldier, gpBoobyTrapItemPool->iItemIndex, gsBoobyTrapGridNo );
|
||||
|
||||
// OJW - 20091029 - disarm explosives
|
||||
if (is_networked && is_client)
|
||||
send_disarm_explosive( gsBoobyTrapGridNo , gpBoobyTrapItemPool->iItemIndex , gpBoobyTrapSoldier->ubID );
|
||||
|
||||
RemoveItemFromPool( gsBoobyTrapGridNo, gpBoobyTrapItemPool->iItemIndex, gbBoobyTrapLevel );
|
||||
}
|
||||
else
|
||||
@@ -4658,6 +4688,10 @@ void BoobyTrapMessageBoxCallBack( UINT8 ubExitValue )
|
||||
gpItemPointer = new OBJECTTYPE;
|
||||
gTempObject.MoveThisObjectTo(*gpItemPointer,-1,gpBoobyTrapSoldier,NUM_INV_SLOTS,MAX_OBJECTS_PER_SLOT);
|
||||
}
|
||||
// OJW - 20091029 - disarm explosives
|
||||
if (is_networked && is_client)
|
||||
send_disarm_explosive( gsBoobyTrapGridNo , gpBoobyTrapItemPool->iItemIndex , gpBoobyTrapSoldier->ubID );
|
||||
|
||||
// remove it from the ground
|
||||
RemoveItemFromPool( gsBoobyTrapGridNo, gpBoobyTrapItemPool->iItemIndex, gbBoobyTrapLevel );
|
||||
}
|
||||
@@ -4794,9 +4828,9 @@ void SwitchMessageBoxCallBack( UINT8 ubExitValue )
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN NearbyGroundSeemsWrong( SOLDIERTYPE * pSoldier, INT16 sGridNo, BOOLEAN fCheckAroundGridno, INT16 * psProblemGridNo )
|
||||
BOOLEAN NearbyGroundSeemsWrong( SOLDIERTYPE * pSoldier, INT32 sGridNo, BOOLEAN fCheckAroundGridNo, INT32 * psProblemGridNo )
|
||||
{
|
||||
INT16 sNextGridNo;
|
||||
INT32 sNextGridNo;
|
||||
// BOOLEAN fWorthChecking = FALSE, fProblemExists = FALSE, fDetectedProblem = FALSE;
|
||||
UINT8 ubDetectLevel, ubDirection;
|
||||
MAP_ELEMENT * pMapElement;
|
||||
@@ -4851,7 +4885,7 @@ BOOLEAN NearbyGroundSeemsWrong( SOLDIERTYPE * pSoldier, INT16 sGridNo, BOOLEAN f
|
||||
// check every tile around gridno for the presence of "nasty stuff"
|
||||
for (ubDirection = 0; ubDirection < 8; ubDirection++)
|
||||
{
|
||||
if ( fCheckAroundGridno )
|
||||
if ( fCheckAroundGridNo )
|
||||
{
|
||||
// get the gridno of the next spot adjacent to lastGridno in that direction
|
||||
sNextGridNo = NewGridNo( sGridNo, (INT16) DirectionInc( (UINT8) ubDirection ) );
|
||||
@@ -5018,7 +5052,7 @@ void RemoveBlueFlagDialogueCallBack( UINT8 ubExitValue )
|
||||
}
|
||||
}
|
||||
|
||||
void AddBlueFlag( INT16 sGridNo ,INT8 bLevel )
|
||||
void AddBlueFlag( INT32 sGridNo ,INT8 bLevel )
|
||||
{
|
||||
LEVELNODE *pNode;
|
||||
|
||||
@@ -5037,7 +5071,7 @@ void AddBlueFlag( INT16 sGridNo ,INT8 bLevel )
|
||||
SetRenderFlags(RENDER_FLAG_FULL);
|
||||
}
|
||||
|
||||
void RemoveBlueFlag( INT16 sGridNo, INT8 bLevel )
|
||||
void RemoveBlueFlag( INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
ApplyMapChangesToMapTempFile( TRUE );
|
||||
gpWorldLevelData[sGridNo].uiFlags &= ~(MAPELEMENT_PLAYER_MINE_PRESENT);
|
||||
@@ -5114,7 +5148,7 @@ void CheckForPickedOwnership( void )
|
||||
UINT8 ubLoop;
|
||||
|
||||
// LOOP THROUGH LIST TO FIND NODE WE WANT
|
||||
GetItemPool( gsTempGridno, &pItemPool, gpTempSoldier->pathing.bLevel );
|
||||
GetItemPool( gsTempGridNo, &pItemPool, gpTempSoldier->pathing.bLevel );
|
||||
|
||||
while( pItemPool )
|
||||
{
|
||||
@@ -5155,7 +5189,7 @@ void CheckForPickedOwnership( void )
|
||||
|
||||
|
||||
|
||||
void LoopLevelNodeForItemGlowFlag( LEVELNODE *pNode, INT16 sGridNo, UINT8 ubLevel, BOOLEAN fOn )
|
||||
void LoopLevelNodeForItemGlowFlag( LEVELNODE *pNode, INT32 sGridNo, UINT8 ubLevel, BOOLEAN fOn )
|
||||
{
|
||||
while ( pNode != NULL )
|
||||
{
|
||||
@@ -5175,7 +5209,7 @@ void LoopLevelNodeForItemGlowFlag( LEVELNODE *pNode, INT16 sGridNo, UINT8 ubLeve
|
||||
}
|
||||
|
||||
|
||||
void HandleItemGlowFlag( INT16 sGridNo, UINT8 ubLevel, BOOLEAN fOn )
|
||||
void HandleItemGlowFlag( INT32 sGridNo, UINT8 ubLevel, BOOLEAN fOn )
|
||||
{
|
||||
LEVELNODE *pNode;
|
||||
|
||||
@@ -5193,12 +5227,12 @@ void HandleItemGlowFlag( INT16 sGridNo, UINT8 ubLevel, BOOLEAN fOn )
|
||||
|
||||
void ToggleItemGlow( BOOLEAN fOn )
|
||||
{
|
||||
UINT32 cnt;
|
||||
INT32 cnt;
|
||||
|
||||
for ( cnt = 0; cnt < WORLD_MAX; cnt++ )
|
||||
{
|
||||
HandleItemGlowFlag( ( INT16 )cnt, 0, fOn );
|
||||
HandleItemGlowFlag( ( INT16 )cnt, 1, fOn );
|
||||
HandleItemGlowFlag( cnt, 0, fOn );
|
||||
HandleItemGlowFlag( cnt, 1, fOn );
|
||||
}
|
||||
|
||||
if ( !fOn )
|
||||
@@ -5273,12 +5307,12 @@ BOOLEAN ContinuePastBoobyTrapInMapScreen( OBJECTTYPE *pObject, SOLDIERTYPE *pSol
|
||||
// Well, clears all item pools
|
||||
void ClearAllItemPools( )
|
||||
{
|
||||
UINT32 cnt;
|
||||
INT32 cnt;
|
||||
|
||||
for ( cnt = 0; cnt < WORLD_MAX; cnt++ )
|
||||
{
|
||||
RemoveItemPool( (INT16)cnt, 0 );
|
||||
RemoveItemPool( (INT16)cnt, 1 );
|
||||
RemoveItemPool( cnt, 0 );
|
||||
RemoveItemPool( cnt, 1 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5292,14 +5326,14 @@ void RefreshItemPools( WORLDITEM * pItemList, INT32 iNumberOfItems )
|
||||
}
|
||||
|
||||
|
||||
INT16 FindNearestAvailableGridNoForItem( INT16 sSweetGridNo, INT8 ubRadius )
|
||||
INT32 FindNearestAvailableGridNoForItem( INT32 sSweetGridNo, INT8 ubRadius )
|
||||
{
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2, cnt3;
|
||||
INT16 sGridNo;
|
||||
INT32 sTop, sBottom;
|
||||
INT32 sLeft, sRight;
|
||||
INT32 cnt1, cnt2, cnt3;
|
||||
INT32 sGridNo;
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
INT16 sLowestGridNo=0;
|
||||
INT32 sLowestGridNo=0;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
SOLDIERTYPE soldier;
|
||||
@@ -5341,7 +5375,7 @@ INT16 FindNearestAvailableGridNoForItem( INT16 sSweetGridNo, INT8 ubRadius )
|
||||
|
||||
//Now, find out which of these gridnos are reachable
|
||||
//(use the fake soldier and the pathing settings)
|
||||
FindBestPath( &soldier, NOWHERE, 0, WALKING, COPYREACHABLE, 0 );
|
||||
FindBestPath( &soldier, GRIDSIZE, 0, WALKING, COPYREACHABLE, 0 );//dnl ch50 071009
|
||||
|
||||
uiLowestRange = 999999;
|
||||
|
||||
@@ -5550,7 +5584,7 @@ UINT8 StealItems(SOLDIERTYPE* pSoldier,SOLDIERTYPE* pOpponent, UINT8* ubIndexRet
|
||||
* jackaians: function copied from SoldierGetItemFromWorld
|
||||
* check user's choices and try to place them in his slots
|
||||
*/
|
||||
void SoldierStealItemFromSoldier( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent,ITEM_POOL *pItemPool, INT32 iItemIndex, INT16 sGridNo, INT8 bZLevel, BOOLEAN *pfSelectionList )
|
||||
void SoldierStealItemFromSoldier( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent,ITEM_POOL *pItemPool, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel, BOOLEAN *pfSelectionList )
|
||||
{
|
||||
ITEM_POOL *pTempItemPool;
|
||||
INT32 cnt = 0;
|
||||
@@ -5616,6 +5650,6 @@ void SoldierStealItemFromSoldier( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent,
|
||||
pSoldier->DoMercBattleSound( BATTLE_SOUND_GOTIT );
|
||||
}
|
||||
gpTempSoldier = pSoldier;
|
||||
gsTempGridno = sGridNo;
|
||||
gsTempGridNo = sGridNo;
|
||||
SetCustomizableTimerCallbackAndDelay( 1000, CheckForPickedOwnership, TRUE );
|
||||
}
|
||||
|
||||
+33
-31
@@ -58,7 +58,7 @@ typedef struct TAG_ITEM_POOL
|
||||
INT8 bVisible;
|
||||
INT8 bFlashColor;
|
||||
UINT32 uiTimerID;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT8 ubLevel;
|
||||
UINT16 usFlags;
|
||||
INT8 bRenderZHeightAboveLevel;
|
||||
@@ -80,14 +80,14 @@ typedef struct
|
||||
} ITEM_POOL_LOCATOR;
|
||||
|
||||
class SOLDIERTYPE;
|
||||
INT32 HandleItem( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT16 usHandItem, BOOLEAN fFromUI );
|
||||
void SoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo, INT8 bZLevel );
|
||||
void HandleSoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo, INT8 bZLevel );
|
||||
INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHandItem, BOOLEAN fFromUI );
|
||||
void SoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel );
|
||||
void HandleSoldierPickupItem( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel );
|
||||
void HandleFlashingItems( );
|
||||
|
||||
BOOLEAN SoldierDropItem( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj );
|
||||
|
||||
void HandleSoldierThrowItem( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
void HandleSoldierThrowItem( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
BOOLEAN VerifyGiveItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE **ppTargetSoldier );
|
||||
void SoldierGiveItemFromAnimation( SOLDIERTYPE *pSoldier );
|
||||
void SoldierGiveItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pTargetSoldier, OBJECTTYPE *pObject, INT8 bInvPos );
|
||||
@@ -97,19 +97,19 @@ void NotifySoldiersToLookforItems( );
|
||||
void AllSoldiersLookforItems( BOOLEAN RevealRoofsAndItems );
|
||||
|
||||
|
||||
void SoldierGetItemFromWorld( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo, INT8 bZLevel, BOOLEAN *pfSelectionList );
|
||||
void SoldierGetItemFromWorld( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel, BOOLEAN *pfSelectionList );
|
||||
|
||||
OBJECTTYPE* AddItemToPool( INT16 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID = -1 );
|
||||
OBJECTTYPE* AddItemToPoolAndGetIndex( INT16 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex );
|
||||
OBJECTTYPE* InternalAddItemToPool( INT16 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex );
|
||||
OBJECTTYPE* AddItemToPool( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID = -1 );
|
||||
OBJECTTYPE* AddItemToPoolAndGetIndex( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex );
|
||||
OBJECTTYPE* InternalAddItemToPool( INT32 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex );
|
||||
|
||||
INT16 AdjustGridNoForItemPlacement( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
BOOLEAN GetItemPool( INT16 sMapPos, ITEM_POOL **ppItemPool, UINT8 ubLevel );
|
||||
BOOLEAN GetItemPoolFromGround( INT16 sMapPos, ITEM_POOL **ppItemPool );
|
||||
BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT16 sGridNo, UINT8 bCommand, INT8 bZLevel, INT16 sXPos, INT16 sYPos );
|
||||
BOOLEAN RemoveItemFromPool( INT16 sGridNo, INT32 iItemIndex, UINT8 ubLevel );
|
||||
BOOLEAN ItemExistsAtLocation( INT16 sGridNo, INT32 iItemIndex, UINT8 ubLevel );
|
||||
BOOLEAN MoveItemPools( INT16 sStartPos, INT16 sEndPos, INT8 bStartLevel, INT8 bEndLevel );
|
||||
INT32 AdjustGridNoForItemPlacement( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
BOOLEAN GetItemPool( INT32 usMapPos, ITEM_POOL **ppItemPool, UINT8 ubLevel );
|
||||
BOOLEAN GetItemPoolFromGround( INT32 sMapPos, ITEM_POOL **ppItemPool );
|
||||
BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, INT8 bZLevel, INT16 sXPos, INT16 sYPos );
|
||||
BOOLEAN RemoveItemFromPool( INT32 sGridNo, INT32 iItemIndex, UINT8 ubLevel );
|
||||
BOOLEAN ItemExistsAtLocation( INT32 sGridNo, INT32 iItemIndex, UINT8 ubLevel );
|
||||
BOOLEAN MoveItemPools( INT32 sStartPos, INT32 sEndPos, INT8 bStartLevel, INT8 bEndLevel );
|
||||
|
||||
void SetItemPoolLocator( ITEM_POOL *pItemPool );
|
||||
void SetItemPoolLocatorWithCallback( ITEM_POOL *pItemPool, ITEM_POOL_LOCATOR_HOOK Callback );
|
||||
@@ -119,38 +119,38 @@ void AdjustItemPoolVisibility( ITEM_POOL *pItemPool );
|
||||
void SetItemPoolVisibilityHiddenInObject( ITEM_POOL *pItemPool );
|
||||
void SetItemPoolVisibilityHidden( ITEM_POOL *pItemPool );
|
||||
|
||||
INT32 GetItemOfClassTypeInPool( INT16 sGridNo, UINT32 uiItemClass, UINT8 ubLevel );
|
||||
void RemoveItemPool( INT16 sGridNo, UINT8 ubLevel );
|
||||
INT32 GetItemOfClassTypeInPool( INT32 sGridNo, UINT32 uiItemClass, UINT8 ubLevel );
|
||||
void RemoveItemPool( INT32 sGridNo, UINT8 ubLevel );
|
||||
void RenderTopmostFlashingItems( );
|
||||
|
||||
void RemoveAllUnburiedItems( INT16 sGridNo, UINT8 ubLevel );
|
||||
void RemoveAllUnburiedItems( INT32 sGridNo, UINT8 ubLevel );
|
||||
|
||||
|
||||
BOOLEAN DoesItemPoolContainAnyHiddenItems( ITEM_POOL *pItemPool );
|
||||
BOOLEAN DoesItemPoolContainAllHiddenItems( ITEM_POOL *pItemPool );
|
||||
|
||||
|
||||
void HandleSoldierDropBomb( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
void HandleSoldierUseRemote( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
void HandleSoldierDropBomb( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
void HandleSoldierUseRemote( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
|
||||
BOOLEAN ItemPoolOKForDisplay( ITEM_POOL *pItemPool, INT8 bZLevel );
|
||||
INT16 GetNumOkForDisplayItemsInPool( ITEM_POOL *pItemPool, INT8 bZLevel );
|
||||
|
||||
void SoldierHandleDropItem( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN LookForHiddenItems( INT16 sGridNo, INT8 ubLevel, BOOLEAN fSetLocator, INT8 bZLevel );
|
||||
BOOLEAN LookForHiddenItems( INT32 sGridNo, INT8 ubLevel, BOOLEAN fSetLocator, INT8 bZLevel );
|
||||
|
||||
INT8 GetZLevelOfItemPoolGivenStructure( INT16 sGridNo, UINT8 ubLevel, STRUCTURE *pStructure );
|
||||
INT8 GetZLevelOfItemPoolGivenStructure( INT32 sGridNo, UINT8 ubLevel, STRUCTURE *pStructure );
|
||||
|
||||
INT8 GetLargestZLevelOfItemPool( ITEM_POOL *pItemPool );
|
||||
|
||||
BOOLEAN NearbyGroundSeemsWrong( SOLDIERTYPE * pSoldier, INT16 sGridNo, BOOLEAN fCheckAroundGridno, INT16 * psProblemGridNo );
|
||||
BOOLEAN NearbyGroundSeemsWrong( SOLDIERTYPE * pSoldier, INT32 sGridNo, BOOLEAN fCheckAroundGridNo, INT32 * psProblemGridNo );
|
||||
void MineSpottedDialogueCallBack( void );
|
||||
|
||||
extern INT16 gsBoobyTrapGridNo;
|
||||
extern INT32 gsBoobyTrapGridNo;
|
||||
extern SOLDIERTYPE * gpBoobyTrapSoldier;
|
||||
void AddBlueFlag( INT16 sGridNo, INT8 bLevel );
|
||||
void RemoveBlueFlag( INT16 sGridNo, INT8 bLevel );
|
||||
void AddBlueFlag( INT32 sGridNo, INT8 bLevel );
|
||||
void RemoveBlueFlag( INT32 sGridNo, INT8 bLevel );
|
||||
|
||||
// check if item is booby trapped
|
||||
BOOLEAN ContinuePastBoobyTrapInMapScreen( OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier );
|
||||
@@ -162,17 +162,19 @@ void RefreshItemPools( WORLDITEM* pItemList, INT32 iNumberOfItems );
|
||||
|
||||
BOOLEAN HandItemWorks( SOLDIERTYPE *pSoldier, INT8 bSlot );
|
||||
|
||||
BOOLEAN ItemTypeExistsAtLocation( INT16 sGridNo, UINT16 usItem, UINT8 ubLevel, INT32 * piItemIndex );
|
||||
BOOLEAN ItemTypeExistsAtLocation( INT32 sGridNo, UINT16 usItem, UINT8 ubLevel, INT32 * piItemIndex );
|
||||
|
||||
INT16 FindNearestAvailableGridNoForItem( INT16 sSweetGridNo, INT8 ubRadius );
|
||||
INT32 FindNearestAvailableGridNoForItem( INT32 sSweetGridNo, INT8 ubRadius );
|
||||
|
||||
BOOLEAN CanPlayerUseRocketRifle( SOLDIERTYPE *pSoldier, BOOLEAN fDisplay );
|
||||
|
||||
void MakeNPCGrumpyForMinorOffense( SOLDIERTYPE * pSoldier, SOLDIERTYPE *pOffendingSoldier );
|
||||
|
||||
void SoldierStealItemFromSoldier( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent,ITEM_POOL *pItemPool, INT32 iItemIndex, INT16 sGridNo, INT8 bZLevel, BOOLEAN *pfSelectionList );
|
||||
void SoldierStealItemFromSoldier( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent,ITEM_POOL *pItemPool, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel, BOOLEAN *pfSelectionList );
|
||||
UINT8 StealItems(SOLDIERTYPE* pSoldier,SOLDIERTYPE* pOpponent, UINT8* ubIndexRet);
|
||||
|
||||
BOOLEAN MarblesExistAtLocation( INT16 sGridNo, UINT8 ubLevel, INT32 * piItemIndex );
|
||||
BOOLEAN MarblesExistAtLocation( INT32 sGridNo, UINT8 ubLevel, INT32 * piItemIndex );
|
||||
|
||||
extern ITEM_POOL *gpItemPool;//dnl ch26 210909
|
||||
|
||||
#endif
|
||||
@@ -38,7 +38,7 @@ BOOLEAN BeginUIPlan( SOLDIERTYPE *pSoldier )
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
BOOLEAN AddUIPlan( INT16 sGridNo, UINT8 ubPlanID )
|
||||
BOOLEAN AddUIPlan( INT32 sGridNo, UINT8 ubPlanID )
|
||||
{
|
||||
SOLDIERTYPE *pPlanSoldier;
|
||||
INT16 sXPos, sYPos;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
|
||||
BOOLEAN BeginUIPlan( SOLDIERTYPE *pSoldier );
|
||||
BOOLEAN AddUIPlan( INT16 sGridNo, UINT8 ubPlanID );
|
||||
BOOLEAN AddUIPlan( INT32 sGridNo, UINT8 ubPlanID );
|
||||
void EndUIPlan( );
|
||||
BOOLEAN InUIPlanMode( );
|
||||
|
||||
|
||||
+175
-178
File diff suppressed because it is too large
Load Diff
+12
-12
@@ -188,7 +188,7 @@ extern BOOLEAN gfUIDoNotHighlightSelMerc;
|
||||
extern UINT32 guiShowUPDownArrows;
|
||||
extern BOOLEAN gfUIHandleSelection;
|
||||
extern BOOLEAN gfUIHandleSelectionAboveGuy;
|
||||
extern INT16 gsSelectedGridNo;
|
||||
extern INT32 gsSelectedGridNo;
|
||||
extern INT16 gsSelectedGuy;
|
||||
extern BOOLEAN gfUIInDeadlock;
|
||||
extern UINT8 gUIDeadlockedSoldier;
|
||||
@@ -199,17 +199,17 @@ extern BOOLEAN gUIUseReverse;
|
||||
|
||||
|
||||
extern BOOLEAN gfUIHandleShowMoveGrid;
|
||||
extern UINT16 gsUIHandleShowMoveGridLocation;
|
||||
extern INT32 gsUIHandleShowMoveGridLocation;
|
||||
|
||||
extern BOOLEAN gfUIDisplayDamage;
|
||||
extern INT8 gbDamage;
|
||||
extern INT16 gsDamageGridNo;
|
||||
extern INT32 gsDamageGridNo;
|
||||
|
||||
extern BOOLEAN gfFontPopupDo;
|
||||
|
||||
extern BOOLEAN gUITargetReady;
|
||||
extern BOOLEAN gUITargetShotWaiting;
|
||||
extern INT16 gsUITargetShotGridNo;
|
||||
extern INT32 gsUITargetShotGridNo;
|
||||
|
||||
extern CHAR16 gzLocation[ 20 ];
|
||||
extern BOOLEAN gfUIBodyHitLocation;
|
||||
@@ -253,7 +253,7 @@ extern UINT16 gusUIFullTargetID;
|
||||
extern UINT32 guiUIFullTargetFlags;
|
||||
|
||||
extern BOOLEAN gfUIConfirmExitArrows;
|
||||
extern INT16 gsJumpOverGridNo;
|
||||
extern INT32 gsJumpOverGridNo;
|
||||
|
||||
extern UINT32 HandleTacticalUI(void);
|
||||
extern UINT32 UIHandleEndTurn( UI_EVENT *pUIEvent );
|
||||
@@ -273,7 +273,7 @@ extern INT16 guiCreateGuyIndex;
|
||||
extern INT16 guiCreateBadGuyIndex;
|
||||
|
||||
// WANNE: Calculate the APs to turn around
|
||||
INT16 APsToTurnAround(SOLDIERTYPE *pSoldier, INT16 sAdjustedGridNo);
|
||||
INT16 APsToTurnAround(SOLDIERTYPE *pSoldier, INT32 sAdjustedGridNo);
|
||||
|
||||
// FUNCTIONS IN INPUT MODULES
|
||||
void GetKeyboardInput( UINT32 *puiNewEvent );
|
||||
@@ -305,10 +305,10 @@ void ToggleLookCursorMode( UINT32 *puiNewEvent );
|
||||
void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance );
|
||||
void GetCursorMovementFlags( UINT32 *puiCursorFlags );
|
||||
|
||||
BOOLEAN HandleUIMovementCursor( SOLDIERTYPE *pSoldier, UINT32 uiCursorFlags, INT16 sMapPos, UINT32 uiFlags );
|
||||
BOOLEAN HandleUIMovementCursor( SOLDIERTYPE *pSoldier, UINT32 uiCursorFlags, INT32 usMapPos, UINT32 uiFlags );
|
||||
BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN UIOkForItemPickup( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
BOOLEAN UIOkForItemPickup( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
|
||||
BOOLEAN IsValidTalkableNPCFromMouse( UINT8 *pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed );
|
||||
BOOLEAN IsValidTalkableNPC( UINT8 ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed );
|
||||
@@ -324,8 +324,8 @@ UINT32 UIHandleLUIEndLock( UI_EVENT *pUIEvent );
|
||||
|
||||
void BeginDisplayTimedCursor( UINT32 uiCursorID, UINT32 uiDelay );
|
||||
|
||||
void HandleHandCursorClick( INT16 sMapPos, UINT32 *puiNewEvent );
|
||||
INT8 HandleMoveModeInteractiveClick( INT16 sMapPos, UINT32 *puiNewEvent );
|
||||
void HandleHandCursorClick( INT32 usMapPos, UINT32 *puiNewEvent );
|
||||
INT8 HandleMoveModeInteractiveClick( INT32 usMapPos, UINT32 *puiNewEvent );
|
||||
|
||||
BOOLEAN HandleUIReloading( SOLDIERTYPE *pSoldier );
|
||||
|
||||
@@ -344,13 +344,13 @@ BOOLEAN SelectedGuyInBusyAnimation( );
|
||||
void GotoLowerStance( SOLDIERTYPE *pSoldier );
|
||||
void GotoHeigherStance( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN IsValidJumpLocation( SOLDIERTYPE *pSoldier, INT16 sGridNo , BOOLEAN fCheckForPath);
|
||||
BOOLEAN IsValidJumpLocation( SOLDIERTYPE *pSoldier, INT32 sGridNo , BOOLEAN fCheckForPath);
|
||||
|
||||
void PopupAssignmentMenuInTactical( SOLDIERTYPE *pSoldier );
|
||||
void PopupMilitiaControlMenu( SOLDIERTYPE *pSoldier ); //lal
|
||||
|
||||
void PreventFromTheFreezingBug(SOLDIERTYPE* pSoldier);
|
||||
|
||||
void GetGridNoScreenXY( INT16 sGridNo, INT16 *pScreenX, INT16 *pScreenY );
|
||||
void GetGridNoScreenXY( INT32 sGridNo, INT16 *pScreenX, INT16 *pScreenY );
|
||||
|
||||
#endif
|
||||
@@ -60,7 +60,7 @@ SGPRect gOldClippingRect, gOldDirtyClippingRect;
|
||||
UINT32 guiTacticalInterfaceFlags;
|
||||
|
||||
UINT16 gusUICurIntTileEffectIndex;
|
||||
INT16 gsUICurIntTileEffectGridNo;
|
||||
INT32 gsUICurIntTileEffectGridNo;
|
||||
UINT8 gsUICurIntTileOldShade;
|
||||
|
||||
BOOLEAN gfRerenderInterfaceFromHelpText = FALSE;
|
||||
@@ -70,7 +70,7 @@ MOUSE_REGION gLockPanelOverlayRegion;
|
||||
// CHRISL: Change function definition to allow passing of X,Y coords to control placement of TownID string
|
||||
extern void RenderTownIDString( INT16 sX, INT16 sY );
|
||||
extern BOOLEAN gfUIOverItemPool;
|
||||
extern INT16 gfUIOverItemPoolGridNo;
|
||||
extern INT32 gfUIOverItemPoolGridNo;
|
||||
extern BOOLEAN gfInMovementMenu;
|
||||
extern BOOLEAN gfInItemPickupMenu;
|
||||
extern BOOLEAN gfInOpenDoorMenu;
|
||||
@@ -394,8 +394,8 @@ void ResetInterface( )
|
||||
|
||||
// Reset int tile cursor stuff
|
||||
if ( gfUIShowCurIntTile )
|
||||
{
|
||||
if ( gsUICurIntTileEffectGridNo != NOWHERE )
|
||||
{
|
||||
if (!TileIsOutOfBounds(gsUICurIntTileEffectGridNo))
|
||||
{
|
||||
//Find our tile!
|
||||
pNode = gpWorldLevelData[ gsUICurIntTileEffectGridNo].pStructHead;
|
||||
@@ -563,7 +563,7 @@ void RenderTopmostTacticalInterface( )
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
INT16 sX, sY;
|
||||
INT16 sOffsetX, sOffsetY, sTempY_S, sTempX_S;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
ITEM_POOL *pItemPool;
|
||||
|
||||
|
||||
@@ -637,7 +637,7 @@ void RenderTopmostTacticalInterface( )
|
||||
AddVideoObject( &VObjectDesc, &uiBogTarget );
|
||||
}
|
||||
|
||||
if ( GridNoOnScreen( (INT16)MAPROWCOLTOPOS( ( MercPtrs[ cnt ]->sPlannedTargetY/CELL_Y_SIZE), ( MercPtrs[ cnt ]->sPlannedTargetX / CELL_X_SIZE ) ) ) )
|
||||
if ( GridNoOnScreen( MAPROWCOLTOPOS( ( MercPtrs[ cnt ]->sPlannedTargetY/CELL_Y_SIZE), ( MercPtrs[ cnt ]->sPlannedTargetX / CELL_X_SIZE ) ) ) )
|
||||
{
|
||||
// GET SCREEN COORDINATES
|
||||
sOffsetX = (MercPtrs[ cnt ]->sPlannedTargetX - gsRenderCenterX);
|
||||
@@ -711,8 +711,8 @@ void RenderTopmostTacticalInterface( )
|
||||
|
||||
// Use world coordinates!
|
||||
INT16 sMercScreenX, sMercScreenY, sOffsetX, sOffsetY, sDamageX, sDamageY;
|
||||
|
||||
if ( pSoldier->sGridNo != NOWHERE && pSoldier->bVisible != -1 )
|
||||
|
||||
if (!TileIsOutOfBounds(pSoldier->sGridNo) && pSoldier->bVisible != -1 )
|
||||
{
|
||||
GetSoldierScreenPos( pSoldier, &sMercScreenX, &sMercScreenY );
|
||||
GetSoldierAnimOffsets( pSoldier, &sOffsetX, &sOffsetY );
|
||||
@@ -779,7 +779,7 @@ void RenderTopmostTacticalInterface( )
|
||||
}
|
||||
|
||||
// CHECK IF OUR CURSOR IS OVER AN INV POOL
|
||||
if( GetMouseMapPos( &sMapPos) )
|
||||
if( GetMouseMapPos( &usMapPos) )
|
||||
{
|
||||
if ( gfUIOverItemPool )
|
||||
{
|
||||
@@ -789,9 +789,9 @@ void RenderTopmostTacticalInterface( )
|
||||
if ( GetItemPool( gfUIOverItemPoolGridNo, &pItemPool, pSoldier->pathing.bLevel ) )
|
||||
{
|
||||
STRUCTURE *pStructure = NULL;
|
||||
INT16 sIntTileGridNo;
|
||||
INT32 sIntTileGridNo;
|
||||
INT8 bZLevel = 0;
|
||||
INT16 sActionGridNo = sMapPos;
|
||||
INT32 sActionGridNo = usMapPos;
|
||||
|
||||
// Get interactive tile...
|
||||
if ( ConditionalGetCurInteractiveTileGridNoAndStructure( &sIntTileGridNo , &pStructure, FALSE ) )
|
||||
@@ -828,9 +828,9 @@ void RenderTopmostTacticalInterface( )
|
||||
if ( GetItemPool( gfUIOverItemPoolGridNo, &pItemPool, bCheckLevel ) )
|
||||
{
|
||||
STRUCTURE *pStructure = NULL;
|
||||
INT16 sIntTileGridNo;
|
||||
INT32 sIntTileGridNo;
|
||||
INT8 bZLevel = 0;
|
||||
INT16 sActionGridNo = sMapPos;
|
||||
INT32 sActionGridNo = usMapPos;
|
||||
|
||||
// Get interactive tile...
|
||||
if ( ConditionalGetCurInteractiveTileGridNoAndStructure( &sIntTileGridNo , &pStructure, FALSE ) )
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
#define LOOSE_CURSOR_DELAY 300
|
||||
static BOOLEAN gfLooseCursorOn = FALSE;
|
||||
static INT16 gsLooseCursorGridNo = NOWHERE;
|
||||
static INT32 gsLooseCursorGridNo = NOWHERE;
|
||||
static UINT32 guiLooseCursorID = 0;
|
||||
static UINT32 guiLooseCursorTimeOfLastUpdate = 0;
|
||||
|
||||
@@ -217,8 +217,8 @@ UICursor gUICursors[ NUM_UI_CURSORS ] =
|
||||
|
||||
UINT32 guiCurUICursor = NO_UICURSOR;
|
||||
UINT32 guiOldUICursor = NO_UICURSOR;
|
||||
UINT16 gusCurMousePos;
|
||||
UINT16 gusTargetDropPos;
|
||||
UINT32 gusCurMousePos;
|
||||
UINT32 gusTargetDropPos;
|
||||
BOOLEAN gfTargetDropPos = FALSE;
|
||||
|
||||
// LOCAL FUNCTIONS
|
||||
@@ -236,7 +236,7 @@ BOOLEAN SetUICursor( UINT32 uiNewCursor )
|
||||
|
||||
BOOLEAN DrawUICursor( )
|
||||
{
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
static BOOLEAN fHideCursor = FALSE;
|
||||
LEVELNODE *pNode;
|
||||
UINT16 usTileCursor;
|
||||
@@ -263,9 +263,9 @@ BOOLEAN DrawUICursor( )
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
if (GetMouseMapPos( &sMapPos) )
|
||||
if (GetMouseMapPos( &usMapPos) )
|
||||
{
|
||||
gusCurMousePos = sMapPos;
|
||||
gusCurMousePos = usMapPos;
|
||||
|
||||
if ( guiCurUICursor == NO_UICURSOR )
|
||||
{
|
||||
@@ -685,13 +685,9 @@ void EraseSnappingCursor( )
|
||||
RemoveAllObjectsOfTypeRange( gusCurMousePos, FIRSTPOINTERS, LASTPOINTERS );
|
||||
RemoveAllOnRoofsOfTypeRange( gusCurMousePos, FIRSTPOINTERS, LASTPOINTERS );
|
||||
RemoveAllOnRoofsOfTypeRange( gusCurMousePos, MOCKFLOOR, MOCKFLOOR );
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void StartLooseCursor( INT16 sGridNo, UINT32 uiCursorID )
|
||||
void StartLooseCursor( INT32 sGridNo, UINT32 uiCursorID )
|
||||
{
|
||||
gfLooseCursorOn = TRUE;
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@ BOOLEAN DrawUICursor( );
|
||||
BOOLEAN HideUICursor( );
|
||||
|
||||
|
||||
extern UINT16 gusCurMousePos;
|
||||
extern UINT32 gusCurMousePos;
|
||||
|
||||
UINT16 GetSnapCursorIndex( UINT16 usAdditionalData );
|
||||
|
||||
|
||||
@@ -86,8 +86,8 @@ class OBJECTTYPE;
|
||||
class SOLDIERTYPE;
|
||||
|
||||
|
||||
INT16 sBasementEnterGridNos[ ] = { 13362, 13363, 13364, 13365, 13525, 13524 };
|
||||
INT16 sBasementExitGridNos[ ] = { 8047, 8207, 8208, 8048, 7888, 7728, 7727, 7567 };
|
||||
INT32 sBasementEnterGridNos[ ] = { 13362, 13363, 13364, 13365, 13525, 13524 };
|
||||
INT32 sBasementExitGridNos[ ] = { 8047, 8207, 8208, 8048, 7888, 7728, 7727, 7567 };
|
||||
|
||||
extern UINT8 gubWaitingForAllMercsToExitCode;
|
||||
extern BOOLEAN fFoundTixa;
|
||||
@@ -164,7 +164,7 @@ BOOLEAN InternalInitiateConversation( SOLDIERTYPE *pDestSoldier, SOLDIERTYPE *pS
|
||||
|
||||
|
||||
extern void EndGameMessageBoxCallBack( UINT8 ubExitValue );
|
||||
extern INT16 FindNearestOpenableNonDoor( INT16 sStartGridNo );
|
||||
extern INT32 FindNearestOpenableNonDoor( INT32 sStartGridNo );
|
||||
extern void RecalculateOppCntsDueToBecomingNeutral( SOLDIERTYPE * pSoldier );
|
||||
|
||||
UINT8 ubTalkMenuApproachIDs[] =
|
||||
@@ -347,7 +347,7 @@ BOOLEAN InternalInitiateConversation( SOLDIERTYPE *pDestSoldier, SOLDIERTYPE *pS
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN InitTalkingMenu( UINT8 ubCharacterNum, INT16 sGridNo )
|
||||
BOOLEAN InitTalkingMenu( UINT8 ubCharacterNum, INT32 sGridNo )
|
||||
{
|
||||
INT16 sXMapPos, sYMapPos, sScreenX, sScreenY;
|
||||
INT16 sX, sY;
|
||||
@@ -1358,9 +1358,9 @@ BOOLEAN NPCTriggerNPC( UINT8 ubTargetNPC, UINT8 ubTargetRecord, UINT8 ubTargetAp
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN NPCGotoGridNo( UINT8 ubTargetNPC, INT16 sGridNo, UINT8 ubRecordNum )
|
||||
BOOLEAN NPCGotoGridNo( UINT8 ubTargetNPC, INT32 usGridNo, UINT8 ubRecordNum )
|
||||
{
|
||||
CHECKF( SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_GOTO_GRIDNO, ubTargetNPC, sGridNo, ubRecordNum, gTalkPanel.iFaceIndex, DIALOGUE_NPC_UI ) != FALSE );
|
||||
CHECKF( SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_GOTO_GRIDNO, ubTargetNPC, usGridNo, ubRecordNum, gTalkPanel.iFaceIndex, DIALOGUE_NPC_UI ) != FALSE );
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
@@ -1382,7 +1382,7 @@ BOOLEAN NPCClosePanel( )
|
||||
|
||||
BOOLEAN SourceSoldierPointerIsValidAndReachableForGive( SOLDIERTYPE * pGiver )
|
||||
{
|
||||
INT16 sAdjGridNo;
|
||||
INT32 sAdjGridNo;
|
||||
|
||||
if ( !gpSrcSoldier )
|
||||
{
|
||||
@@ -1529,7 +1529,7 @@ void HandleNPCTriggerNPC( UINT8 ubTargetNPC, UINT8 ubTargetRecord, BOOLEAN fShow
|
||||
void HandleNPCTrigger( )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 sPlayerGridNo;
|
||||
INT32 sPlayerGridNo;
|
||||
UINT8 ubPlayerID;
|
||||
|
||||
pSoldier = FindSoldierByProfileID( gubTargetNPC, FALSE );
|
||||
@@ -1570,7 +1570,8 @@ void HandleNPCTrigger( )
|
||||
else
|
||||
{
|
||||
sPlayerGridNo = ClosestPC( pSoldier, NULL );
|
||||
if (sPlayerGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sPlayerGridNo))
|
||||
{
|
||||
ubPlayerID = WhoIsThere2( sPlayerGridNo, 0 );
|
||||
if (ubPlayerID != NOBODY)
|
||||
@@ -1614,7 +1615,7 @@ void HandleWaitTimerForNPCTrigger( )
|
||||
|
||||
|
||||
|
||||
void HandleNPCGotoGridNo( UINT8 ubTargetNPC, INT16 sGridNo, UINT8 ubQuoteNum )
|
||||
void HandleNPCGotoGridNo( UINT8 ubTargetNPC, INT32 usGridNo, UINT8 ubQuoteNum )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
// OK, Move to gridNo!
|
||||
@@ -1647,7 +1648,7 @@ void HandleNPCGotoGridNo( UINT8 ubTargetNPC, INT16 sGridNo, UINT8 ubQuoteNum )
|
||||
pSoldier->aiData.bNextAction = AI_ACTION_WALK;
|
||||
|
||||
// Set dest!
|
||||
pSoldier->aiData.usNextActionData = sGridNo;
|
||||
pSoldier->aiData.usNextActionData = usGridNo;
|
||||
|
||||
// UNless he's has a pending action, delete what he was doing!
|
||||
// Cancel anything he was doing
|
||||
@@ -1662,7 +1663,7 @@ void HandleNPCGotoGridNo( UINT8 ubTargetNPC, INT16 sGridNo, UINT8 ubQuoteNum )
|
||||
pSoldier->ubQuoteActionID = ActionIDForMovementRecord( ubTargetNPC, ubQuoteNum );
|
||||
|
||||
// Set absolute dest
|
||||
pSoldier->sAbsoluteFinalDestination = sGridNo;
|
||||
pSoldier->sAbsoluteFinalDestination = usGridNo;
|
||||
|
||||
// handle this guy's AI right away so that we can get him moving
|
||||
pSoldier->aiData.fAIFlags |= AI_HANDLE_EVERY_FRAME;
|
||||
@@ -1755,7 +1756,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pSoldier, *pSoldier2;
|
||||
INT8 bNumDone = 0;
|
||||
INT16 sGridNo = NOWHERE, sAdjustedGridNo;
|
||||
INT32 sGridNo = NOWHERE, sAdjustedGridNo;
|
||||
INT8 bItemIn;
|
||||
UINT8 ubDesiredMercDir;
|
||||
EXITGRID ExitGrid;
|
||||
@@ -1799,7 +1800,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
ExitGrid.ubGotoSectorX = 10;
|
||||
ExitGrid.ubGotoSectorY = 1;
|
||||
ExitGrid.ubGotoSectorZ = 1;
|
||||
ExitGrid.sGridNo = 12722;
|
||||
ExitGrid.usGridNo = 12722;
|
||||
|
||||
ApplyMapChangesToMapTempFile( TRUE );
|
||||
AddExitGridToWorld( 7887, &ExitGrid );
|
||||
@@ -2243,7 +2244,8 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
if (pSoldier)
|
||||
{
|
||||
sGridNo = ClosestPC( pSoldier, NULL );
|
||||
if (sGridNo != NOWHERE)
|
||||
|
||||
if (!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
// see if we are facing this person
|
||||
ubDesiredMercDir = atan8(CenterX(pSoldier->sGridNo),CenterY(pSoldier->sGridNo),CenterX(sGridNo),CenterY(sGridNo));
|
||||
@@ -2371,7 +2373,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
// add a money item with $10000 to the tile in front of Kyle
|
||||
// and then have him pick it up
|
||||
{
|
||||
INT16 sGridNo = 14952;
|
||||
INT32 sGridNo = 14952;
|
||||
INT32 iWorldItem;
|
||||
|
||||
pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE );
|
||||
@@ -3090,14 +3092,14 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
|
||||
if ( pSoldier )
|
||||
{
|
||||
INT16 sNearestPC;
|
||||
INT32 sNearestPC;
|
||||
UINT8 ubID;
|
||||
INT8 bMoneySlot;
|
||||
INT8 bEmptySlot;
|
||||
|
||||
sNearestPC = ClosestPC( pSoldier, NULL );
|
||||
|
||||
if ( sNearestPC != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sNearestPC))
|
||||
{
|
||||
ubID = WhoIsThere2( sNearestPC, 0 );
|
||||
if (ubID != NOBODY)
|
||||
@@ -3757,7 +3759,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
case NPC_ACTION_INVOKE_CONVERSATION_MODE:
|
||||
if ( !gfInTalkPanel )
|
||||
{
|
||||
INT16 sNearestPC;
|
||||
INT32 sNearestPC;
|
||||
UINT8 ubID;
|
||||
|
||||
pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE );
|
||||
@@ -3765,8 +3767,8 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
{
|
||||
pSoldier2 = NULL;
|
||||
|
||||
sNearestPC = ClosestPC( pSoldier, NULL );
|
||||
if ( sNearestPC != NOWHERE )
|
||||
sNearestPC = ClosestPC( pSoldier, NULL );
|
||||
if (!TileIsOutOfBounds(sNearestPC))
|
||||
{
|
||||
ubID = WhoIsThere2( sNearestPC, 0 );
|
||||
if (ubID != NOBODY)
|
||||
@@ -4210,8 +4212,8 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
pSoldier = FindSoldierByProfileID( BREWSTER, FALSE );
|
||||
if ( pSoldier )
|
||||
{
|
||||
sGridNo = GetGridNoOfCorpseGivenProfileID( WARDEN );
|
||||
if ( sGridNo != NOWHERE && PythSpacesAway( pSoldier->sGridNo, sGridNo ) <= 10 )
|
||||
sGridNo = GetGridNoOfCorpseGivenProfileID( WARDEN );
|
||||
if (!TileIsOutOfBounds(sGridNo) && PythSpacesAway( pSoldier->sGridNo, sGridNo ) <= 10 )
|
||||
{
|
||||
TriggerNPCRecord( BREWSTER, 16 );
|
||||
}
|
||||
@@ -4329,7 +4331,7 @@ UINT32 CalcMedicalCost( UINT8 ubId )
|
||||
{
|
||||
INT32 cnt;
|
||||
UINT32 uiCostSoFar;
|
||||
INT16 sGridNo = 0;
|
||||
INT32 sGridNo = 0;
|
||||
SOLDIERTYPE * pSoldier, *pNPC;
|
||||
|
||||
uiCostSoFar = 0;
|
||||
@@ -4820,18 +4822,18 @@ void DoneFadeInActionLeaveBasement( )
|
||||
BOOLEAN NPCOpenThing( SOLDIERTYPE *pSoldier, BOOLEAN fDoor )
|
||||
{
|
||||
STRUCTURE *pStructure;
|
||||
INT16 sStructGridNo;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sStructGridNo;
|
||||
INT32 sActionGridNo;
|
||||
UINT8 ubDirection;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
DOOR * pDoor;
|
||||
|
||||
// Find closest door and get struct data for it!
|
||||
if ( fDoor )
|
||||
{
|
||||
sStructGridNo = FindClosestDoor( pSoldier );
|
||||
|
||||
if ( sStructGridNo == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(sStructGridNo))
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -4849,8 +4851,8 @@ BOOLEAN NPCOpenThing( SOLDIERTYPE *pSoldier, BOOLEAN fDoor )
|
||||
{
|
||||
sStructGridNo = FindNearestOpenableNonDoor( pSoldier->sGridNo );
|
||||
}
|
||||
|
||||
if ( sStructGridNo == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(sStructGridNo))
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
@@ -2107,9 +2107,9 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
|
||||
// Non-Launcher Guns Only
|
||||
if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_GUN && !Item[ gpItemDescObject->usItem].rocketlauncher )
|
||||
{
|
||||
if ( GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 || GetShotsPerBurst(gpItemDescObject) > 0 )
|
||||
if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 || GetShotsPerBurst(gpItemDescObject)> 0 )
|
||||
{
|
||||
// AUTO/BURST PENALTY TOOLTIP activated
|
||||
// BURST PENALTY
|
||||
MSYS_EnableRegion( &gStatsFasthelpRegions[ 2 ] );
|
||||
|
||||
if ( GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 && GetShotsPerBurst(gpItemDescObject) <= 0 )
|
||||
@@ -2898,9 +2898,9 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
|
||||
// Non-Launcher Guns Only
|
||||
if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_GUN && !Item[ gpItemDescObject->usItem].rocketlauncher )
|
||||
{
|
||||
if ( GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 || GetShotsPerBurst(gpItemDescObject) > 0 )
|
||||
if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 || GetShotsPerBurst(gpItemDescObject)> 0 )
|
||||
{
|
||||
// AUTO/BURST PENALTY TOOLTIP activated
|
||||
// BURST PENALTY
|
||||
MSYS_EnableRegion( &gStatsFasthelpRegions[ 2 ] );
|
||||
|
||||
if ( GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 && GetShotsPerBurst(gpItemDescObject) <= 0 )
|
||||
@@ -5104,7 +5104,7 @@ void DrawAmmoValues( OBJECTTYPE * gpItemDescObject, int shotsLeft )
|
||||
// AMMO NOISE SUPPRESSION
|
||||
// equals
|
||||
SetFontForeground( 6 );
|
||||
//mprintf( gWeaponStats[ 43 ].sX + gsInvDescX, gWeaponStats[ 43 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] );
|
||||
//mprintf( gWeaponStats[ 41 ].sX + gsInvDescX, gWeaponStats[ 41 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] );
|
||||
|
||||
// determine value
|
||||
INT16 iNoiseSuppression = 0;
|
||||
@@ -5988,10 +5988,10 @@ void DrawMiscValues( OBJECTTYPE * gpItemDescObject )
|
||||
// HIDE MUZZLE FLASH
|
||||
// NO DATA SHOWN, icon either appears or does not appear.
|
||||
// HEADROCK HAM 3.5 - Fixed this, because the count needs to be increased to skip a line!
|
||||
if ( Item[ gpItemDescObject->usItem ].hidemuzzleflash > 0 && cnt<=27 )
|
||||
{
|
||||
cnt++;
|
||||
}
|
||||
if ( Item[ gpItemDescObject->usItem ].hidemuzzleflash > 0 && cnt<=27 )
|
||||
{
|
||||
cnt++;
|
||||
}
|
||||
|
||||
// BIPOD
|
||||
if ( Item[ gpItemDescObject->usItem ].bipod != 0 && cnt<=27 )
|
||||
|
||||
@@ -74,6 +74,7 @@
|
||||
#include "los.h"
|
||||
#include "Map Screen Interface Map.h"
|
||||
#include "Interface Enhanced.h"
|
||||
#include "InterfaceItemImages.h"
|
||||
#endif
|
||||
|
||||
//forward declarations of common classes to eliminate includes
|
||||
@@ -2413,7 +2414,8 @@ void INVRenderItem( UINT32 uiBuffer, SOLDIERTYPE * pSoldier, OBJECTTYPE *pObjec
|
||||
{
|
||||
// TAKE A LOOK AT THE VIDEO OBJECT SIZE ( ONE OF TWO SIZES ) AND CENTER!
|
||||
GetVideoObject( &hVObject, GetInterfaceGraphicForItem( pItem ) );
|
||||
pTrav = &(hVObject->pETRLEObject[ pItem->ubGraphicNum ] );
|
||||
UINT16 usGraphicNum = g_bUsePngItemImages ? 0 : pItem->ubGraphicNum;
|
||||
pTrav = &(hVObject->pETRLEObject[ usGraphicNum ] );
|
||||
usHeight = (UINT32)pTrav->usHeight;
|
||||
usWidth = (UINT32)pTrav->usWidth;
|
||||
|
||||
@@ -2425,9 +2427,9 @@ void INVRenderItem( UINT32 uiBuffer, SOLDIERTYPE * pSoldier, OBJECTTYPE *pObjec
|
||||
sCenY = sY + (INT16)( abs( sHeight - (double)usHeight ) / 2 ) - pTrav->sOffsetY;
|
||||
|
||||
// Shadow area
|
||||
if(gGameSettings.fOptions[ TOPTION_SHOW_ITEM_SHADOW ]) BltVideoObjectOutlineShadowFromIndex( uiBuffer, GetInterfaceGraphicForItem( pItem ), pItem->ubGraphicNum, sCenX - 2, sCenY + 2 );
|
||||
if(gGameSettings.fOptions[ TOPTION_SHOW_ITEM_SHADOW ]) BltVideoObjectOutlineShadowFromIndex( uiBuffer, GetInterfaceGraphicForItem( pItem ), usGraphicNum, sCenX - 2, sCenY + 2 );
|
||||
|
||||
BltVideoObjectOutlineFromIndex( uiBuffer, GetInterfaceGraphicForItem( pItem ), pItem->ubGraphicNum, sCenX, sCenY, sOutlineColor, fOutline );
|
||||
BltVideoObjectOutlineFromIndex( uiBuffer, GetInterfaceGraphicForItem( pItem ), usGraphicNum, sCenX, sCenY, sOutlineColor, fOutline );
|
||||
|
||||
|
||||
if ( uiBuffer == FRAME_BUFFER )
|
||||
@@ -3539,7 +3541,7 @@ void ItemDescAmmoCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
if(gpItemPointer->exists() == true)
|
||||
{
|
||||
guiExternVo = GetInterfaceGraphicForItem( &(Item[ gpItemPointer->usItem ]) );
|
||||
gusExternVoSubIndex = Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
gusExternVoSubIndex = g_bUsePngItemImages ? 0 : Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
|
||||
MSYS_ChangeRegionCursor( &gMPanelRegion , EXTERN_CURSOR );
|
||||
MSYS_SetCurrentCursor( EXTERN_CURSOR );
|
||||
@@ -3744,7 +3746,7 @@ void ItemDescAttachmentsCallback( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
// Set mouse
|
||||
guiExternVo = GetInterfaceGraphicForItem( &(Item[ gpItemPointer->usItem ]) );
|
||||
gusExternVoSubIndex = Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
gusExternVoSubIndex = g_bUsePngItemImages ? 0 : Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
|
||||
MSYS_ChangeRegionCursor( &gMPanelRegion , EXTERN_CURSOR );
|
||||
MSYS_SetCurrentCursor( EXTERN_CURSOR );
|
||||
@@ -4241,7 +4243,7 @@ void RenderItemDescriptionBox( )
|
||||
ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpItemDescObject );
|
||||
|
||||
// WANNE: Fixed CTD when trowing an item with open description box
|
||||
if (ubAttackAPs != -1)
|
||||
if (ubAttackAPs != -1 )
|
||||
{
|
||||
if (ubAttackAPs <= EXCEPTIONAL_AP_COST)
|
||||
{
|
||||
@@ -4285,7 +4287,7 @@ void RenderItemDescriptionBox( )
|
||||
else
|
||||
{
|
||||
// WANNE: Close the description box after we threw the item.
|
||||
DeleteItemDescriptionBox();
|
||||
DeleteItemDescriptionBox( );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4925,7 +4927,7 @@ void BeginKeyRingItemPointer( SOLDIERTYPE *pSoldier, UINT8 ubKeyRingPosition )
|
||||
if ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) )
|
||||
{
|
||||
guiExternVo = GetInterfaceGraphicForItem( &(Item[ gpItemPointer->usItem ]) );
|
||||
gusExternVoSubIndex = Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
gusExternVoSubIndex = g_bUsePngItemImages ? 0 : Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
|
||||
fMapInventoryItem=TRUE;
|
||||
MSYS_ChangeRegionCursor( &gMPanelRegion , EXTERN_CURSOR );
|
||||
@@ -4975,7 +4977,7 @@ void DrawItemFreeCursor( )
|
||||
|
||||
// Get usIndex and then graphic for item
|
||||
guiExternVo = GetInterfaceGraphicForItem( &(Item[ gpItemPointer->usItem ]) );
|
||||
gusExternVoSubIndex = Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
gusExternVoSubIndex = g_bUsePngItemImages ? 0 : Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
|
||||
MSYS_ChangeRegionCursor( &gSMPanelRegion , EXTERN_CURSOR );
|
||||
MSYS_SetCurrentCursor( EXTERN_CURSOR );
|
||||
@@ -4987,7 +4989,7 @@ void HideItemTileCursor( )
|
||||
|
||||
}
|
||||
|
||||
BOOLEAN SoldierCanSeeCatchComing( SOLDIERTYPE *pSoldier, INT16 sSrcGridNo )
|
||||
BOOLEAN SoldierCanSeeCatchComing( SOLDIERTYPE *pSoldier, INT32 sSrcGridNo )
|
||||
{
|
||||
return( TRUE );
|
||||
/*-
|
||||
@@ -5030,17 +5032,17 @@ BOOLEAN SoldierCanSeeCatchComing( SOLDIERTYPE *pSoldier, INT16 sSrcGridNo )
|
||||
|
||||
void DrawItemTileCursor( )
|
||||
{
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
UINT16 usIndex;
|
||||
UINT8 ubSoldierID;
|
||||
INT16 sAPCost;
|
||||
BOOLEAN fRecalc;
|
||||
UINT32 uiCursorFlags;
|
||||
INT16 sFinalGridNo;
|
||||
INT32 sFinalGridNo;
|
||||
UINT32 uiCursorId = CURSOR_ITEM_GOOD_THROW;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
BOOLEAN fGiveItem = FALSE;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo;
|
||||
UINT8 ubDirection;
|
||||
static UINT32 uiOldCursorId = 0;
|
||||
static UINT16 usOldMousePos = 0;
|
||||
@@ -5048,15 +5050,15 @@ void DrawItemTileCursor( )
|
||||
INT16 sDist;
|
||||
INT8 bLevel;
|
||||
|
||||
if (GetMouseMapPos( &sMapPos) )
|
||||
if (GetMouseMapPos( &usMapPos) )
|
||||
{
|
||||
if ( gfUIFullTargetFound )
|
||||
{
|
||||
// Force mouse position to guy...
|
||||
sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo;
|
||||
usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo;
|
||||
}
|
||||
|
||||
gusCurMousePos = sMapPos;
|
||||
gusCurMousePos = usMapPos;
|
||||
|
||||
if( gusCurMousePos != usOldMousePos )
|
||||
{
|
||||
@@ -5119,7 +5121,7 @@ void DrawItemTileCursor( )
|
||||
|
||||
if ( !fGiveItem )
|
||||
{
|
||||
if ( UIHandleOnMerc( FALSE ) && sMapPos != gpItemPointerSoldier->sGridNo )
|
||||
if ( UIHandleOnMerc( FALSE ) && usMapPos != gpItemPointerSoldier->sGridNo )
|
||||
{
|
||||
// We are on a guy.. check if they can catch or not....
|
||||
if ( gfUIFullTargetFound )
|
||||
@@ -5241,7 +5243,7 @@ void DrawItemTileCursor( )
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( sMapPos == gpItemPointerSoldier->sGridNo )
|
||||
if ( usMapPos == gpItemPointerSoldier->sGridNo )
|
||||
{
|
||||
EndPhysicsTrajectoryUI( );
|
||||
}
|
||||
@@ -5261,7 +5263,7 @@ void DrawItemTileCursor( )
|
||||
|
||||
gfUIHandlePhysicsTrajectory = TRUE;
|
||||
|
||||
if ( fRecalc && sMapPos != gpItemPointerSoldier->sGridNo )
|
||||
if ( fRecalc && usMapPos != gpItemPointerSoldier->sGridNo )
|
||||
{
|
||||
if ( gfUIMouseOnValidCatcher )
|
||||
{
|
||||
@@ -5290,7 +5292,7 @@ void DrawItemTileCursor( )
|
||||
}
|
||||
|
||||
// Calculate chance to throw here.....
|
||||
if ( !CalculateLaunchItemChanceToGetThrough( gpItemPointerSoldier, gpItemPointer, sMapPos, (INT8)gsInterfaceLevel, (INT16)( ( gsInterfaceLevel * 256 ) + sEndZ ), &sFinalGridNo, FALSE, &bLevel, TRUE ) )
|
||||
if ( !CalculateLaunchItemChanceToGetThrough( gpItemPointerSoldier, gpItemPointer, usMapPos, (INT8)gsInterfaceLevel, (INT16)( ( gsInterfaceLevel * 256 ) + sEndZ ), &sFinalGridNo, FALSE, &bLevel, TRUE ) )
|
||||
{
|
||||
gfBadThrowItemCTGH = TRUE;
|
||||
}
|
||||
@@ -5346,7 +5348,7 @@ BOOLEAN IsValidAmmoToReloadRobot( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
BOOLEAN HandleItemPointerClick( INT32 usMapPos )
|
||||
{
|
||||
// Determine what to do
|
||||
if ( SelectedGuyInBusyAnimation( ) )
|
||||
@@ -5383,13 +5385,13 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
UINT32 uiThrowActionData=0;
|
||||
INT16 sEndZ = 0;
|
||||
BOOLEAN fGiveItem = FALSE;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
INT16 sDist;
|
||||
|
||||
if ( gfUIFullTargetFound )
|
||||
{
|
||||
// Force mouse position to guy...
|
||||
sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo;
|
||||
usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo;
|
||||
|
||||
if ( gAnimControl[ MercPtrs[ gusUIFullTargetID ]->usAnimState ].uiFlags & ANIM_MOVING )
|
||||
{
|
||||
@@ -5447,7 +5449,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
else
|
||||
{
|
||||
// Calculate action point costs!
|
||||
sAPCost = GetAPsToGiveItem( gpItemPointerSoldier, sMapPos );
|
||||
sAPCost = GetAPsToGiveItem( gpItemPointerSoldier, usMapPos );
|
||||
}
|
||||
|
||||
// Place it back in our hands!
|
||||
@@ -5483,9 +5485,9 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
// Check if we can reload robot....
|
||||
if ( IsValidAmmoToReloadRobot( MercPtrs[ ubSoldierID ], &gTempObject ) )
|
||||
{
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo;
|
||||
UINT8 ubDirection;
|
||||
INT16 sAdjustedGridNo;
|
||||
INT32 sAdjustedGridNo;
|
||||
|
||||
// Walk up to him and reload!
|
||||
// See if we can get there to stab
|
||||
@@ -5558,7 +5560,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
{
|
||||
// Check some things here....
|
||||
// 1 ) are we at the exact gridno that we stand on?
|
||||
if ( sMapPos == gpItemPointerSoldier->sGridNo )
|
||||
if ( usMapPos == gpItemPointerSoldier->sGridNo )
|
||||
{
|
||||
// Drop
|
||||
if ( !gfDontChargeAPsToPickup )
|
||||
@@ -5574,7 +5576,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
// Try to drop in an adjacent area....
|
||||
// 1 ) is this not a good OK destination
|
||||
// this will sound strange, but this is OK......
|
||||
if ( !NewOKDestination( gpItemPointerSoldier, sMapPos, FALSE, gpItemPointerSoldier->pathing.bLevel ) || FindBestPath( gpItemPointerSoldier, sMapPos, gpItemPointerSoldier->pathing.bLevel, WALKING, NO_COPYROUTE, 0 ) == 1 )
|
||||
if ( !NewOKDestination( gpItemPointerSoldier, usMapPos, FALSE, gpItemPointerSoldier->pathing.bLevel ) || FindBestPath( gpItemPointerSoldier, usMapPos, gpItemPointerSoldier->pathing.bLevel, WALKING, NO_COPYROUTE, 0 ) == 1 )
|
||||
{
|
||||
// Drop
|
||||
if ( !gfDontChargeAPsToPickup )
|
||||
@@ -5595,10 +5597,10 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
OBJECTTYPE::CopyToOrCreateAt( &gpItemPointerSoldier->pTempObject, gpItemPointer);
|
||||
if (gpItemPointerSoldier->pTempObject != NULL)
|
||||
{
|
||||
gpItemPointerSoldier->aiData.sPendingActionData2 = sMapPos;
|
||||
gpItemPointerSoldier->aiData.sPendingActionData2 = usMapPos;
|
||||
|
||||
// Turn towards.....gridno
|
||||
gpItemPointerSoldier->EVENT_SetSoldierDesiredDirection( (INT8)GetDirectionFromGridNo( sMapPos, gpItemPointerSoldier ) );
|
||||
gpItemPointerSoldier->EVENT_SetSoldierDesiredDirection( (INT8)GetDirectionFromGridNo( usMapPos, gpItemPointerSoldier ) );
|
||||
|
||||
gpItemPointerSoldier->EVENT_InitNewSoldierAnim( DROP_ADJACENT_OBJECT, 0 , FALSE );
|
||||
}
|
||||
@@ -5607,7 +5609,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
case ANIM_CROUCH:
|
||||
case ANIM_PRONE:
|
||||
|
||||
AddItemToPool( sMapPos, gpItemPointer, 1, gpItemPointerSoldier->pathing.bLevel, 0 , -1 );
|
||||
AddItemToPool( usMapPos, gpItemPointer, 1, gpItemPointerSoldier->pathing.bLevel, 0 , -1 );
|
||||
NotifySoldiersToLookforItems( );
|
||||
break;
|
||||
}
|
||||
@@ -5627,7 +5629,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
}
|
||||
else
|
||||
{
|
||||
sGridNo = sMapPos;
|
||||
sGridNo = usMapPos;
|
||||
|
||||
// Kaiden: Vehicle Inventory change - Commented the following If test:
|
||||
//if ( sDist <= PASSING_ITEM_DISTANCE_OKLIFE && gfUIFullTargetFound && MercPtrs[ gusUIFullTargetID ]->bTeam == gbPlayerNum && !AM_AN_EPC( MercPtrs[ gusUIFullTargetID ] ) && !( MercPtrs[ gusUIFullTargetID ]->flags.uiStatusFlags & SOLDIER_VEHICLE ) )
|
||||
@@ -5810,7 +5812,7 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
CalculateLaunchItemParamsForThrow( gpItemPointerSoldier, sGridNo, gpItemPointerSoldier->pathing.bLevel, (INT16)( ( gsInterfaceLevel * 256 ) + sEndZ ), gpItemPointer, 0, ubThrowActionCode, uiThrowActionData );
|
||||
|
||||
// OK, goto throw animation
|
||||
HandleSoldierThrowItem( gpItemPointerSoldier, sMapPos );
|
||||
HandleSoldierThrowItem( gpItemPointerSoldier, usMapPos );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5821,10 +5823,10 @@ BOOLEAN HandleItemPointerClick( INT16 sMapPos )
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
BOOLEAN ItemCursorInLobRange( INT16 sMapPos )
|
||||
BOOLEAN ItemCursorInLobRange( INT32 usMapPos )
|
||||
{
|
||||
// Draw item depending on distance from buddy
|
||||
if ( GetRangeFromGridNoDiff( sMapPos, gpItemPointerSoldier->sGridNo ) > MIN_LOB_RANGE )
|
||||
if ( GetRangeFromGridNoDiff( usMapPos, gpItemPointerSoldier->sGridNo ) > MIN_LOB_RANGE )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -6520,24 +6522,29 @@ void DeleteKeyRingPopup( )
|
||||
|
||||
UINT32 GetInterfaceGraphicForItem( INVTYPE *pItem )
|
||||
{
|
||||
UINT32 id;
|
||||
// CHECK SUBCLASS
|
||||
if ( pItem->ubGraphicType == 0 )
|
||||
{
|
||||
return( guiGUNSM );
|
||||
TRYCATCH_RETHROW( id = g_bUsePngItemImages ? g_oGUNSM.getVObjectForItem(pItem->ubGraphicNum) : guiGUNSM,
|
||||
L"Failed to retrieve gun image" );
|
||||
}
|
||||
else if ( pItem->ubGraphicType == 1 )
|
||||
{
|
||||
return( guiP1ITEMS );
|
||||
TRYCATCH_RETHROW( id = g_bUsePngItemImages ? g_oP1ITEMS.getVObjectForItem(pItem->ubGraphicNum) : guiP1ITEMS,
|
||||
L"Failed to retrieve P1 item image" );
|
||||
}
|
||||
else if ( pItem->ubGraphicType == 2 )
|
||||
{
|
||||
return( guiP2ITEMS );
|
||||
TRYCATCH_RETHROW( id = g_bUsePngItemImages ? g_oP2ITEMS.getVObjectForItem(pItem->ubGraphicNum) : guiP2ITEMS,
|
||||
L"Failed to retrieve P2 item image" );
|
||||
}
|
||||
else
|
||||
{
|
||||
return( guiP3ITEMS );
|
||||
TRYCATCH_RETHROW( id = g_bUsePngItemImages ? g_oP3ITEMS.getVObjectForItem(pItem->ubGraphicNum) : guiP3ITEMS,
|
||||
L"Failed to retrieve P3 item image" );
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
@@ -6793,7 +6800,7 @@ void ItemPopupRegionCallback( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
else
|
||||
{
|
||||
guiExternVo = GetInterfaceGraphicForItem( &(Item[ gpItemPointer->usItem ]) );
|
||||
gusExternVoSubIndex = Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
gusExternVoSubIndex = g_bUsePngItemImages ? 0 : Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
|
||||
MSYS_ChangeRegionCursor( &gMPanelRegion , EXTERN_CURSOR );
|
||||
MSYS_SetCurrentCursor( EXTERN_CURSOR );
|
||||
@@ -6956,7 +6963,7 @@ public:
|
||||
BOOLEAN fDirtyLevel;
|
||||
INT32 iDirtyRect;
|
||||
BOOLEAN fHandled;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
INT8 bZLevel;
|
||||
INT16 sButtomPanelStartY;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
@@ -7020,7 +7027,7 @@ void SetItemPickupMenuDirty( BOOLEAN fDirtyLevel )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN InitializeItemPickupMenu( SOLDIERTYPE *pSoldier, INT16 sGridNo, ITEM_POOL *pItemPool, INT16 sScreenX, INT16 sScreenY, INT8 bZLevel )
|
||||
BOOLEAN InitializeItemPickupMenu( SOLDIERTYPE *pSoldier, INT32 sGridNo, ITEM_POOL *pItemPool, INT16 sScreenX, INT16 sScreenY, INT8 bZLevel )
|
||||
{
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
CHAR8 ubString[48];
|
||||
@@ -7096,8 +7103,8 @@ BOOLEAN InitializeItemPickupMenu( SOLDIERTYPE *pSoldier, INT16 sGridNo, ITEM_POO
|
||||
|
||||
// Get XY
|
||||
{
|
||||
// First get mouse xy screen location
|
||||
if( sGridNo != NOWHERE )
|
||||
// First get mouse xy screen location
|
||||
if(!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
sX = gusMouseXPos;
|
||||
sY = gusMouseYPos;
|
||||
@@ -8242,7 +8249,7 @@ void RemoveMoney()
|
||||
{
|
||||
// Set mouse
|
||||
guiExternVo = GetInterfaceGraphicForItem( &(Item[ gpItemPointer->usItem ]) );
|
||||
gusExternVoSubIndex = Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
gusExternVoSubIndex = g_bUsePngItemImages ? 0 : Item[ gpItemPointer->usItem ].ubGraphicNum;
|
||||
|
||||
MSYS_ChangeRegionCursor( &gMPanelRegion , EXTERN_CURSOR );
|
||||
MSYS_SetCurrentCursor( EXTERN_CURSOR );
|
||||
@@ -8806,7 +8813,7 @@ BOOLEAN InitializeStealItemPickupMenu( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOppo
|
||||
CHAR8 ubString[48];
|
||||
INT16 sCenX, sCenY, sX, sY, sCenterYVal;
|
||||
INT8 bZLevel =pOpponent->pathing.bLevel;
|
||||
INT16 sGridNo =pOpponent->sGridNo;
|
||||
INT32 sGridNo =pOpponent->sGridNo;
|
||||
INT32 cnt;
|
||||
gpOpponent =pOpponent;
|
||||
gfStealing =TRUE;
|
||||
@@ -8862,8 +8869,8 @@ BOOLEAN InitializeStealItemPickupMenu( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOppo
|
||||
|
||||
// Get XY
|
||||
{
|
||||
// First get mouse xy screen location
|
||||
if( sGridNo != NOWHERE )
|
||||
// First get mouse xy screen location
|
||||
if(!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
sX = gusMouseXPos;
|
||||
sY = gusMouseYPos;
|
||||
|
||||
@@ -146,7 +146,7 @@ public:
|
||||
};
|
||||
|
||||
// Itempickup stuff
|
||||
BOOLEAN InitializeItemPickupMenu( SOLDIERTYPE *pSoldier, INT16 sGridNo, ITEM_POOL *pItemPool, INT16 sScreenX, INT16 sScreenY, INT8 bZLevel );
|
||||
BOOLEAN InitializeItemPickupMenu( SOLDIERTYPE *pSoldier, INT32 sGridNo, ITEM_POOL *pItemPool, INT16 sScreenX, INT16 sScreenY, INT8 bZLevel );
|
||||
void RenderItemPickupMenu( );
|
||||
void RemoveItemPickupMenu( );
|
||||
void SetItemPickupMenuDirty( BOOLEAN fDirtyLevel );
|
||||
@@ -251,8 +251,8 @@ void DrawItemFreeCursor( );
|
||||
void DrawItemTileCursor( );
|
||||
void HideItemTileCursor( );
|
||||
void InitItemInterface( );
|
||||
BOOLEAN ItemCursorInLobRange( INT16 sMapPos );
|
||||
BOOLEAN HandleItemPointerClick( INT16 sMapPos );
|
||||
BOOLEAN ItemCursorInLobRange( INT32 usMapPos );
|
||||
BOOLEAN HandleItemPointerClick( INT32 usMapPos );
|
||||
UINT32 GetInterfaceGraphicForItem( INVTYPE *pItem );
|
||||
UINT16 GetTileGraphicForItem( INVTYPE *pItem );
|
||||
BOOLEAN LoadTileGraphicForItem( INVTYPE *pItem, UINT32 *puiVo );
|
||||
|
||||
@@ -594,7 +594,7 @@ INT16 GetUIApsToDisplay( SOLDIERTYPE *pSoldier )
|
||||
void CheckForDisabledForGiveItem( )
|
||||
{
|
||||
INT16 sDist;
|
||||
INT16 sDestGridNo;
|
||||
INT32 sDestGridNo;
|
||||
INT8 bDestLevel;
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
@@ -794,8 +794,8 @@ void UpdateSMPanel( )
|
||||
BOOLEAN fNearLowerLevel;
|
||||
INT8 bDirection;
|
||||
UINT8 ubStanceState;
|
||||
|
||||
if ( gpSMCurrentMerc->sGridNo == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(gpSMCurrentMerc->sGridNo))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -3851,7 +3851,7 @@ void MergeMessageBoxCallBack( UINT8 ubExitValue )
|
||||
void HandleMouseOverSoldierFaceForContMove( SOLDIERTYPE *pSoldier, BOOLEAN fOn )
|
||||
{
|
||||
FACETYPE *pFace;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
|
||||
if ( pSoldier == NULL )
|
||||
{
|
||||
@@ -5296,6 +5296,10 @@ void UpdateTEAMPanel( )
|
||||
{
|
||||
INT32 cnt;
|
||||
|
||||
// WANNE: In editor mode, always disable the Done button, because we dont have any merc!
|
||||
#ifdef JA2EDITOR
|
||||
DisableButton( iTEAMPanelButtons[ TEAM_DONE_BUTTON ] );
|
||||
#else
|
||||
if ( (gTacticalStatus.ubCurrentTeam != gbPlayerNum) || (gTacticalStatus.uiFlags & REALTIME ) || !(gTacticalStatus.uiFlags & INCOMBAT ) )
|
||||
{
|
||||
DisableButton( iTEAMPanelButtons[ TEAM_DONE_BUTTON ] );
|
||||
@@ -5304,6 +5308,12 @@ void UpdateTEAMPanel( )
|
||||
{
|
||||
EnableButton( iTEAMPanelButtons[ TEAM_DONE_BUTTON ] );
|
||||
}
|
||||
#endif
|
||||
|
||||
// WANNE: In editor mode, always disable the strategy map button, because we dont have any merc!
|
||||
#ifdef JA2EDITOR
|
||||
DisableButton( iTEAMPanelButtons[ TEAM_MAP_SCREEN_BUTTON ] );
|
||||
#else
|
||||
|
||||
if ( gTacticalStatus.uiFlags & ENGAGED_IN_CONV )
|
||||
{
|
||||
@@ -5313,6 +5323,7 @@ void UpdateTEAMPanel( )
|
||||
{
|
||||
EnableButton( iTEAMPanelButtons[ TEAM_MAP_SCREEN_BUTTON ] );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if ( gfDisableTacticalPanelButtons )
|
||||
@@ -5341,7 +5352,13 @@ void UpdateTEAMPanel( )
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
// WANNE: In editor mode, always disable the squad button, because we dont have any merc!
|
||||
#ifdef JA2EDITOR
|
||||
DisableButton( iTEAMPanelButtons[ CHANGE_SQUAD_BUTTON ] );
|
||||
#else
|
||||
EnableButton( iTEAMPanelButtons[ CHANGE_SQUAD_BUTTON ] );
|
||||
#endif
|
||||
|
||||
for ( cnt = 0; cnt < NUMBER_OF_SOLDIERS_PER_SQUAD; cnt++ )
|
||||
{
|
||||
|
||||
+16
-39
@@ -56,8 +56,11 @@
|
||||
#include "gamesettings.h"
|
||||
#include "Squads.h"
|
||||
#include "message.h"
|
||||
|
||||
#endif
|
||||
|
||||
#include "InterfaceItemImages.h"
|
||||
|
||||
#include "connect.h"
|
||||
//const UINT32 INTERFACE_START_X = 0;
|
||||
//const UINT32 INTERFACE_START_Y = ( SCREEN_HEIGHT - INTERFACE_HEIGHT );
|
||||
@@ -152,7 +155,6 @@ extern BOOLEAN gfUserTurnRegionActive;
|
||||
extern UINT8 gubSelectSMPanelToMerc;
|
||||
extern BOOLEAN gfIgnoreOnSelectedGuy;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
WALK_IMAGES = 0,
|
||||
@@ -221,10 +223,7 @@ UINT32 guiINTEXT;
|
||||
UINT32 guiCLOSE;
|
||||
UINT32 guiDEAD;
|
||||
UINT32 guiHATCH;
|
||||
UINT32 guiGUNSM;
|
||||
UINT32 guiP1ITEMS;
|
||||
UINT32 guiP2ITEMS;
|
||||
UINT32 guiP3ITEMS;
|
||||
|
||||
UINT32 guiBUTTONBORDER;
|
||||
UINT32 guiSILHOUETTE;
|
||||
UINT32 guiRADIO;
|
||||
@@ -258,7 +257,7 @@ void PopupDoorOpenMenu( BOOLEAN fClosingDoor );
|
||||
BOOLEAN fFirstTimeInGameScreen = TRUE;
|
||||
BOOLEAN fInterfacePanelDirty = DIRTYLEVEL2;
|
||||
INT16 gsInterfaceLevel = I_GROUND_LEVEL;
|
||||
INT16 gsCurrentSoldierGridNo = 0;
|
||||
INT32 gsCurrentSoldierGridNo = 0;
|
||||
INT16 gsCurInterfacePanel = TEAM_PANEL;
|
||||
|
||||
// LOCAL FUCTIONS
|
||||
@@ -361,29 +360,7 @@ BOOLEAN InitializeTacticalInterface( )
|
||||
if( !AddVideoObject( &VObjectDesc, &guiHATCH ) )
|
||||
AssertMsg(0, "Missing INTERFACE\\hatch.sti" );
|
||||
|
||||
// LOAD INTERFACE GUN PICTURES
|
||||
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
||||
FilenameForBPP("INTERFACE\\mdguns.sti", VObjectDesc.ImageFile);
|
||||
if( !AddVideoObject( &VObjectDesc, &guiGUNSM ) )
|
||||
AssertMsg(0, "Missing INTERFACE\\mdguns.sti" );
|
||||
|
||||
// LOAD INTERFACE ITEM PICTURES
|
||||
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
||||
FilenameForBPP("INTERFACE\\mdp1items.sti", VObjectDesc.ImageFile);
|
||||
if( !AddVideoObject( &VObjectDesc, &guiP1ITEMS ) )
|
||||
AssertMsg(0, "Missing INTERFACE\\mdplitems.sti" );
|
||||
|
||||
// LOAD INTERFACE ITEM PICTURES
|
||||
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
||||
FilenameForBPP("INTERFACE\\mdp2items.sti", VObjectDesc.ImageFile);
|
||||
if( !AddVideoObject( &VObjectDesc, &guiP2ITEMS ) )
|
||||
AssertMsg(0, "Missing INTERFACE\\mdp2items.sti" );
|
||||
|
||||
// LOAD INTERFACE ITEM PICTURES
|
||||
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
||||
FilenameForBPP("INTERFACE\\mdp3items.sti", VObjectDesc.ImageFile);
|
||||
if( !AddVideoObject( &VObjectDesc, &guiP3ITEMS ) )
|
||||
AssertMsg(0, "Missing INTERFACE\\mdp3items.sti" );
|
||||
THROWIFFALSE( RegisterItemImages(), L"Registering Item Images failed" );
|
||||
|
||||
// CHRISL:
|
||||
// LOAD INTERFACE POCKET SILHOUETTES
|
||||
@@ -1508,8 +1485,8 @@ void DrawSelectedUIAboveGuy( UINT16 usSoldierID )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( pSoldier->sGridNo == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(pSoldier->sGridNo))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -3651,7 +3628,7 @@ typedef struct
|
||||
{
|
||||
INT8 bHeight;
|
||||
INT8 bPower;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT8 ubLevel;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
BOOLEAN fShowHeight;
|
||||
@@ -3659,7 +3636,7 @@ typedef struct
|
||||
BOOLEAN fActiveHeightBar;
|
||||
BOOLEAN fActivePowerBar;
|
||||
BOOLEAN fAtEndHeight;
|
||||
INT16 sTargetGridNo;
|
||||
INT32 sTargetGridNo;
|
||||
FLOAT dInitialForce;
|
||||
FLOAT dForce;
|
||||
FLOAT dDegrees;
|
||||
@@ -3706,7 +3683,7 @@ void CalculateAimCubeUIPhysics( )
|
||||
}
|
||||
|
||||
|
||||
INT16 GetInAimCubeUIGridNo( )
|
||||
INT32 GetInAimCubeUIGridNo( )
|
||||
{
|
||||
return( gCubeUIData.sGridNo );
|
||||
}
|
||||
@@ -3738,7 +3715,7 @@ BOOLEAN AimCubeUIClick( )
|
||||
}
|
||||
}
|
||||
|
||||
void BeginAimCubeUI( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 ubLevel, UINT8 bStartPower, INT8 bStartHeight )
|
||||
void BeginAimCubeUI( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 ubLevel, UINT8 bStartPower, INT8 bStartHeight )
|
||||
{
|
||||
gfInAimCubeUI = TRUE;
|
||||
|
||||
@@ -3915,11 +3892,11 @@ void GetLaunchItemParamsFromUI( )
|
||||
|
||||
|
||||
static BOOLEAN gfDisplayPhysicsUI = FALSE;
|
||||
static INT16 gsPhysicsImpactPointGridNo;
|
||||
static INT32 gsPhysicsImpactPointGridNo;
|
||||
static INT8 gbPhysicsImpactPointLevel;
|
||||
static BOOLEAN gfBadPhysicsCTGT = FALSE;
|
||||
|
||||
void BeginPhysicsTrajectoryUI( INT16 sGridNo, INT8 bLevel, BOOLEAN fBadCTGT )
|
||||
void BeginPhysicsTrajectoryUI( INT32 sGridNo, INT8 bLevel, BOOLEAN fBadCTGT )
|
||||
{
|
||||
gfDisplayPhysicsUI = TRUE;
|
||||
gsPhysicsImpactPointGridNo = sGridNo;
|
||||
@@ -3996,11 +3973,11 @@ UINT32 CalcUIMessageDuration( STR16 wString )
|
||||
BOOLEAN gfMultipurposeLocatorOn = FALSE;
|
||||
UINT32 guiMultiPurposeLocatorLastUpdate;
|
||||
INT8 gbMultiPurposeLocatorFrame;
|
||||
INT16 gsMultiPurposeLocatorGridNo;
|
||||
INT32 gsMultiPurposeLocatorGridNo;
|
||||
INT8 gbMultiPurposeLocatorLevel;
|
||||
INT8 gbMultiPurposeLocatorCycles;
|
||||
|
||||
void BeginMultiPurposeLocator( INT16 sGridNo, INT8 bLevel, BOOLEAN fSlideTo )
|
||||
void BeginMultiPurposeLocator( INT32 sGridNo, INT8 bLevel, BOOLEAN fSlideTo )
|
||||
{
|
||||
guiMultiPurposeLocatorLastUpdate = 0;
|
||||
gbMultiPurposeLocatorCycles = 0;
|
||||
|
||||
@@ -74,16 +74,12 @@ extern UINT8 gbNewPanel;
|
||||
extern UINT8 gubNewPanelParam;
|
||||
extern INT16 gsCurInterfacePanel;
|
||||
|
||||
|
||||
extern UINT32 guiRENDERBUFFER;
|
||||
extern UINT32 guiCLOSE;
|
||||
extern UINT32 guiDEAD;
|
||||
extern UINT32 guiHATCH;
|
||||
extern UINT32 guiINTEXT;
|
||||
extern UINT32 guiGUNSM;
|
||||
extern UINT32 guiP1ITEMS;
|
||||
extern UINT32 guiP2ITEMS;
|
||||
extern UINT32 guiP3ITEMS;
|
||||
|
||||
extern UINT32 guiSILHOUETTE;
|
||||
extern UINT32 guiCOMPANEL;
|
||||
extern UINT32 guiCOMPANELB;
|
||||
@@ -223,13 +219,13 @@ void ResetAimCubeAI( );
|
||||
void SetupAimCubeAI( );
|
||||
void IncrementAimCubeUI( );
|
||||
void EndAimCubeUI( );
|
||||
void BeginAimCubeUI( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 ubLevel, UINT8 bStartPower, INT8 bStartHeight );
|
||||
void BeginAimCubeUI( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 ubLevel, UINT8 bStartPower, INT8 bStartHeight );
|
||||
BOOLEAN AimCubeUIClick( );
|
||||
|
||||
void ResetPhysicsTrajectoryUI( );
|
||||
void SetupPhysicsTrajectoryUI( );
|
||||
void EndPhysicsTrajectoryUI( );
|
||||
void BeginPhysicsTrajectoryUI( INT16 sGridNo, INT8 bLevel, BOOLEAN fBadCTGT );
|
||||
void BeginPhysicsTrajectoryUI( INT32 sGridNo, INT8 bLevel, BOOLEAN fBadCTGT );
|
||||
|
||||
void InitPlayerUIBar( BOOLEAN fInterrupt );
|
||||
|
||||
@@ -237,7 +233,7 @@ void ToggleTacticalPanels( );
|
||||
|
||||
void DirtyTopMessage( );
|
||||
|
||||
void BeginMultiPurposeLocator( INT16 sGridNo, INT8 bLevel, BOOLEAN fSlideTo );
|
||||
void BeginMultiPurposeLocator( INT32 sGridNo, INT8 bLevel, BOOLEAN fSlideTo );
|
||||
void HandleMultiPurposeLocator( );
|
||||
void RenderTopmostMultiPurposeLocator( );
|
||||
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
#include "InterfaceItemImages.h"
|
||||
|
||||
#include "DEBUG.H"
|
||||
#include "vobject.h"
|
||||
#include "utilities.h"
|
||||
|
||||
#include "VFS/vfs.h"
|
||||
|
||||
extern void WriteMessageToFile( const STR16 pString );
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
bool g_bUsePngItemImages = false;
|
||||
// old item image handles
|
||||
UINT32 guiGUNSM;
|
||||
UINT32 guiP1ITEMS;
|
||||
UINT32 guiP2ITEMS;
|
||||
UINT32 guiP3ITEMS;
|
||||
// new item image handles
|
||||
MDItemVideoObjects g_oGUNSM;
|
||||
MDItemVideoObjects g_oP1ITEMS;
|
||||
MDItemVideoObjects g_oP2ITEMS;
|
||||
MDItemVideoObjects g_oP3ITEMS;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
MDItemVideoObjects::MDItemVideoObjects()
|
||||
{}
|
||||
|
||||
UINT32 MDItemVideoObjects::getVObjectForItem(UINT32 key)
|
||||
{
|
||||
std::map<UINT32,UINT32>::iterator it = m_mapVObjects.find(key);
|
||||
if(it != m_mapVObjects.end())
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
THROWEXCEPTION(BuildString().add(L"Item key [").add(key).add(L"] not registered").get());
|
||||
}
|
||||
|
||||
void MDItemVideoObjects::registerItem(UINT32 key, vfs::Path const& sFileName)
|
||||
{
|
||||
std::map<UINT32,UINT32>::iterator it = m_mapVObjects.find(key);
|
||||
if(it != m_mapVObjects.end())
|
||||
{
|
||||
THROWEXCEPTION(BuildString().add(L"Item image [").add(key).add(L"] already registered").get());
|
||||
}
|
||||
// LOAD INTERFACE GUN PICTURES
|
||||
UINT32 uiVObject;
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
||||
FilenameForBPP(const_cast<STR>(sFileName.to_string().c_str()), VObjectDesc.ImageFile);
|
||||
if(! AddVideoObject( &VObjectDesc, &uiVObject ))
|
||||
{
|
||||
THROWEXCEPTION( BuildString().add(L"Could not add video object for file \"").add(sFileName).get() );
|
||||
}
|
||||
m_mapVObjects.insert(std::make_pair(key,uiVObject));
|
||||
}
|
||||
|
||||
bool MDItemVideoObjects::registerItemsFromFilePattern(vfs::Path const& sFilePattern)
|
||||
{
|
||||
std::wstringstream wss;
|
||||
int item = 0;
|
||||
vfs::CVirtualFileSystem::Iterator it = getVFS()->begin(sFilePattern);
|
||||
if(it.end())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
for(; !it.end(); it.next())
|
||||
{
|
||||
wss.str(it.value()->getName().c_wcs());
|
||||
if( !(wss >> item) )
|
||||
{
|
||||
std::wstring err = BuildString().add(L"Could not extract item number from file \"").add(wss.str()).add(L"\"").get();
|
||||
WriteMessageToFile( const_cast<STR16>(err.c_str()) );
|
||||
continue;
|
||||
}
|
||||
try
|
||||
{
|
||||
this->registerItem(item, it.value()->getPath());
|
||||
}
|
||||
catch(CBasicException& ex)
|
||||
{
|
||||
RETHROWEXCEPTION( BuildString().add(L"Registering item from file \"").add(wss.str()).add(L"\" failed").get().c_str(),
|
||||
&ex );
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void MDItemVideoObjects::unRegisterAllItems()
|
||||
{
|
||||
std::map<UINT32,UINT32>::iterator it = m_mapVObjects.begin();
|
||||
for(; it != m_mapVObjects.end(); ++it)
|
||||
{
|
||||
// later
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
bool RegisterItemImages()
|
||||
{
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
|
||||
//// LOAD INTERFACE GUN PICTURES
|
||||
if(!g_bUsePngItemImages)
|
||||
{
|
||||
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
||||
FilenameForBPP("INTERFACE\\mdguns.sti", VObjectDesc.ImageFile);
|
||||
if( !AddVideoObject( &VObjectDesc, &guiGUNSM ) )
|
||||
AssertMsg(0, "Missing INTERFACE\\mdguns.sti" );
|
||||
}
|
||||
else if(!g_oGUNSM.registerItemsFromFilePattern(L"INTERFACE/mdguns/*.png"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// LOAD INTERFACE ITEM PICTURES
|
||||
if(!g_bUsePngItemImages)
|
||||
{
|
||||
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
||||
FilenameForBPP("INTERFACE\\mdp1items.sti", VObjectDesc.ImageFile);
|
||||
if( !AddVideoObject( &VObjectDesc, &guiP1ITEMS ) )
|
||||
AssertMsg(0, "Missing INTERFACE\\mdplitems.sti" );
|
||||
}
|
||||
else if(!g_oP1ITEMS.registerItemsFromFilePattern(L"INTERFACE/MDP1ITEMS/*.png"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// LOAD INTERFACE ITEM PICTURES
|
||||
if(!g_bUsePngItemImages)
|
||||
{
|
||||
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
||||
FilenameForBPP("INTERFACE\\mdp2items.sti", VObjectDesc.ImageFile);
|
||||
if( !AddVideoObject( &VObjectDesc, &guiP2ITEMS ) )
|
||||
AssertMsg(0, "Missing INTERFACE\\mdp2items.sti" );
|
||||
}
|
||||
else if(!g_oP2ITEMS.registerItemsFromFilePattern(L"INTERFACE/MDP2ITEMS/*.png"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// LOAD INTERFACE ITEM PICTURES
|
||||
if(!g_bUsePngItemImages)
|
||||
{
|
||||
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
||||
FilenameForBPP("INTERFACE\\mdp3items.sti", VObjectDesc.ImageFile);
|
||||
if( !AddVideoObject( &VObjectDesc, &guiP3ITEMS ) )
|
||||
AssertMsg(0, "Missing INTERFACE\\mdp3items.sti" );
|
||||
}
|
||||
else if(!g_oP3ITEMS.registerItemsFromFilePattern(L"INTERFACE/MDP3ITEMS/*.png"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
#ifndef _ITERFACEITEMIMAGES_H_
|
||||
#define _ITERFACEITEMIMAGES_H_
|
||||
|
||||
#include "Types.h"
|
||||
#include "VFS/vfs_types.h"
|
||||
#include "VFS/vfs_path.h"
|
||||
#include <map>
|
||||
|
||||
class MDItemVideoObjects
|
||||
{
|
||||
public:
|
||||
MDItemVideoObjects();
|
||||
|
||||
UINT32 getVObjectForItem(UINT32 key);
|
||||
void registerItem(UINT32 key, vfs::Path const& sFileName);
|
||||
bool registerItemsFromFilePattern(vfs::Path const& sFilePattern);
|
||||
void unRegisterAllItems();
|
||||
private:
|
||||
std::map<UINT32,UINT32> m_mapVObjects;
|
||||
};
|
||||
|
||||
|
||||
extern bool g_bUsePngItemImages;
|
||||
// old item image handles
|
||||
extern UINT32 guiGUNSM;
|
||||
extern UINT32 guiP1ITEMS;
|
||||
extern UINT32 guiP2ITEMS;
|
||||
extern UINT32 guiP3ITEMS;
|
||||
// new item image handles
|
||||
extern MDItemVideoObjects g_oGUNSM;
|
||||
extern MDItemVideoObjects g_oP1ITEMS;
|
||||
extern MDItemVideoObjects g_oP2ITEMS;
|
||||
extern MDItemVideoObjects g_oP3ITEMS;
|
||||
|
||||
bool RegisterItemImages();
|
||||
|
||||
#endif // _ITERFACEITEMIMAGES_H_
|
||||
@@ -2070,11 +2070,14 @@ void ChooseLocationSpecificGearForSoldierCreateStruct( SOLDIERCREATE_STRUCT *pp
|
||||
// but somewhere on their person, not in their face positions
|
||||
if ( gWorldSectorX == TIXA_SECTOR_X && gWorldSectorY == TIXA_SECTOR_Y && StrategicMap[ TIXA_SECTOR_X + TIXA_SECTOR_Y * MAP_WORLD_X ].fEnemyControlled )
|
||||
{
|
||||
//dnl ch40 041009
|
||||
usItem = PickARandomItem(GASMASKS);
|
||||
if ( usItem > 0 )
|
||||
if(Random(100) > 80)
|
||||
usItem = NOTHING;
|
||||
if(usItem > 0)
|
||||
{
|
||||
CreateItem( usItem, (INT8) (95+Random(6)), &gTempObject );
|
||||
PlaceObjectInSoldierCreateStruct( pp, &gTempObject );
|
||||
CreateItem(usItem, (INT8)(90+Random(10)), &gTempObject);
|
||||
PlaceObjectInSoldierCreateStruct(pp, &gTempObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2745,10 +2748,10 @@ else
|
||||
uiItemClass == IC_THROWING_KNIFE || uiItemClass == IC_LAUNCHER ||
|
||||
uiItemClass == IC_APPLIABLE || uiItemClass == IC_FACE || uiItemClass == IC_TENTACLES ||
|
||||
uiItemClass == IC_THROWN || uiItemClass == IC_PUNCH || uiItemClass == IC_KEY ||
|
||||
uiItemClass == IC_MISC || uiItemClass == IC_MONEY
|
||||
uiItemClass == IC_MISC || uiItemClass == IC_MONEY
|
||||
|
||||
// WANNE: Fix by Roadkill: Also drop LBE Gear
|
||||
|| uiItemClass == IC_LBEGEAR || uiItemClass == IC_BELTCLIP
|
||||
|| uiItemClass == IC_LBEGEAR || uiItemClass == IC_BELTCLIP
|
||||
)
|
||||
{
|
||||
// Find matching armour in the XML
|
||||
|
||||
+81
-1
@@ -20,7 +20,7 @@ int gLastLBEUniqueID = 0;
|
||||
|
||||
extern UINT32 guiCurrentItemDescriptionScreen;
|
||||
extern BOOLEAN fShowMapInventoryPool;
|
||||
extern BOOLEAN AutoPlaceObjectInInventoryStash( OBJECTTYPE *pItemPtr, INT16 sGridNo );
|
||||
extern BOOLEAN AutoPlaceObjectInInventoryStash( OBJECTTYPE *pItemPtr, INT32 sGridNo );
|
||||
|
||||
bool IsSlotAnLBESlot(int slot)
|
||||
{
|
||||
@@ -1013,6 +1013,80 @@ void ObjectData::DuplicateLBE()
|
||||
}
|
||||
}
|
||||
|
||||
//dnl ch33 120909
|
||||
OLD_OBJECTTYPE_101& OLD_OBJECTTYPE_101::operator=(OBJECTTYPE& src)
|
||||
{
|
||||
if((void*)this != (void*)&src)
|
||||
{
|
||||
memset(this, 0, sizeof(OLD_OBJECTTYPE_101));
|
||||
this->usItem = src.usItem;
|
||||
this->ubNumberOfObjects = src.ubNumberOfObjects;
|
||||
this->ubWeight = (UINT8)CalculateObjectWeight(&src);//dnl??? need test, probably this should be calculated after you create old object
|
||||
this->fFlags = src.fFlags;
|
||||
this->ubMission = src.ubMission;
|
||||
this->ubNumberOfObjects = src.ubNumberOfObjects;
|
||||
this->usItem = src.usItem;
|
||||
if(ubNumberOfObjects == 1)
|
||||
{
|
||||
this->ugYucky.bGunStatus = (INT8)src[0]->data.gun.bGunStatus;
|
||||
switch(Item[src.usItem].usItemClass)
|
||||
{
|
||||
case IC_MONEY:
|
||||
this->ugYucky.uiMoneyAmount = src[0]->data.money.uiMoneyAmount;
|
||||
break;
|
||||
case IC_KEY:
|
||||
ugYucky.ubKeyID = src[0]->data.key.ubKeyID;
|
||||
break;
|
||||
case IC_GRENADE:
|
||||
case IC_BOMB:
|
||||
this->ugYucky.bDetonatorType = src[0]->data.misc.bDetonatorType;
|
||||
this->ugYucky.usBombItem = src[0]->data.misc.usBombItem;
|
||||
this->ugYucky.bDelay = src[0]->data.misc.bDelay;
|
||||
this->ugYucky.ubBombOwner = src[0]->data.misc.ubBombOwner;
|
||||
this->ugYucky.bActionValue = src[0]->data.misc.bActionValue;
|
||||
this->ugYucky.ubTolerance = src[0]->data.misc.ubTolerance;
|
||||
break;
|
||||
default:
|
||||
this->ugYucky.ubGunAmmoType = src[0]->data.gun.ubGunAmmoType;
|
||||
this->ugYucky.ubGunShotsLeft = (UINT8)src[0]->data.gun.ubGunShotsLeft;
|
||||
this->ugYucky.usGunAmmoItem = src[0]->data.gun.usGunAmmoItem;
|
||||
this->ugYucky.bGunAmmoStatus = (INT8)src[0]->data.gun.bGunAmmoStatus;
|
||||
this->ugYucky.ubGunState = src[0]->data.gun.ubGunState;
|
||||
break;
|
||||
}
|
||||
this->bTrap = src[0]->data.bTrap;
|
||||
this->ubImprintID = src[0]->data.ubImprintID;
|
||||
this->fUsed = src[0]->data.fUsed;
|
||||
if(src.usItem == OWNERSHIP)
|
||||
{
|
||||
this->ugYucky.ubOwnerProfile = (UINT8)src[0]->data.owner.ubOwnerProfile;
|
||||
this->ugYucky.ubOwnerCivGroup = src[0]->data.owner.ubOwnerCivGroup;
|
||||
}
|
||||
int i = 0;
|
||||
for(attachmentList::iterator iter=src[0]->attachments.begin(); iter!=src[0]->attachments.end(); ++iter)
|
||||
{
|
||||
//dnl??? this part should check if attachment is valid for 1.12, but then means you will lost some stuff from NIV, and if you wnat play map in older 1.13 versions this is not good
|
||||
//if(iter->usItem)
|
||||
// ;
|
||||
this->usAttachItem[i] = iter->usItem;
|
||||
this->bAttachStatus[i] = (INT8)(*iter)[0]->data.objectStatus;
|
||||
if(++i >= OLD_MAX_ATTACHMENTS_101)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(&this->ugYucky, 0, sizeof(Version101::OLD_OBJECTTYPE_101_UNION));
|
||||
for(int i=0; i<ubNumberOfObjects; i++)
|
||||
this->ugYucky.bStatus[i] = (INT8)src[i]->data.objectStatus;
|
||||
this->bTrap = src[0]->data.bTrap;
|
||||
this->ubImprintID = src[0]->data.ubImprintID;
|
||||
this->fUsed = src[0]->data.fUsed;
|
||||
}
|
||||
}
|
||||
return(*this);
|
||||
}
|
||||
|
||||
// Constructor
|
||||
OBJECTTYPE::OBJECTTYPE()
|
||||
{
|
||||
@@ -1152,6 +1226,12 @@ OBJECTTYPE& OBJECTTYPE::operator=(const OLD_OBJECTTYPE_101& src)
|
||||
(*this)[0]->data.ubImprintID = src.ubImprintID; // ID of merc that item is imprinted on
|
||||
(*this)[0]->data.fUsed = src.fUsed; // flags for whether the item is used or not
|
||||
|
||||
if(src.usItem == OWNERSHIP)//dnl ch29 120909
|
||||
{
|
||||
(*this)[0]->data.owner.ubOwnerProfile = src.ugYucky.ubOwnerProfile;
|
||||
(*this)[0]->data.owner.ubOwnerCivGroup = src.ugYucky.ubOwnerCivGroup;
|
||||
}
|
||||
|
||||
//it's unlikely max will get less over the versions, but still, check the min
|
||||
for (int x = 0; x < OLD_MAX_ATTACHMENTS_101; ++x)
|
||||
{
|
||||
|
||||
@@ -307,6 +307,7 @@ namespace Version101
|
||||
class OLD_OBJECTTYPE_101
|
||||
{
|
||||
public:
|
||||
OLD_OBJECTTYPE_101& operator=(OBJECTTYPE& src);//dnl ch33 120909
|
||||
UINT16 usItem;
|
||||
UINT8 ubNumberOfObjects;
|
||||
|
||||
@@ -355,7 +356,7 @@ namespace ObjectDataStructs {
|
||||
{
|
||||
UINT8 ubTolerance; // tolerance value for panic triggers
|
||||
UINT8 ubLocationID; // location value for remote non-bomb (special!) triggers
|
||||
};
|
||||
};
|
||||
};
|
||||
struct OBJECT_KEY
|
||||
{
|
||||
|
||||
+70
-61
@@ -51,6 +51,7 @@
|
||||
#include "lighting.h"
|
||||
#include "utilities.h"
|
||||
#include "english.h"
|
||||
#include "debug control.h"
|
||||
#endif
|
||||
|
||||
//forward declarations of common classes to eliminate includes
|
||||
@@ -64,7 +65,7 @@ void SetNewItem( SOLDIERTYPE *pSoldier, UINT8 ubInvPos, BOOLEAN fNewItem );
|
||||
|
||||
extern SOLDIERTYPE *gpItemDescSoldier;
|
||||
extern BOOLEAN fShowMapInventoryPool;
|
||||
extern BOOLEAN AutoPlaceObjectInInventoryStash( OBJECTTYPE *pItemPtr, INT16 sGridNo );
|
||||
extern BOOLEAN AutoPlaceObjectInInventoryStash( OBJECTTYPE *pItemPtr, INT32 sGridNo );
|
||||
|
||||
// weight units are 100g each
|
||||
|
||||
@@ -2680,7 +2681,9 @@ UINT32 CalculateCarriedWeight( SOLDIERTYPE * pSoldier )
|
||||
//ADB the weight of the object is already counting stacked objects, attachments, et al
|
||||
uiTotalWeight += CalculateObjectWeight(&pSoldier->inv[ubLoop]);
|
||||
}
|
||||
// Every point over 80 counts double.
|
||||
// for now, assume soldiers can carry 1/2 their strength in KGs without penalty.
|
||||
// instead of multiplying by 100 for percent, and then dividing by 10 to account
|
||||
// for weight units being in 10ths of kilos, not kilos... we just start with 10 instead of 100!
|
||||
ubStrengthForCarrying = EffectiveStrength( pSoldier );
|
||||
if ( ubStrengthForCarrying > 80 )
|
||||
{
|
||||
@@ -3158,8 +3161,8 @@ BOOLEAN EmptyWeaponMagazine( OBJECTTYPE * pWeapon, OBJECTTYPE *pAmmo, UINT32 sub
|
||||
{
|
||||
CreateAmmo((*pWeapon)[subObject]->data.gun.usGunAmmoItem, pAmmo, (*pWeapon)[subObject]->data.gun.ubGunShotsLeft);
|
||||
|
||||
(*pWeapon)[subObject]->data.gun.ubGunShotsLeft = 0;
|
||||
(*pWeapon)[subObject]->data.gun.ubGunAmmoType = 0;
|
||||
(*pWeapon)[subObject]->data.gun.ubGunShotsLeft = 0;
|
||||
(*pWeapon)[subObject]->data.gun.ubGunAmmoType = 0;
|
||||
// HEADROCK HAM 3.5: Leaving the ammo inside the gun causes EDB stats to display values as though the magazine
|
||||
// still gives some effects (like autopen reduction, range bonus, etcetera). I'm going to try to work around
|
||||
// this issue.
|
||||
@@ -6349,8 +6352,14 @@ void CheckEquipmentForFragileItemDamage( SOLDIERTYPE *pSoldier, INT32 iDamage )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT16 sGridNo, INT8 bLevel, INT32 iDamage, UINT8 ubOwner )
|
||||
BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, UINT8 ubOwner )
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"DamageItemOnGround ( usItem : %i , sGridNo : %i , bLevel : %i , iDamage : %i , ubOwner : %i )\n",pObject->usItem, sGridNo , bLevel , iDamage , ubOwner );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
#endif
|
||||
|
||||
BOOLEAN fBlowsUp;
|
||||
|
||||
fBlowsUp = DamageItem( pObject, iDamage, TRUE );
|
||||
@@ -7811,7 +7820,7 @@ INT8 FindGasMask( SOLDIERTYPE * pSoldier )
|
||||
{
|
||||
INT8 bLoop;
|
||||
|
||||
for (bLoop = 0; bLoop < HANDPOS; bLoop++)
|
||||
for (bLoop = 0; bLoop < NUM_INV_SLOTS; bLoop++)//dnl ch40 041009
|
||||
{
|
||||
if (pSoldier->inv[bLoop].exists() == true) {
|
||||
if ( Item[pSoldier->inv[bLoop].usItem].gasmask )
|
||||
@@ -8544,62 +8553,62 @@ UINT8 AllowedAimingLevels(SOLDIERTYPE * pSoldier)
|
||||
{
|
||||
// HEADROCK HAM B2.6: Dynamic aiming level restrictions based on gun type and attachments.
|
||||
// HEADROCK HAM 3.5: Revamped this - it was illogically constructed.
|
||||
if ( gGameExternalOptions.fDynamicAimingTime )
|
||||
{
|
||||
UINT16 weaponRange;
|
||||
UINT8 weaponType, maxAimForType, maxAimWithoutBipod;
|
||||
BOOLEAN fTwoHanded, fUsingBipod;
|
||||
|
||||
// Read weapon data
|
||||
fTwoHanded = Item[pSoldier->inv[pSoldier->ubAttackingHand].usItem].twohanded;
|
||||
weaponRange = Weapon[pSoldier->inv[pSoldier->ubAttackingHand].usItem].usRange + GetRangeBonus(&pSoldier->inv[pSoldier->ubAttackingHand]);
|
||||
weaponType = Weapon[pSoldier->inv[pSoldier->ubAttackingHand].usItem].ubWeaponType;
|
||||
fUsingBipod = FALSE;
|
||||
if ( gGameExternalOptions.fDynamicAimingTime )
|
||||
{
|
||||
UINT16 weaponRange;
|
||||
UINT8 weaponType, maxAimForType, maxAimWithoutBipod;
|
||||
BOOLEAN fTwoHanded, fUsingBipod;
|
||||
|
||||
// Read weapon data
|
||||
fTwoHanded = Item[pSoldier->inv[pSoldier->ubAttackingHand].usItem].twohanded;
|
||||
weaponRange = Weapon[pSoldier->inv[pSoldier->ubAttackingHand].usItem].usRange + GetRangeBonus(&pSoldier->inv[pSoldier->ubAttackingHand]);
|
||||
weaponType = Weapon[pSoldier->inv[pSoldier->ubAttackingHand].usItem].ubWeaponType;
|
||||
fUsingBipod = FALSE;
|
||||
|
||||
maxAimWithoutBipod = 4;
|
||||
|
||||
// Define basic (no attachments), and absolute maximums
|
||||
maxAimWithoutBipod = 4;
|
||||
|
||||
// Define basic (no attachments), and absolute maximums
|
||||
if (weaponType == GUN_PISTOL || weaponType == GUN_M_PISTOL || fTwoHanded == 0)
|
||||
{
|
||||
maxAimForType = 2;
|
||||
aimLevels = 1;
|
||||
maxAimWithoutBipod = 2;
|
||||
}
|
||||
{
|
||||
maxAimForType = 2;
|
||||
aimLevels = 1;
|
||||
maxAimWithoutBipod = 2;
|
||||
}
|
||||
else if (weaponType == GUN_SHOTGUN || weaponType == GUN_LMG || weaponType == GUN_SMG)
|
||||
{
|
||||
maxAimForType = 3;
|
||||
aimLevels = 2;
|
||||
maxAimWithoutBipod = 3;
|
||||
}
|
||||
{
|
||||
maxAimForType = 3;
|
||||
aimLevels = 2;
|
||||
maxAimWithoutBipod = 3;
|
||||
}
|
||||
else if ((weaponType == GUN_AS_RIFLE || weaponType == GUN_RIFLE ) && weaponRange <= 500)
|
||||
{
|
||||
maxAimForType = 4;
|
||||
aimLevels = 2;
|
||||
maxAimWithoutBipod = 3;
|
||||
}
|
||||
{
|
||||
maxAimForType = 4;
|
||||
aimLevels = 2;
|
||||
maxAimWithoutBipod = 3;
|
||||
}
|
||||
else if (((weaponType == GUN_AS_RIFLE || weaponType == GUN_RIFLE) && weaponRange > 500) ||
|
||||
(weaponType == GUN_SN_RIFLE && weaponRange <= 500))
|
||||
{
|
||||
{
|
||||
maxAimForType = 6;
|
||||
aimLevels = 3;
|
||||
maxAimWithoutBipod = 4;
|
||||
}
|
||||
aimLevels = 3;
|
||||
maxAimWithoutBipod = 4;
|
||||
}
|
||||
else if (weaponType == GUN_SN_RIFLE && weaponRange > 500)
|
||||
{
|
||||
maxAimForType = 8;
|
||||
aimLevels = 4;
|
||||
maxAimWithoutBipod = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
// Determine whether a bipod is being used (prone)
|
||||
if (GetBipodBonus(&pSoldier->inv[pSoldier->ubAttackingHand])>0 && gAnimControl[ pSoldier->usAnimState ].ubEndHeight == ANIM_PRONE )
|
||||
{
|
||||
fUsingBipod = TRUE;
|
||||
}
|
||||
// Determine whether a bipod is being used (prone)
|
||||
if (GetBipodBonus(&pSoldier->inv[pSoldier->ubAttackingHand])>0 && gAnimControl[ pSoldier->usAnimState ].ubEndHeight == ANIM_PRONE )
|
||||
{
|
||||
fUsingBipod = TRUE;
|
||||
}
|
||||
|
||||
usScopeBonus = ( GetMinRangeForAimBonus(&pSoldier->inv[pSoldier->ubAttackingHand]) * 10 ) / gGameExternalOptions.ubStraightSightRange;
|
||||
|
||||
@@ -8624,19 +8633,19 @@ UINT8 AllowedAimingLevels(SOLDIERTYPE * pSoldier)
|
||||
aimLevels++;
|
||||
}
|
||||
|
||||
// Make sure not over maximum allowed for weapon type.
|
||||
if (aimLevels > maxAimForType)
|
||||
{
|
||||
aimLevels = maxAimForType;
|
||||
}
|
||||
// Make sure not over maximum allowed without a bipod.
|
||||
if (!fUsingBipod)
|
||||
{
|
||||
aimLevels = __min(aimLevels, maxAimWithoutBipod);
|
||||
}
|
||||
}
|
||||
else // JA2 1.13 Basic aiming restrictions (8 levels for 10x scope, 6 levels for 7x scope)
|
||||
// Make sure not over maximum allowed for weapon type.
|
||||
if (aimLevels > maxAimForType)
|
||||
{
|
||||
aimLevels = maxAimForType;
|
||||
}
|
||||
// Make sure not over maximum allowed without a bipod.
|
||||
if (!fUsingBipod)
|
||||
{
|
||||
aimLevels = __min(aimLevels, maxAimWithoutBipod);
|
||||
}
|
||||
}
|
||||
else // JA2 1.13 Basic aiming restrictions (8 levels for 10x scope, 6 levels for 7x scope)
|
||||
{
|
||||
if ( !IsScoped( &pSoldier->inv[pSoldier->ubAttackingHand] ) )
|
||||
{
|
||||
// No scope. 4 Allowed.
|
||||
@@ -8957,4 +8966,4 @@ INT8 FindBackpackOnSoldier( SOLDIERTYPE * pSoldier )
|
||||
}
|
||||
}
|
||||
return( ITEM_NOT_FOUND );
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -186,7 +186,7 @@ UINT16 StandardGunListReplacement( UINT16 usGun );
|
||||
UINT16 FindReplacementMagazine( UINT8 ubCalibre, UINT16 ubMagSize, UINT8 ubAmmoType);
|
||||
UINT16 FindReplacementMagazineIfNecessary( UINT16 usOldGun, UINT16 usOldAmmo, UINT16 usNewGun );
|
||||
|
||||
BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT16 sGridNo, INT8 bLevel, INT32 iDamage, UINT8 ubOwner );
|
||||
BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, UINT8 ubOwner );
|
||||
|
||||
BOOLEAN ApplyCanteen( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN *pfGoodAPs );
|
||||
BOOLEAN ApplyElixir( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN *pfGoodAPs );
|
||||
|
||||
+97
-50
@@ -641,7 +641,7 @@ void HandleDoorTrap( SOLDIERTYPE * pSoldier, DOOR * pDoor )
|
||||
{
|
||||
case EXPLOSION:
|
||||
// cause damage as a regular hand grenade
|
||||
IgniteExplosion( NOBODY, CenterX( pSoldier->sGridNo ), (INT16)CenterY( pSoldier->sGridNo ), 25, pSoldier->sGridNo, HAND_GRENADE, 0 );
|
||||
IgniteExplosion( NOBODY, CenterX( pSoldier->sGridNo ), CenterY( pSoldier->sGridNo ), 25, pSoldier->sGridNo, HAND_GRENADE, 0 );
|
||||
break;
|
||||
|
||||
case SIREN:
|
||||
@@ -716,7 +716,7 @@ BOOLEAN AttemptToBlowUpLock( SOLDIERTYPE * pSoldier, DOOR * pDoor )
|
||||
// Do explosive graphic....
|
||||
{
|
||||
ANITILE_PARAMS AniParams;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
INT16 sX, sY, sZ;
|
||||
|
||||
// Get gridno
|
||||
@@ -779,45 +779,92 @@ BOOLEAN AttemptToBlowUpLock( SOLDIERTYPE * pSoldier, DOOR * pDoor )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
//File I/O for loading the door information from the map. This automatically allocates
|
||||
//the exact number of slots when loading.
|
||||
void LoadDoorTableFromMap( INT8 **hBuffer )
|
||||
//dnl ch42 250909
|
||||
DOOR& DOOR::operator=(const _OLD_DOOR& src)
|
||||
{
|
||||
INT32 cnt;
|
||||
|
||||
TrashDoorTable();
|
||||
LOADDATA( &gubNumDoors, *hBuffer, 1 );
|
||||
|
||||
gubMaxDoors = gubNumDoors;
|
||||
DoorTable = (DOOR *)MemAlloc( sizeof( DOOR ) * gubMaxDoors );
|
||||
|
||||
LOADDATA( DoorTable, *hBuffer, sizeof( DOOR )*gubMaxDoors );
|
||||
|
||||
// OK, reset perceived values to nothing...
|
||||
for ( cnt = 0; cnt < gubNumDoors; cnt++ )
|
||||
if((void*)this != (void*)&src)
|
||||
{
|
||||
DoorTable[ cnt ].bPerceivedLocked = DOOR_PERCEIVED_UNKNOWN;
|
||||
DoorTable[ cnt ].bPerceivedTrapped = DOOR_PERCEIVED_UNKNOWN;
|
||||
sGridNo = src.sGridNo;
|
||||
fLocked = src.fLocked;
|
||||
ubTrapLevel = src.ubTrapLevel;
|
||||
ubTrapID = src.ubTrapID;
|
||||
ubLockID = src.ubLockID;
|
||||
bPerceivedLocked = src.bPerceivedLocked;
|
||||
bPerceivedTrapped = src.bPerceivedTrapped;
|
||||
bLockDamage = src.bLockDamage;
|
||||
}
|
||||
return(*this);
|
||||
}
|
||||
|
||||
BOOLEAN DOOR::Load(INT8** hBuffer, FLOAT dMajorMapVersion)
|
||||
{
|
||||
if(dMajorMapVersion < 7.0)
|
||||
{
|
||||
_OLD_DOOR OldDoorTable;
|
||||
LOADDATA(&OldDoorTable, *hBuffer, sizeof(_OLD_DOOR));
|
||||
*this = OldDoorTable;
|
||||
}
|
||||
else
|
||||
LOADDATA(this, *hBuffer, sizeof(DOOR));
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
BOOLEAN DOOR::Save(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion)
|
||||
{
|
||||
PTR pData = this;
|
||||
UINT32 uiBytesToWrite = sizeof(DOOR);
|
||||
_OLD_DOOR OldDoor;
|
||||
if(dMajorMapVersion == VANILLA_MAJOR_MAP_VERSION && ubMinorMapVersion == VANILLA_MINOR_MAP_VERSION)
|
||||
{
|
||||
memset(&OldDoor, 0, sizeof(_OLD_DOOR));
|
||||
OldDoor.sGridNo = sGridNo;
|
||||
OldDoor.fLocked = fLocked;
|
||||
OldDoor.ubTrapLevel = ubTrapLevel;
|
||||
OldDoor.ubTrapID = ubTrapID;
|
||||
OldDoor.ubLockID = ubLockID;
|
||||
OldDoor.bPerceivedLocked = bPerceivedLocked;
|
||||
OldDoor.bPerceivedTrapped = bPerceivedTrapped;
|
||||
OldDoor.bLockDamage = bLockDamage;
|
||||
pData = &OldDoor;
|
||||
uiBytesToWrite = sizeof(_OLD_DOOR);
|
||||
}
|
||||
UINT32 uiBytesWritten = 0;
|
||||
FileWrite(hFile, pData, uiBytesToWrite, &uiBytesWritten);
|
||||
if(uiBytesToWrite == uiBytesWritten)
|
||||
return(TRUE);
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
void LoadDoorTableFromMap(INT8** hBuffer, FLOAT dMajorMapVersion)
|
||||
{
|
||||
TrashDoorTable();
|
||||
LOADDATA(&gubNumDoors, *hBuffer, sizeof(gubNumDoors));
|
||||
gubMaxDoors = gubNumDoors;
|
||||
DoorTable = (DOOR*)MemAlloc(gubMaxDoors*sizeof(DOOR));
|
||||
for(int cnt=0; cnt<gubNumDoors; cnt++)
|
||||
{
|
||||
DoorTable[cnt].Load(hBuffer, dMajorMapVersion);
|
||||
gMapTrn.GetTrnCnt(DoorTable[cnt].sGridNo);//dnl ch44 290909 DOOR translation
|
||||
// OK, reset perceived values to nothing...
|
||||
DoorTable[cnt].bPerceivedLocked = DOOR_PERCEIVED_UNKNOWN;
|
||||
DoorTable[cnt].bPerceivedTrapped = DOOR_PERCEIVED_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
//Saves the existing door information to the map. Before it actually saves, it'll verify that the
|
||||
//door still exists. Otherwise, it'll ignore it. It is possible in the editor to delete doors in
|
||||
//many different ways, so I opted to put it in the saving routine.
|
||||
void SaveDoorTableToMap( HWFILE fp )
|
||||
void SaveDoorTableToMap(HWFILE fp, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion)
|
||||
{
|
||||
INT32 i = 0;
|
||||
UINT32 uiBytesWritten;
|
||||
|
||||
while( i < gubNumDoors )
|
||||
while(i < gubNumDoors)
|
||||
{
|
||||
if( !OpenableAtGridNo( DoorTable[ i ].sGridNo ) )
|
||||
RemoveDoorInfoFromTable( DoorTable[ i ].sGridNo );
|
||||
if(!OpenableAtGridNo(DoorTable[i].sGridNo))
|
||||
RemoveDoorInfoFromTable(DoorTable[i].sGridNo);
|
||||
else
|
||||
i++;
|
||||
}
|
||||
FileWrite( fp, &gubNumDoors, 1, &uiBytesWritten );
|
||||
FileWrite( fp, DoorTable, sizeof( DOOR )*gubNumDoors, &uiBytesWritten );
|
||||
UINT32 uiBytesWritten;
|
||||
FileWrite(fp, &gubNumDoors, sizeof(gubNumDoors), &uiBytesWritten);
|
||||
for(i=0; i<gubNumDoors; i++)
|
||||
DoorTable[i].Save(fp, dMajorMapVersion, ubMinorMapVersion);
|
||||
}
|
||||
|
||||
//The editor adds locks to the world. If the gridno already exists, then the currently existing door
|
||||
@@ -1077,7 +1124,7 @@ BOOLEAN LoadDoorTableFromDoorTableTempFile( )
|
||||
|
||||
|
||||
// fOpen is True if the door is open, false if it is closed
|
||||
BOOLEAN ModifyDoorStatus( INT16 sGridNo, BOOLEAN fOpen, BOOLEAN fPerceivedOpen )
|
||||
BOOLEAN ModifyDoorStatus( INT32 sGridNo, BOOLEAN fOpen, BOOLEAN fPerceivedOpen )
|
||||
{
|
||||
UINT8 ubCnt;
|
||||
STRUCTURE * pStructure;
|
||||
@@ -1203,7 +1250,7 @@ void TrashDoorStatusArray( )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN IsDoorOpen( INT16 sGridNo )
|
||||
BOOLEAN IsDoorOpen( INT32 sGridNo )
|
||||
{
|
||||
UINT8 ubCnt;
|
||||
STRUCTURE * pStructure;
|
||||
@@ -1253,7 +1300,7 @@ BOOLEAN IsDoorOpen( INT16 sGridNo )
|
||||
}
|
||||
|
||||
// Returns a doors status value, NULL if not found
|
||||
DOOR_STATUS *GetDoorStatus( INT16 sGridNo )
|
||||
DOOR_STATUS *GetDoorStatus( INT32 sGridNo )
|
||||
{
|
||||
UINT8 ubCnt;
|
||||
STRUCTURE * pStructure;
|
||||
@@ -1293,13 +1340,13 @@ DOOR_STATUS *GetDoorStatus( INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN AllMercsLookForDoor( INT16 sGridNo, BOOLEAN fUpdateValue )
|
||||
BOOLEAN AllMercsLookForDoor( INT32 sGridNo, BOOLEAN fUpdateValue )
|
||||
{
|
||||
INT32 cnt, cnt2;
|
||||
INT8 bDirs[ 8 ] = { NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST };
|
||||
SOLDIERTYPE *pSoldier;
|
||||
DOOR_STATUS *pDoorStatus;
|
||||
INT16 sNewGridNo;
|
||||
INT32 usNewGridNo;
|
||||
|
||||
// Get door
|
||||
pDoorStatus = GetDoorStatus( sGridNo );
|
||||
@@ -1315,8 +1362,8 @@ BOOLEAN AllMercsLookForDoor( INT16 sGridNo, BOOLEAN fUpdateValue )
|
||||
// look for all mercs on the same team,
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++ )
|
||||
{
|
||||
// ATE: Ok, lets check for some basic things here!
|
||||
if ( pSoldier->stats.bLife >= OKLIFE && pSoldier->sGridNo != NOWHERE && pSoldier->bActive && pSoldier->bInSector )
|
||||
// ATE: Ok, lets check for some basic things here!
|
||||
if ( pSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pSoldier->sGridNo) && pSoldier->bActive && pSoldier->bInSector )
|
||||
{
|
||||
// and we can trace a line of sight to his x,y coordinates?
|
||||
// (taking into account we are definitely aware of this guy now)
|
||||
@@ -1333,10 +1380,10 @@ BOOLEAN AllMercsLookForDoor( INT16 sGridNo, BOOLEAN fUpdateValue )
|
||||
// Now try other adjacent gridnos...
|
||||
for ( cnt2 = 0; cnt2 < 8; cnt2++ )
|
||||
{
|
||||
sNewGridNo = NewGridNo( sGridNo, DirectionInc( bDirs[ cnt2 ] ) );
|
||||
usNewGridNo = NewGridNo( sGridNo, DirectionInc( bDirs[ cnt2 ] ) );
|
||||
// and we can trace a line of sight to his x,y coordinates?
|
||||
// (taking into account we are definitely aware of this guy now)
|
||||
if ( SoldierTo3DLocationLineOfSightTest( pSoldier, sNewGridNo, 0, 0, TRUE, CALC_FROM_ALL_DIRS ) )
|
||||
if ( SoldierTo3DLocationLineOfSightTest( pSoldier, usNewGridNo, 0, 0, TRUE, CALC_FROM_ALL_DIRS ) )
|
||||
{
|
||||
// Update status...
|
||||
if ( fUpdateValue )
|
||||
@@ -1356,10 +1403,10 @@ BOOLEAN AllMercsLookForDoor( INT16 sGridNo, BOOLEAN fUpdateValue )
|
||||
BOOLEAN MercLooksForDoors( SOLDIERTYPE *pSoldier, BOOLEAN fUpdateValue )
|
||||
{
|
||||
INT32 cnt, cnt2;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
DOOR_STATUS *pDoorStatus;
|
||||
INT8 bDirs[ 8 ] = { NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST };
|
||||
INT16 sNewGridNo;
|
||||
INT32 usNewGridNo;
|
||||
|
||||
|
||||
|
||||
@@ -1392,10 +1439,10 @@ BOOLEAN MercLooksForDoors( SOLDIERTYPE *pSoldier, BOOLEAN fUpdateValue )
|
||||
// Now try other adjacent gridnos...
|
||||
for ( cnt2 = 0; cnt2 < 8; cnt2++ )
|
||||
{
|
||||
sNewGridNo = NewGridNo( sGridNo, DirectionInc( bDirs[ cnt2 ] ) );
|
||||
usNewGridNo = NewGridNo( sGridNo, DirectionInc( bDirs[ cnt2 ] ) );
|
||||
// and we can trace a line of sight to his x,y coordinates?
|
||||
// (taking into account we are definitely aware of this guy now)
|
||||
if ( SoldierTo3DLocationLineOfSightTest( pSoldier, sNewGridNo, 0, 0, TRUE, CALC_FROM_ALL_DIRS ) )
|
||||
if ( SoldierTo3DLocationLineOfSightTest( pSoldier, usNewGridNo, 0, 0, TRUE, CALC_FROM_ALL_DIRS ) )
|
||||
{
|
||||
// Update status...
|
||||
if ( fUpdateValue )
|
||||
@@ -1418,7 +1465,7 @@ void SyncronizeDoorStatusToStructureData( DOOR_STATUS *pDoorStatus )
|
||||
{
|
||||
STRUCTURE *pStructure, *pBaseStructure;
|
||||
LEVELNODE * pNode;
|
||||
INT16 sBaseGridNo = NOWHERE;
|
||||
INT32 sBaseGridNo = NOWHERE;
|
||||
|
||||
// First look for a door structure here...
|
||||
pStructure = FindStructure( pDoorStatus->sGridNo, STRUCTURE_ANYDOOR );
|
||||
@@ -1500,7 +1547,7 @@ void InternalUpdateDoorGraphicFromStatus( DOOR_STATUS *pDoorStatus, BOOLEAN fUse
|
||||
LEVELNODE * pNode;
|
||||
BOOLEAN fWantToBeOpen = FALSE;
|
||||
BOOLEAN fDifferent = FALSE;
|
||||
INT16 sBaseGridNo = NOWHERE;
|
||||
INT32 sBaseGridNo = NOWHERE;
|
||||
|
||||
|
||||
// OK, look at perceived status and adjust graphic
|
||||
@@ -1708,7 +1755,7 @@ void InternalUpdateDoorsPerceivedValue( DOOR_STATUS *pDoorStatus )
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN UpdateDoorStatusPerceivedValue( INT16 sGridNo )
|
||||
BOOLEAN UpdateDoorStatusPerceivedValue( INT32 sGridNo )
|
||||
{
|
||||
DOOR_STATUS *pDoorStatus = NULL;
|
||||
|
||||
@@ -1721,7 +1768,7 @@ BOOLEAN UpdateDoorStatusPerceivedValue( INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN IsDoorPerceivedOpen( INT16 sGridNo )
|
||||
BOOLEAN IsDoorPerceivedOpen( INT32 sGridNo )
|
||||
{
|
||||
DOOR_STATUS * pDoorStatus;
|
||||
|
||||
@@ -1759,7 +1806,7 @@ BOOLEAN InternalSetDoorPerceivedOpenStatus( DOOR_STATUS *pDoorStatus, BOOLEAN fP
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN SetDoorPerceivedOpenStatus( INT16 sGridNo, BOOLEAN fPerceivedOpen )
|
||||
BOOLEAN SetDoorPerceivedOpenStatus( INT32 sGridNo, BOOLEAN fPerceivedOpen )
|
||||
{
|
||||
DOOR_STATUS *pDoorStatus = NULL;
|
||||
|
||||
@@ -1772,7 +1819,7 @@ BOOLEAN SetDoorPerceivedOpenStatus( INT16 sGridNo, BOOLEAN fPerceivedOpen )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN SetDoorOpenStatus( INT16 sGridNo, BOOLEAN fOpen )
|
||||
BOOLEAN SetDoorOpenStatus( INT32 sGridNo, BOOLEAN fOpen )
|
||||
{
|
||||
DOOR_STATUS * pDoorStatus;
|
||||
|
||||
@@ -2104,7 +2151,7 @@ void HandleDoorsChangeWhenEnteringSectorCurrentlyLoaded( )
|
||||
}
|
||||
|
||||
|
||||
void DropKeysInKeyRing( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, INT8 bVisible, BOOLEAN fAddToDropList, INT32 iDropListSlot, BOOLEAN fUseUnLoaded )
|
||||
void DropKeysInKeyRing( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, INT8 bVisible, BOOLEAN fAddToDropList, INT32 iDropListSlot, BOOLEAN fUseUnLoaded )
|
||||
{
|
||||
if (!(pSoldier->pKeyRing))
|
||||
{
|
||||
|
||||
+41
-20
@@ -61,6 +61,8 @@ typedef struct
|
||||
#define DOOR_PERCEIVED_TRAPPED 1
|
||||
#define DOOR_PERCEIVED_UNTRAPPED 2
|
||||
|
||||
//dnl ch42 250909
|
||||
// WANNE - BMP: DONE!
|
||||
typedef struct
|
||||
{
|
||||
INT16 sGridNo;
|
||||
@@ -74,7 +76,27 @@ typedef struct
|
||||
INT8 bPerceivedTrapped; // See above, but with respect to traps rather than locked status
|
||||
INT8 bLockDamage; // Damage to the lock
|
||||
INT8 bPadding[4]; // extra bytes
|
||||
} DOOR;
|
||||
} _OLD_DOOR;
|
||||
|
||||
class DOOR
|
||||
{
|
||||
public:
|
||||
INT32 sGridNo;
|
||||
BOOLEAN fLocked; // is the door locked
|
||||
UINT8 ubTrapLevel; // difficulty of finding the trap, 0-10
|
||||
UINT8 ubTrapID; // the trap type (0 is no trap)
|
||||
UINT8 ubLockID; // the lock (0 is no lock)
|
||||
INT8 bPerceivedLocked; // The perceived lock value can be different than the fLocked.
|
||||
// Values for this include the fact that we don't know the status of the door, etc
|
||||
INT8 bPerceivedTrapped; // See above, but with respect to traps rather than locked status
|
||||
INT8 bLockDamage; // Damage to the lock
|
||||
public:
|
||||
// DOOR();
|
||||
// ~DOOR();
|
||||
DOOR& operator=(const _OLD_DOOR& src);
|
||||
BOOLEAN Load(INT8** hBuffer, FLOAT dMajorMapVersion);
|
||||
BOOLEAN Save(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion);
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -109,9 +131,11 @@ typedef struct
|
||||
|
||||
#define DONTSETDOORSTATUS 2
|
||||
|
||||
// WANNE - BMP: Maybe we also need here an "_OLD_DOOR_STATUS" struct
|
||||
// but this does not exist in BMP code!
|
||||
typedef struct
|
||||
{
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT8 ubFlags;
|
||||
|
||||
} DOOR_STATUS;
|
||||
@@ -157,14 +181,11 @@ extern UINT8 gubNumDoors;
|
||||
//then copy everything over again. gubMaxDoors holds the arrays actual number of slots, even though
|
||||
//the current number (gubNumDoors) will be <= to it.
|
||||
extern UINT8 gubMaxDoors;
|
||||
//File I/O for loading the door information from the map. This automatically allocates
|
||||
//the exact number of slots when loading.
|
||||
|
||||
extern void LoadDoorTableFromMap( INT8 **hBuffer );
|
||||
//Saves the existing door information to the map. Before it actually saves, it'll verify that the
|
||||
//door still exists. Otherwise, it'll ignore it. It is possible in the editor to delete doors in
|
||||
//many different ways, so I opted to put it in the saving routine.
|
||||
extern void SaveDoorTableToMap( HWFILE fp );
|
||||
//dnl ch42 250909
|
||||
// File I/O for loading the door information from the map. This automatically allocates the exact number of slots when loading.
|
||||
void LoadDoorTableFromMap(INT8** hBuffer, FLOAT dMajorMapVersion);
|
||||
// Saves the existing door information to the map. Before it actually saves, it'll verify that the door still exists. Otherwise, it'll ignore it. It is possible in the editor to delete doors in many different ways, so I opted to put it in the saving routine.
|
||||
void SaveDoorTableToMap(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion);
|
||||
//The editor adds locks to the world. If the gridno already exists, then the currently existing door
|
||||
//information is overwritten.
|
||||
extern void AddDoorInfoToTable( DOOR *pDoor );
|
||||
@@ -204,16 +225,16 @@ BOOLEAN LoadDoorTableFromDoorTableTempFile( );
|
||||
// if the door already exists, nothing happens
|
||||
// fOpen is True if the door is to be initially open, false if it is closed
|
||||
// fInitiallyPercieveOpen is true if the door is to be initially open, else false
|
||||
BOOLEAN ModifyDoorStatus( INT16 sGridNo, BOOLEAN fOpen, BOOLEAN fInitiallyPercieveOpen );
|
||||
BOOLEAN ModifyDoorStatus( INT32 sGridNo, BOOLEAN fOpen, BOOLEAN fInitiallyPercieveOpen );
|
||||
|
||||
//Deletes the door status array
|
||||
void TrashDoorStatusArray( );
|
||||
|
||||
// Returns true if the door is open, otherwise false
|
||||
BOOLEAN IsDoorOpen( INT16 sGridNo );
|
||||
BOOLEAN IsDoorOpen( INT32 sGridNo );
|
||||
|
||||
//Returns true if the door is perceioved as open
|
||||
BOOLEAN IsDoorPerceivedOpen( INT16 sGridNo );
|
||||
BOOLEAN IsDoorPerceivedOpen( INT32 sGridNo );
|
||||
|
||||
// Saves the Door Status array to the MapTempfile
|
||||
BOOLEAN SaveDoorStatusArrayToDoorStatusTempFile( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
|
||||
@@ -222,10 +243,10 @@ BOOLEAN SaveDoorStatusArrayToDoorStatusTempFile( INT16 sSectorX, INT16 sSectorY,
|
||||
BOOLEAN LoadDoorStatusArrayFromDoorStatusTempFile();
|
||||
|
||||
//Modify the Doors open status
|
||||
BOOLEAN SetDoorOpenStatus( INT16 sGridNo, BOOLEAN fOpen );
|
||||
BOOLEAN SetDoorOpenStatus( INT32 sGridNo, BOOLEAN fOpen );
|
||||
|
||||
//Modify the doors perceived open status
|
||||
BOOLEAN SetDoorPerceivedOpenStatus( INT16 sGridNo, BOOLEAN fPerceivedOpen );
|
||||
BOOLEAN SetDoorPerceivedOpenStatus( INT32 sGridNo, BOOLEAN fPerceivedOpen );
|
||||
|
||||
|
||||
//Save the key table to the saved game file
|
||||
@@ -235,11 +256,11 @@ BOOLEAN SaveKeyTableToSaveGameFile( HWFILE hFile );
|
||||
BOOLEAN LoadKeyTableFromSaveedGameFile( HWFILE hFile );
|
||||
|
||||
// Returns a doors status value, NULL if not found
|
||||
DOOR_STATUS *GetDoorStatus( INT16 sGridNo );
|
||||
DOOR_STATUS *GetDoorStatus( INT32 sGridNo );
|
||||
|
||||
BOOLEAN UpdateDoorStatusPerceivedValue( INT16 sGridNo );
|
||||
BOOLEAN UpdateDoorStatusPerceivedValue( INT32 sGridNo );
|
||||
|
||||
BOOLEAN AllMercsLookForDoor( INT16 sGridNo, BOOLEAN fUpdateValue );
|
||||
BOOLEAN AllMercsLookForDoor( INT32 sGridNo, BOOLEAN fUpdateValue );
|
||||
|
||||
BOOLEAN MercLooksForDoors( SOLDIERTYPE *pSoldier, BOOLEAN fUpdateValue );
|
||||
|
||||
@@ -253,8 +274,8 @@ void ExamineDoorsOnEnteringSector( );
|
||||
|
||||
void HandleDoorsChangeWhenEnteringSectorCurrentlyLoaded( );
|
||||
|
||||
void AttachStringToDoor( INT16 sGridNo );
|
||||
void AttachStringToDoor( INT32 sGridNo );
|
||||
|
||||
void DropKeysInKeyRing( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, INT8 bVisible, BOOLEAN fAddToDropList, INT32 iDropListSlot, BOOLEAN fUseUnLoaded );
|
||||
void DropKeysInKeyRing( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, INT8 bVisible, BOOLEAN fAddToDropList, INT32 iDropListSlot, BOOLEAN fUseUnLoaded );
|
||||
|
||||
#endif
|
||||
+68
-66
@@ -22,7 +22,6 @@
|
||||
#include "bullets.h"
|
||||
|
||||
#include "lighting.h"
|
||||
|
||||
#include "phys math.h"
|
||||
#include "items.h"
|
||||
#include "Soldier Profile.h"
|
||||
@@ -162,8 +161,6 @@ static DOUBLE ddShotgunSpread[3][BUCKSHOT_SHOTS][2] =
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
|
||||
//zilpin: pellet spread patterns externalized in XML
|
||||
//Decide what spread pattern to use for an object in inventory.
|
||||
//Attachment trumps Weapon trumps Ammo trumps AmmoType
|
||||
@@ -319,9 +316,9 @@ FIXEDPT FloatToFixed( FLOAT dN )
|
||||
{
|
||||
FIXEDPT qN;
|
||||
// verify that dN is within the range storable by FIXEDPT?
|
||||
|
||||
// first get the whole part
|
||||
qN = (INT32) (dN * FIXEDPT_FRACTIONAL_RESOLUTION);
|
||||
|
||||
qN = (dN * FIXEDPT_FRACTIONAL_RESOLUTION);
|
||||
|
||||
//qN = INT32_TO_FIXEDPT( (INT32)dN );
|
||||
// now add the fractional part
|
||||
@@ -330,6 +327,7 @@ FIXEDPT FloatToFixed( FLOAT dN )
|
||||
return( qN );
|
||||
}
|
||||
|
||||
|
||||
FLOAT FixedToFloat( FIXEDPT qN )
|
||||
{
|
||||
return( ((FLOAT) qN) / FIXEDPT_FRACTIONAL_RESOLUTION );
|
||||
@@ -464,7 +462,7 @@ inline INT8 GetStealth( SOLDIERTYPE* pSoldier )
|
||||
* @param pSoldier
|
||||
* @return ANIM_STAND or ANIM_CROUCH or ANIM_PRONE
|
||||
*/
|
||||
INT8 GetTerrainTypeForGrid( const UINT16& sGridNo )
|
||||
INT8 GetTerrainTypeForGrid( const INT32& sGridNo )
|
||||
{
|
||||
if (gpWorldLevelData[sGridNo].ubTerrainID != NO_TERRAIN)
|
||||
{
|
||||
@@ -566,6 +564,9 @@ INT8 GetSightAdjustmentThroughStance( const UINT8& ubStance )
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Figure out how to find out your equipment cost. Big equipment will make you more visible! we could go after the load itself (kg)
|
||||
* TODO: but we still want a backpack to count more than your vest
|
||||
*
|
||||
* Calculates a percentage value to be added (or substracted) from sight. it's based on the amount of LBE.
|
||||
*
|
||||
* @param pSoldier the target
|
||||
@@ -688,7 +689,7 @@ INT8 GetSightAdjustmentBehindStructure( const INT16& iRange, STRUCTURE* pStructu
|
||||
/*
|
||||
* Easy way to get all sight adjustments into one that affect a soldier
|
||||
*/
|
||||
INT16 GetSightAdjustment( SOLDIERTYPE* pSoldier, INT16 sGridNo, INT8 bStance )
|
||||
INT16 GetSightAdjustment( SOLDIERTYPE* pSoldier, INT32 sGridNo, INT8 bStance )
|
||||
{
|
||||
if (sGridNo == -1) {
|
||||
sGridNo = pSoldier->sGridNo;
|
||||
@@ -782,9 +783,9 @@ BOOLEAN ResolveHitOnWall( STRUCTURE * pStructure, INT32 iGridNo, INT8 bLOSIndexX
|
||||
// if no wall of same orientation there, let bullet through
|
||||
if ( fTopRight )
|
||||
{
|
||||
if (!WallOrClosedDoorExistsOfTopRightOrientation( (INT16) (iGridNo + DirectionInc( SOUTH )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopLeftOrientation( (INT16) (iGridNo) ) &&
|
||||
!OpenRightOrientedDoorWithDoorOnRightOfEdgeExists( (INT16) (iGridNo + DirectionInc( SOUTH )) ) )
|
||||
if (!WallOrClosedDoorExistsOfTopRightOrientation( (iGridNo + DirectionInc( SOUTH )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopLeftOrientation( (iGridNo) ) &&
|
||||
!OpenRightOrientedDoorWithDoorOnRightOfEdgeExists( (iGridNo + DirectionInc( SOUTH )) ) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -796,9 +797,9 @@ BOOLEAN ResolveHitOnWall( STRUCTURE * pStructure, INT32 iGridNo, INT8 bLOSIndexX
|
||||
{
|
||||
if ( fTopLeft )
|
||||
{
|
||||
if ( !WallOrClosedDoorExistsOfTopLeftOrientation( (INT16) (iGridNo + DirectionInc( WEST )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopRightOrientation( (INT16) (iGridNo + DirectionInc( SOUTHWEST ) ) ) &&
|
||||
!OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( (INT16) (iGridNo + DirectionInc( WEST )) ) )
|
||||
if ( !WallOrClosedDoorExistsOfTopLeftOrientation( (iGridNo + DirectionInc( WEST )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopRightOrientation( (iGridNo + DirectionInc( SOUTHWEST ) ) ) &&
|
||||
!OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( (iGridNo + DirectionInc( WEST )) ) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -811,9 +812,9 @@ BOOLEAN ResolveHitOnWall( STRUCTURE * pStructure, INT32 iGridNo, INT8 bLOSIndexX
|
||||
{
|
||||
if ( fTopLeft )
|
||||
{
|
||||
if ( !WallOrClosedDoorExistsOfTopLeftOrientation( (INT16) (iGridNo + DirectionInc( EAST )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopRightOrientation( (INT16) (iGridNo) ) &&
|
||||
!OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( (INT16) (iGridNo + DirectionInc( EAST )) ) )
|
||||
if ( !WallOrClosedDoorExistsOfTopLeftOrientation( (iGridNo + DirectionInc( EAST )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopRightOrientation( (iGridNo) ) &&
|
||||
!OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( (iGridNo + DirectionInc( EAST )) ) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -831,9 +832,9 @@ BOOLEAN ResolveHitOnWall( STRUCTURE * pStructure, INT32 iGridNo, INT8 bLOSIndexX
|
||||
}
|
||||
else if ( fTopRight )
|
||||
{
|
||||
if ( !WallOrClosedDoorExistsOfTopLeftOrientation( (INT16) (iGridNo + DirectionInc( NORTHEAST )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopRightOrientation( (INT16) (iGridNo + DirectionInc( NORTH ) ) ) &&
|
||||
!OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( (INT16) (iGridNo + DirectionInc( NORTHEAST )) ) )
|
||||
if ( !WallOrClosedDoorExistsOfTopLeftOrientation( (iGridNo + DirectionInc( NORTHEAST )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopRightOrientation( (iGridNo + DirectionInc( NORTH ) ) ) &&
|
||||
!OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( (iGridNo + DirectionInc( NORTHEAST )) ) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -859,8 +860,8 @@ BOOLEAN ResolveHitOnWall( STRUCTURE * pStructure, INT32 iGridNo, INT8 bLOSIndexX
|
||||
// if no wall of same orientation there, let bullet through
|
||||
if ( fTopRight )
|
||||
{
|
||||
if (!WallOrClosedDoorExistsOfTopRightOrientation( (INT16) (iGridNo + DirectionInc( NORTH )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopLeftOrientation( (INT16) (iGridNo + DirectionInc( NORTH )) ) )
|
||||
if (!WallOrClosedDoorExistsOfTopRightOrientation( (iGridNo + DirectionInc( NORTH )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopLeftOrientation( (iGridNo + DirectionInc( NORTH )) ) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -881,8 +882,8 @@ BOOLEAN ResolveHitOnWall( STRUCTURE * pStructure, INT32 iGridNo, INT8 bLOSIndexX
|
||||
// if no wall of same orientation there, let bullet through
|
||||
if ( fTopLeft )
|
||||
{
|
||||
if (!WallOrClosedDoorExistsOfTopLeftOrientation( (INT16) (iGridNo + DirectionInc( WEST )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopRightOrientation( (INT16) (iGridNo + DirectionInc( WEST )) ) )
|
||||
if (!WallOrClosedDoorExistsOfTopLeftOrientation( (iGridNo + DirectionInc( WEST )) ) &&
|
||||
!WallOrClosedDoorExistsOfTopRightOrientation( (iGridNo + DirectionInc( WEST )) ) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -895,10 +896,10 @@ BOOLEAN ResolveHitOnWall( STRUCTURE * pStructure, INT32 iGridNo, INT8 bLOSIndexX
|
||||
{
|
||||
if ( (bLocation == LOC_3_4 && fTopLeft) || (bLocation == LOC_4_3 && fTopRight) || (bLocation == LOC_4_4) )
|
||||
{
|
||||
if ( !WallOrClosedDoorExistsOfTopLeftOrientation( (INT16) (iGridNo + DirectionInc( EAST ) ) ) &&
|
||||
!WallOrClosedDoorExistsOfTopRightOrientation( (INT16) (iGridNo + DirectionInc( SOUTH ) ) ) &&
|
||||
!OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( (INT16) (iGridNo + DirectionInc( EAST ) ) ) &&
|
||||
!OpenRightOrientedDoorWithDoorOnRightOfEdgeExists( (INT16) (iGridNo + DirectionInc( SOUTH ) ) )
|
||||
if ( !WallOrClosedDoorExistsOfTopLeftOrientation( (iGridNo + DirectionInc( EAST ) ) ) &&
|
||||
!WallOrClosedDoorExistsOfTopRightOrientation( (iGridNo + DirectionInc( SOUTH ) ) ) &&
|
||||
!OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( (iGridNo + DirectionInc( EAST ) ) ) &&
|
||||
!OpenRightOrientedDoorWithDoorOnRightOfEdgeExists( (iGridNo + DirectionInc( SOUTH ) ) )
|
||||
)
|
||||
{
|
||||
return( FALSE );
|
||||
@@ -1068,7 +1069,7 @@ BOOLEAN ResolveHitOnWall( STRUCTURE * pStructure, INT32 iGridNo, INT8 bLOSIndexX
|
||||
* - stops at other obstacles
|
||||
*
|
||||
*/
|
||||
INT32 LineOfSightTest( FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, int iTileSightLimit, INT8 bAware, BOOLEAN fSmell, INT16 * psWindowGridNo, bool adjustForSight = true )
|
||||
INT32 LineOfSightTest( FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, int iTileSightLimit, INT8 bAware, BOOLEAN fSmell, INT32 * psWindowGridNo, bool adjustForSight = true )
|
||||
{
|
||||
// Parameters...
|
||||
// the X,Y,Z triplets should be obvious
|
||||
@@ -1316,13 +1317,14 @@ INT32 LineOfSightTest( FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX,
|
||||
|
||||
// retrieve values from world for this particular tile
|
||||
iGridNo = iCurrTileX + iCurrTileY * WORLD_COLS;
|
||||
|
||||
pMapElement = &(gpWorldLevelData[ iGridNo ]);
|
||||
qLandHeight = INT32_TO_FIXEDPT( CONVERT_PIXELS_TO_HEIGHTUNITS( pMapElement->sHeight ) );
|
||||
qWallHeight = gqStandardWallHeight + qLandHeight;
|
||||
|
||||
if (fCheckForRoof)
|
||||
{
|
||||
pRoofStructure = FindStructure( (INT16) iGridNo, STRUCTURE_ROOF );
|
||||
pRoofStructure = FindStructure( iGridNo, STRUCTURE_ROOF );
|
||||
|
||||
if ( pRoofStructure )
|
||||
{
|
||||
@@ -1619,10 +1621,10 @@ INT32 LineOfSightTest( FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX,
|
||||
{
|
||||
// we're supposed to note the location of this window!
|
||||
// but if a location has already been set then there are two windows, in which case
|
||||
// we abort
|
||||
if (*psWindowGridNo == NOWHERE)
|
||||
// we abort
|
||||
if (TileIsOutOfBounds(*psWindowGridNo))
|
||||
{
|
||||
*psWindowGridNo = (INT16) iGridNo;
|
||||
*psWindowGridNo = iGridNo;
|
||||
return( iLoop );
|
||||
}
|
||||
else
|
||||
@@ -1996,8 +1998,6 @@ BOOLEAN CalculateSoldierZPos( SOLDIERTYPE * pSoldier, UINT8 ubPosType, FLOAT * p
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
// this is the only function which actually uses the SightAdjustment directly, as it knows that you want to point to a soldier and therefore it can
|
||||
// calculate all stealthy stuff of that soldier so the "start soldier" cant see him that good
|
||||
INT32 SoldierToSoldierLineOfSightTest( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier, INT8 bAware, int iTileSightLimit, UINT8 ubAimLocation, bool adjustForSight )
|
||||
{
|
||||
FLOAT dStartZPos, dEndZPos;
|
||||
@@ -2131,11 +2131,12 @@ INT32 SoldierToSoldierLineOfSightTest( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE
|
||||
return( LineOfSightTest( (FLOAT) CenterX( pStartSoldier->sGridNo ), (FLOAT) CenterY( pStartSoldier->sGridNo ), dStartZPos, (FLOAT) CenterX( pEndSoldier->sGridNo ), (FLOAT) CenterY( pEndSoldier->sGridNo ), dEndZPos, iTileSightLimit, bAware, fSmell, NULL, adjustForSight ) );
|
||||
}
|
||||
|
||||
INT16 SoldierToLocationWindowTest( SOLDIERTYPE * pStartSoldier, INT16 sEndGridNo )
|
||||
INT32 SoldierToLocationWindowTest( SOLDIERTYPE * pStartSoldier, INT32 sEndGridNo )
|
||||
{
|
||||
// figure out if there is a SINGLE window between the looker and target
|
||||
FLOAT dStartZPos, dEndZPos;
|
||||
INT16 sXPos, sYPos, sWindowGridNo = NOWHERE;
|
||||
INT16 sXPos, sYPos;
|
||||
INT32 sWindowGridNo = NOWHERE;
|
||||
INT32 iRet;
|
||||
|
||||
CHECKF( pStartSoldier );
|
||||
@@ -2159,7 +2160,7 @@ INT16 SoldierToLocationWindowTest( SOLDIERTYPE * pStartSoldier, INT16 sEndGridNo
|
||||
return( sWindowGridNo );
|
||||
}
|
||||
|
||||
INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT16 sGridNo, INT8 bLevel, INT8 bCubeLevel, INT8 bAware, int iTileSightLimit, bool adjustForSight )
|
||||
INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, INT8 bAware, int iTileSightLimit, bool adjustForSight )
|
||||
{
|
||||
FLOAT dStartZPos, dEndZPos;
|
||||
INT16 sXPos, sYPos;
|
||||
@@ -2205,7 +2206,7 @@ INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT16 sGr
|
||||
return( LineOfSightTest( (FLOAT) CenterX( pStartSoldier->sGridNo ), (FLOAT) CenterY( pStartSoldier->sGridNo ), dStartZPos, (FLOAT) sXPos, (FLOAT) sYPos, dEndZPos, iTileSightLimit, bAware, HasThermalOptics( pStartSoldier), NULL, adjustForSight ) );
|
||||
}
|
||||
|
||||
INT32 SoldierToVirtualSoldierLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT16 sGridNo, INT8 bLevel, INT8 bStance, INT8 bAware, int iTileSightLimit )
|
||||
INT32 SoldierToVirtualSoldierLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bStance, INT8 bAware, int iTileSightLimit )
|
||||
{
|
||||
FLOAT dStartZPos, dEndZPos;
|
||||
INT16 sXPos, sYPos;
|
||||
@@ -2237,6 +2238,7 @@ INT32 SoldierToVirtualSoldierLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT16
|
||||
dEndZPos += WALL_HEIGHT_UNITS;
|
||||
}
|
||||
|
||||
|
||||
ConvertGridNoToXY( sGridNo, &sXPos, &sYPos );
|
||||
sXPos = sXPos * CELL_X_SIZE + (CELL_X_SIZE / 2);
|
||||
sYPos = sYPos * CELL_Y_SIZE + (CELL_Y_SIZE / 2);
|
||||
@@ -2251,7 +2253,7 @@ INT32 SoldierToVirtualSoldierLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT16
|
||||
return( LineOfSightTest( (FLOAT) CenterX( pStartSoldier->sGridNo ), (FLOAT) CenterY( pStartSoldier->sGridNo ), dStartZPos, (FLOAT) sXPos, (FLOAT) sYPos, dEndZPos, iTileSightLimit, bAware, HasThermalOptics( pStartSoldier), NULL, false ) );
|
||||
}
|
||||
|
||||
INT32 LocationToLocationLineOfSightTest( INT16 sStartGridNo, INT8 bStartLevel, INT16 sEndGridNo, INT8 bEndLevel, INT8 bAware, int iTileSightLimit )
|
||||
INT32 LocationToLocationLineOfSightTest( INT32 sStartGridNo, INT8 bStartLevel, INT32 sEndGridNo, INT8 bEndLevel, INT8 bAware, int iTileSightLimit )
|
||||
{
|
||||
FLOAT dStartZPos, dEndZPos;
|
||||
INT16 sStartXPos, sStartYPos, sEndXPos, sEndYPos;
|
||||
@@ -2305,7 +2307,7 @@ BOOLEAN BulletHitMerc( BULLET * pBullet, STRUCTURE * pStructure, BOOLEAN fIntend
|
||||
{
|
||||
INT32 iImpact, iDamage;
|
||||
EV_S_WEAPONHIT SWeaponHit;
|
||||
INT16 sRange;
|
||||
INT32 sRange;
|
||||
SOLDIERTYPE * pFirer = pBullet->pFirer;
|
||||
FLOAT dZPosRelToMerc;
|
||||
UINT8 ubHitLocation = AIM_SHOT_RANDOM;
|
||||
@@ -2318,7 +2320,7 @@ BOOLEAN BulletHitMerc( BULLET * pBullet, STRUCTURE * pStructure, BOOLEAN fIntend
|
||||
INT8 bSlot;
|
||||
INT8 bHeadSlot = NO_SLOT;
|
||||
SOLDIERTYPE * pTarget;
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
BOOLEAN fCanSpewBlood = FALSE;
|
||||
INT8 bSpewBloodLevel;
|
||||
|
||||
@@ -2497,7 +2499,7 @@ BOOLEAN BulletHitMerc( BULLET * pBullet, STRUCTURE * pStructure, BOOLEAN fIntend
|
||||
}
|
||||
|
||||
// Determine damage, checking guy's armour, etc
|
||||
sRange = (INT16)GetRangeInCellCoordsFromGridNoDiff( pFirer->sGridNo, pTarget->sGridNo );
|
||||
sRange = GetRangeInCellCoordsFromGridNoDiff( pFirer->sGridNo, pTarget->sGridNo );
|
||||
if ( gTacticalStatus.uiFlags & GODMODE && !(pFirer->flags.uiStatusFlags & SOLDIER_PC))
|
||||
{
|
||||
// in god mode, and firer is computer controlled
|
||||
@@ -2707,7 +2709,7 @@ BOOLEAN BulletHitMerc( BULLET * pBullet, STRUCTURE * pStructure, BOOLEAN fIntend
|
||||
// get a new gridno based on direction it was moving. Check to see if we're not
|
||||
// going through walls, etc by testing for a path, unless on the roof, in which case it would always
|
||||
// be legal, but the bLevel May change...
|
||||
sNewGridNo = NewGridNo( (INT16)pBullet->sGridNo, DirectionInc( gOppositeDirection[ SWeaponHit.usDirection ] ) );
|
||||
sNewGridNo = NewGridNo( pBullet->sGridNo, DirectionInc( gOppositeDirection[ SWeaponHit.usDirection ] ) );
|
||||
|
||||
bSpewBloodLevel = MercPtrs[ SWeaponHit.usSoldierID ]->pathing.bLevel;
|
||||
fCanSpewBlood = TRUE;
|
||||
@@ -2723,7 +2725,7 @@ BOOLEAN BulletHitMerc( BULLET * pBullet, STRUCTURE * pStructure, BOOLEAN fIntend
|
||||
else
|
||||
{
|
||||
// If a roof does not exist here, make level = 0
|
||||
if ( !IsRoofPresentAtGridno( sNewGridNo ) )
|
||||
if ( !IsRoofPresentAtGridNo( sNewGridNo ) )
|
||||
{
|
||||
bSpewBloodLevel = 0;
|
||||
}
|
||||
@@ -2763,7 +2765,7 @@ void BulletHitStructure( BULLET * pBullet, UINT16 usStructureID, INT32 iImpact,
|
||||
StructureHit( SStructureHit.iBullet, SStructureHit.usWeaponIndex, SStructureHit.bWeaponStatus, SStructureHit.ubAttackerID, SStructureHit.sXPos, SStructureHit.sYPos, SStructureHit.sZPos, SStructureHit.usStructureID, SStructureHit.iImpact, fStopped );
|
||||
}
|
||||
|
||||
void BulletHitWindow( BULLET *pBullet, INT16 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth )
|
||||
void BulletHitWindow( BULLET *pBullet, INT32 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth )
|
||||
{
|
||||
if (is_networked)
|
||||
{
|
||||
@@ -3236,7 +3238,7 @@ UINT8 CalcChanceToGetThrough( BULLET * pBullet )
|
||||
{
|
||||
// could hit this corpse!
|
||||
// but we should ignore the corpse if there is someone standing there
|
||||
if ( FindStructure( (INT16) iGridNo, STRUCTURE_PERSON ) == NULL )
|
||||
if ( FindStructure( iGridNo, STRUCTURE_PERSON ) == NULL )
|
||||
{
|
||||
gpLocalStructure[iNumLocalStructures] = pStructure;
|
||||
iNumLocalStructures++;
|
||||
@@ -3594,7 +3596,7 @@ UINT8 SoldierToSoldierBodyPartChanceToGetThrough( SOLDIERTYPE * pStartSoldier, S
|
||||
return( ChanceToGetThrough( pStartSoldier, (FLOAT) CenterX( pEndSoldier->sGridNo ), (FLOAT) CenterY( pEndSoldier->sGridNo ), dEndZPos ) );
|
||||
}
|
||||
|
||||
UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT16 sGridNo, INT8 bLevel, INT8 bCubeLevel, UINT8 ubTargetID )
|
||||
UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, UINT8 ubTargetID )
|
||||
{
|
||||
FLOAT dEndZPos;
|
||||
INT16 sXPos;
|
||||
@@ -3678,7 +3680,7 @@ UINT8 AISoldierToSoldierChanceToGetThrough( SOLDIERTYPE * pStartSoldier, SOLDIER
|
||||
return( ubChance );
|
||||
}
|
||||
|
||||
UINT8 AISoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT16 sGridNo, INT8 bLevel, INT8 bCubeLevel )
|
||||
UINT8 AISoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel )
|
||||
{
|
||||
FLOAT dEndZPos;
|
||||
INT16 sXPos;
|
||||
@@ -3841,7 +3843,6 @@ void CalculateFiringIncrementsSimple( DOUBLE ddHorizAngle, DOUBLE ddVerticAngle,
|
||||
pBullet->qIncrY = FloatToFixed( (FLOAT) sin( ddHorizAngle ) );
|
||||
pBullet->qIncrZ = FloatToFixed( (FLOAT) ( sin( ddVerticAngle ) / sin( (PI/2) - ddVerticAngle ) * 2.56 ) );
|
||||
}
|
||||
|
||||
INT8 FireBullet( SOLDIERTYPE * pFirer, BULLET * pBullet, BOOLEAN fFake )
|
||||
{
|
||||
//DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("FireBullet"));
|
||||
@@ -4054,8 +4055,6 @@ INT8 FireBulletGivenTarget( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOA
|
||||
}
|
||||
|
||||
ubImpact =(UINT8) GetDamage(&pFirer->inv[pFirer->ubAttackingHand]);
|
||||
|
||||
|
||||
//zilpin: pellet spread patterns externalized in XML
|
||||
/* zilpin: The section below, including line comments, is the original adjustment made to multiple projectile stats.
|
||||
Left in comments for reference, but the new handling is after it.
|
||||
@@ -4524,7 +4523,7 @@ void MoveBullet( INT32 iBullet )
|
||||
// check a particular tile
|
||||
// retrieve values from world for this particular tile
|
||||
iGridNo = pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS;
|
||||
if (!GridNoOnVisibleWorldTile( (INT16) iGridNo ) || (pBullet->iCurrCubesZ > PROFILE_Z_SIZE * 2 && FIXEDPT_TO_INT32( pBullet->qIncrZ ) > 0 ) )
|
||||
if (!GridNoOnVisibleWorldTile( iGridNo ) || (pBullet->iCurrCubesZ > PROFILE_Z_SIZE * 2 && FIXEDPT_TO_INT32( pBullet->qIncrZ ) > 0 ) )
|
||||
{
|
||||
// bullet outside of world!
|
||||
// NB remove bullet only flags a bullet for deletion; we still have access to the
|
||||
@@ -4760,7 +4759,7 @@ void MoveBullet( INT32 iBullet )
|
||||
{
|
||||
// could hit this corpse!
|
||||
// but ignore if someone is here
|
||||
if ( FindStructure( (INT16) iGridNo, STRUCTURE_PERSON ) == NULL )
|
||||
if ( FindStructure( iGridNo, STRUCTURE_PERSON ) == NULL )
|
||||
{
|
||||
gpLocalStructure[iNumLocalStructures] = pStructure;
|
||||
iNumLocalStructures++;
|
||||
@@ -4814,7 +4813,7 @@ void MoveBullet( INT32 iBullet )
|
||||
|
||||
if ( gubWorldMovementCosts[ iAdjGridNo ][ bDir ][ sDesiredLevel ] < TRAVELCOST_BLOCKED)
|
||||
{
|
||||
ubTargetID = WhoIsThere2( (INT16) iAdjGridNo, (INT8) sDesiredLevel );
|
||||
ubTargetID = WhoIsThere2( iAdjGridNo, (INT8) sDesiredLevel );
|
||||
if (ubTargetID != NOBODY)
|
||||
{
|
||||
pTarget = MercPtrs[ ubTargetID ];
|
||||
@@ -4934,7 +4933,10 @@ void MoveBullet( INT32 iBullet )
|
||||
{
|
||||
if (pBullet->qCurrZ + pBullet->qIncrZ * iStepsToTravel < qLandHeight)
|
||||
{
|
||||
iStepsToTravel = __min( iStepsToTravel, abs( (pBullet->qCurrZ - qLandHeight) / pBullet->qIncrZ ) );
|
||||
// WANNE - BMP: BUGFIX: Had to change abs to _abs64 because FIXEDPT is now INT64
|
||||
//iStepsToTravel = __min( iStepsToTravel, abs( (pBullet->qCurrZ - qLandHeight) / pBullet->qIncrZ ) );
|
||||
iStepsToTravel = __min( iStepsToTravel, _abs64( (pBullet->qCurrZ - qLandHeight) / pBullet->qIncrZ ) );
|
||||
|
||||
pBullet->qCurrX += pBullet->qIncrX * iStepsToTravel;
|
||||
pBullet->qCurrY += pBullet->qIncrY * iStepsToTravel;
|
||||
pBullet->qCurrZ += pBullet->qIncrZ * iStepsToTravel;
|
||||
@@ -5058,7 +5060,7 @@ void MoveBullet( INT32 iBullet )
|
||||
CreateItem( pBullet->fromItem, (INT8) pBullet->ubItemStatus, &Object );
|
||||
|
||||
// by default knife at same tile as window
|
||||
iKnifeGridNo = (INT16) iGridNo;
|
||||
iKnifeGridNo = iGridNo;
|
||||
|
||||
if (pStructure->ubWallOrientation == INSIDE_TOP_RIGHT || pStructure->ubWallOrientation == OUTSIDE_TOP_RIGHT)
|
||||
{
|
||||
@@ -5086,11 +5088,11 @@ void MoveBullet( INT32 iBullet )
|
||||
|
||||
if ( sDesiredLevel == STRUCTURE_ON_GROUND )
|
||||
{
|
||||
AddItemToPool( (INT16) iKnifeGridNo, &Object, -1, 0, 0, 0 );
|
||||
AddItemToPool( iKnifeGridNo, &Object, -1, 0, 0, 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
AddItemToPool( (INT16) iKnifeGridNo, &Object, -1, 0, 1, 0 );
|
||||
AddItemToPool( iKnifeGridNo, &Object, -1, 0, 1, 0 );
|
||||
}
|
||||
|
||||
// Make team look for items
|
||||
@@ -5108,14 +5110,14 @@ void MoveBullet( INT32 iBullet )
|
||||
{
|
||||
if ( pBullet->qIncrX > 0)
|
||||
{
|
||||
BulletHitWindow( pBullet, (INT16) (pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS), pStructure->usStructureID, TRUE );
|
||||
BulletHitWindow( pBullet, (pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS), pStructure->usStructureID, TRUE );
|
||||
LocateBullet( pBullet->iBullet );
|
||||
// have to remove this window from future hit considerations so the deleted structure data can't be referenced!
|
||||
gpLocalStructure[ iStructureLoop ] = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
BulletHitWindow( pBullet, (INT16) (pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS), pStructure->usStructureID, FALSE );
|
||||
BulletHitWindow( pBullet, (pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS), pStructure->usStructureID, FALSE );
|
||||
LocateBullet( pBullet->iBullet );
|
||||
gpLocalStructure[ iStructureLoop ] = NULL;
|
||||
}
|
||||
@@ -5124,13 +5126,13 @@ void MoveBullet( INT32 iBullet )
|
||||
{
|
||||
if (pBullet->qIncrY > 0)
|
||||
{
|
||||
BulletHitWindow( pBullet, (INT16) (pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS), pStructure->usStructureID, TRUE );
|
||||
BulletHitWindow( pBullet, (pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS), pStructure->usStructureID, TRUE );
|
||||
LocateBullet( pBullet->iBullet );
|
||||
gpLocalStructure[ iStructureLoop ] = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
BulletHitWindow( pBullet, (INT16) (pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS), pStructure->usStructureID, FALSE );
|
||||
BulletHitWindow( pBullet, (pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS), pStructure->usStructureID, FALSE );
|
||||
LocateBullet( pBullet->iBullet );
|
||||
gpLocalStructure[ iStructureLoop ] = NULL;
|
||||
}
|
||||
@@ -5164,7 +5166,7 @@ void MoveBullet( INT32 iBullet )
|
||||
// ATE: In enemy territory here... ;)
|
||||
// Now that we have hit a corpse, make the bugger twich!
|
||||
|
||||
CorpseHit( (INT16)pBullet->sGridNo, pStructure->usStructureID );
|
||||
CorpseHit( pBullet->sGridNo, pStructure->usStructureID );
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("@@@@@@@ Reducing attacker busy count..., CORPSE HIT") );
|
||||
|
||||
// Moved here to keep ABC >0 as long as possible
|
||||
@@ -5265,7 +5267,7 @@ void MoveBullet( INT32 iBullet )
|
||||
}
|
||||
} while( (pBullet->iCurrTileX == iOldTileX) && (pBullet->iCurrTileY == iOldTileY));
|
||||
|
||||
if ( !GridNoOnVisibleWorldTile( (INT16) (pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS) ) || (pBullet->iCurrCubesZ > PROFILE_Z_SIZE * 2 && FIXEDPT_TO_INT32( pBullet->qIncrZ ) > 0 ) )
|
||||
if ( !GridNoOnVisibleWorldTile( (pBullet->iCurrTileX + pBullet->iCurrTileY * WORLD_COLS) ) || (pBullet->iCurrCubesZ > PROFILE_Z_SIZE * 2 && FIXEDPT_TO_INT32( pBullet->qIncrZ ) > 0 ) )
|
||||
{
|
||||
// bullet outside of world!
|
||||
RemoveBullet( pBullet->iBullet );
|
||||
@@ -5289,7 +5291,7 @@ void MoveBullet( INT32 iBullet )
|
||||
}
|
||||
|
||||
// check to see if bullet is close to target
|
||||
if ( pBullet->pFirer->ubTargetID != NOBODY && !(pBullet->pFirer->flags.uiStatusFlags & SOLDIER_ATTACK_NOTICED) && PythSpacesAway( (INT16) pBullet->sGridNo, (INT16) pBullet->sTargetGridNo ) <= 3 )
|
||||
if ( pBullet->pFirer->ubTargetID != NOBODY && !(pBullet->pFirer->flags.uiStatusFlags & SOLDIER_ATTACK_NOTICED) && PythSpacesAway( pBullet->sGridNo, pBullet->sTargetGridNo ) <= 3 )
|
||||
{
|
||||
pBullet->pFirer->flags.uiStatusFlags |= SOLDIER_ATTACK_NOTICED;
|
||||
}
|
||||
@@ -5334,7 +5336,7 @@ INT32 CheckForCollision( FLOAT dX, FLOAT dY, FLOAT dZ, FLOAT dDeltaX, FLOAT dDel
|
||||
sZ = (INT16)dZ;
|
||||
|
||||
// Check if gridno is in bounds....
|
||||
if ( !GridNoOnVisibleWorldTile( (INT16) (sX + sY * WORLD_COLS) ) )
|
||||
if ( !GridNoOnVisibleWorldTile( sX + sY * WORLD_COLS ) )
|
||||
{
|
||||
// return( COLLISION_NONE );
|
||||
}
|
||||
|
||||
+14
-9
@@ -6,7 +6,12 @@
|
||||
|
||||
// fixed-point arithmetic definitions start here
|
||||
|
||||
typedef INT32 FIXEDPT;
|
||||
// WANNE - BMP: BUGFIX: Replaced INT32 with INT64, because otherwise we would get an overflow on big maps!
|
||||
//typedef INT32 FIXEDPT;
|
||||
typedef INT64 FIXEDPT;
|
||||
|
||||
|
||||
|
||||
// rem 1 signed bit at the top
|
||||
#define FIXEDPT_WHOLE_BITS 11
|
||||
#define FIXEDPT_FRACTIONAL_BITS 20
|
||||
@@ -66,15 +71,15 @@ INT8 FireBulletGivenTarget( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOA
|
||||
#define NO_DISTANCE_LIMIT -3
|
||||
|
||||
INT32 SoldierToSoldierLineOfSightTest( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier, INT8 bAware, int iTileSightLimit = CALC_FROM_ALL_DIRS, UINT8 ubAimLocation = LOS_POS, bool adjustForSight = true );
|
||||
INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT16 sGridNo, INT8 bLevel, INT8 bCubeLevel, INT8 bAware, int ubSightLimit = CALC_FROM_ALL_DIRS, bool adjustForSight = true );
|
||||
INT32 SoldierToVirtualSoldierLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT16 sGridNo, INT8 bLevel, INT8 bStance, INT8 bAware, int iTileSightLimit = CALC_FROM_ALL_DIRS );
|
||||
INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, INT8 bAware, int ubSightLimit = CALC_FROM_ALL_DIRS, bool adjustForSight = true );
|
||||
INT32 SoldierToVirtualSoldierLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bStance, INT8 bAware, int iTileSightLimit = CALC_FROM_ALL_DIRS );
|
||||
UINT8 SoldierToSoldierChanceToGetThrough( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier );
|
||||
UINT8 SoldierToSoldierBodyPartChanceToGetThrough( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier, UINT8 ubAimLocation );
|
||||
UINT8 AISoldierToSoldierChanceToGetThrough( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier );
|
||||
UINT8 AISoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT16 sGridNo, INT8 bLevel, INT8 bCubeLevel );
|
||||
UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT16 sGridNo, INT8 bLevel, INT8 bCubeLevel, UINT8 ubTargetID );
|
||||
INT16 SoldierToLocationWindowTest( SOLDIERTYPE * pStartSoldier, INT16 sEndGridNo );
|
||||
INT32 LocationToLocationLineOfSightTest( INT16 sStartGridNo, INT8 bStartLevel, INT16 sEndGridNo, INT8 bEndLevel, INT8 bAware, int iTileSightLimit = CALC_FROM_ALL_DIRS );
|
||||
UINT8 AISoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel );
|
||||
UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, UINT8 ubTargetID );
|
||||
INT32 SoldierToLocationWindowTest( SOLDIERTYPE * pStartSoldier, INT32 sEndGridNo );
|
||||
INT32 LocationToLocationLineOfSightTest( INT32 sStartGridNo, INT8 bStartLevel, INT32 sEndGridNo, INT8 bEndLevel, INT8 bAware, int iTileSightLimit = CALC_FROM_ALL_DIRS );
|
||||
|
||||
BOOLEAN CalculateSoldierZPos( SOLDIERTYPE * pSoldier, UINT8 ubPosType, FLOAT * pdZPos );
|
||||
|
||||
@@ -167,14 +172,14 @@ void MoveBullet( INT32 iBullet );
|
||||
|
||||
// TODO: public but at the wrong place, the original function deletes the important parts, not sure what it could brake
|
||||
// to be used in conjunction with the camo thing and the "F" key
|
||||
INT8 GetTerrainTypeForGrid( const UINT16& uGridNo );
|
||||
INT8 GetTerrainTypeForGrid( const INT32& uGridNo );
|
||||
|
||||
// check the flat distance adjustment based on your stance
|
||||
// use this to test your view on your surroundings based on your stance
|
||||
INT8 GetSightAdjustmentThroughStance( const UINT8& ubStance );
|
||||
|
||||
// quick way to get all. should be used for all sight line tests with target soldier known
|
||||
INT16 GetSightAdjustment( SOLDIERTYPE* pSoldier, INT16 sGridNo = -1, INT8 bStance = -1 );
|
||||
INT16 GetSightAdjustment( SOLDIERTYPE* pSoldier, INT32 sGridNo = -1, INT8 bStance = -1 );
|
||||
|
||||
//zilpin: pellet spread patterns externalized in XML
|
||||
#define SPREADPATTERN_NAME_SIZE 32
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
|
||||
//CHRISL: MAJOR_MAP_VERSION information moved to worlddef.h by ADB. We're using these values elsewhere and need them
|
||||
// in the header file
|
||||
// SB: new map version, with map dimensions added
|
||||
//#define MAJOR_MAP_VERSION 7.0
|
||||
|
||||
FLOAT gdMajorMapVersion = MAJOR_MAP_VERSION;
|
||||
|
||||
@@ -83,14 +85,14 @@ Version 11 -- Kris -- obsolete May 2, 1998
|
||||
|
||||
//EntryPoints can't be placed on the top two gridnos in a map. So all we do in this case
|
||||
//is return the closest gridno. Returns TRUE if the mapindex changes.
|
||||
BOOLEAN ValidateEntryPointGridNo( INT16 *sGridNo )
|
||||
BOOLEAN ValidateEntryPointGridNo( INT32 *sGridNo )
|
||||
{
|
||||
INT16 sXMapPos, sYMapPos;
|
||||
INT16 sWorldX, sWorldY;
|
||||
INT32 iNewMapX, iNewMapY;
|
||||
INT16 sTopLimit, sBottomLimit;
|
||||
|
||||
if( *sGridNo < 0 )
|
||||
INT32 sTopLimit, sBottomLimit;
|
||||
|
||||
if ( TileIsOutOfBounds( *sGridNo ) )
|
||||
return FALSE; //entry point is non-existant
|
||||
|
||||
ConvertGridNoToXY( *sGridNo, &sXMapPos, &sYMapPos );
|
||||
@@ -114,27 +116,82 @@ BOOLEAN ValidateEntryPointGridNo( INT16 *sGridNo )
|
||||
return FALSE; //already valid
|
||||
}
|
||||
|
||||
*sGridNo = (INT16)MAPROWCOLTOPOS( iNewMapY/10, iNewMapX/10 );
|
||||
*sGridNo = MAPROWCOLTOPOS( iNewMapY/10, iNewMapX/10 );
|
||||
|
||||
return TRUE; //modified
|
||||
}
|
||||
|
||||
void SaveMapInformation( HWFILE fp )
|
||||
//dnl ch42 250909
|
||||
MAPCREATE_STRUCT& MAPCREATE_STRUCT::operator=(const _OLD_MAPCREATE_STRUCT& src)
|
||||
{
|
||||
UINT32 uiBytesWritten;
|
||||
|
||||
gMapInformation.ubMapVersion = MINOR_MAP_VERSION;
|
||||
FileWrite( fp, &gMapInformation, sizeof( MAPCREATE_STRUCT ), &uiBytesWritten );
|
||||
if((void*)this != (void*)&src)
|
||||
{
|
||||
sNorthGridNo = src.sNorthGridNo;
|
||||
sEastGridNo = src.sEastGridNo;
|
||||
sSouthGridNo = src.sSouthGridNo;
|
||||
sWestGridNo = src.sWestGridNo;
|
||||
ubNumIndividuals = src.ubNumIndividuals;
|
||||
ubMapVersion = src.ubMapVersion;
|
||||
ubRestrictedScrollID = src.ubRestrictedScrollID;
|
||||
ubEditorSmoothingType = src.ubEditorSmoothingType;
|
||||
sCenterGridNo = src.sCenterGridNo;
|
||||
sIsolatedGridNo = src.sIsolatedGridNo;
|
||||
}
|
||||
return(*this);
|
||||
}
|
||||
|
||||
void LoadMapInformation( INT8 **hBuffer )
|
||||
BOOLEAN MAPCREATE_STRUCT::Load(INT8** hBuffer, FLOAT dMajorMapVersion)
|
||||
{
|
||||
LOADDATA( &gMapInformation, *hBuffer, sizeof( MAPCREATE_STRUCT ) );
|
||||
//FileRead( hfile, &gMapInformation, sizeof( MAPCREATE_STRUCT ), &uiBytesRead);
|
||||
if(dMajorMapVersion < 7.0)
|
||||
{
|
||||
_OLD_MAPCREATE_STRUCT OldMapInformation;
|
||||
LOADDATA(&OldMapInformation, *hBuffer, sizeof(_OLD_MAPCREATE_STRUCT));
|
||||
*this = OldMapInformation;
|
||||
}
|
||||
else
|
||||
LOADDATA(this, *hBuffer, sizeof(MAPCREATE_STRUCT));
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
BOOLEAN MAPCREATE_STRUCT::Save(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion)
|
||||
{
|
||||
PTR pData = this;
|
||||
UINT32 uiBytesToWrite = sizeof(MAPCREATE_STRUCT);
|
||||
_OLD_MAPCREATE_STRUCT OldMapCreateStruct;
|
||||
if(dMajorMapVersion == VANILLA_MAJOR_MAP_VERSION && ubMinorMapVersion == VANILLA_MINOR_MAP_VERSION)
|
||||
{
|
||||
memset(&OldMapCreateStruct, 0, sizeof(_OLD_MAPCREATE_STRUCT));
|
||||
OldMapCreateStruct.sNorthGridNo = sNorthGridNo;
|
||||
OldMapCreateStruct.sEastGridNo = sEastGridNo;
|
||||
OldMapCreateStruct.sSouthGridNo = sSouthGridNo;
|
||||
OldMapCreateStruct.sWestGridNo = sWestGridNo;
|
||||
OldMapCreateStruct.ubNumIndividuals = (UINT8)ubNumIndividuals;
|
||||
OldMapCreateStruct.ubMapVersion = ubMinorMapVersion;
|
||||
OldMapCreateStruct.ubRestrictedScrollID = ubRestrictedScrollID;
|
||||
OldMapCreateStruct.ubEditorSmoothingType = ubEditorSmoothingType;
|
||||
OldMapCreateStruct.sCenterGridNo = sCenterGridNo;
|
||||
OldMapCreateStruct.sIsolatedGridNo = sIsolatedGridNo;
|
||||
pData = &OldMapCreateStruct;
|
||||
uiBytesToWrite = sizeof(_OLD_MAPCREATE_STRUCT);
|
||||
}
|
||||
UINT32 uiBytesWritten = 0;
|
||||
FileWrite(hFile, pData, uiBytesToWrite, &uiBytesWritten);
|
||||
if(uiBytesToWrite == uiBytesWritten)
|
||||
return(TRUE);
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
void LoadMapInformation(INT8** hBuffer, FLOAT dMajorMapVersion)
|
||||
{
|
||||
gMapInformation.Load(hBuffer, dMajorMapVersion);
|
||||
// ATE: OK, do some handling here for basement level scroll restrictions
|
||||
// Calcuate world scrolling restrictions
|
||||
InitRenderParams( gMapInformation.ubRestrictedScrollID );
|
||||
InitRenderParams(gMapInformation.ubRestrictedScrollID);
|
||||
}
|
||||
|
||||
void SaveMapInformation(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion)
|
||||
{
|
||||
gMapInformation.Save(hFile, dMajorMapVersion, ubMinorMapVersion);
|
||||
}
|
||||
|
||||
//This will automatically update obsolete map versions to the new ones. This will even
|
||||
|
||||
@@ -13,6 +13,8 @@ enum //for use with MAPCREATE_STRUCT.ubEditorSmoothingType
|
||||
SMOOTHING_CAVES
|
||||
};
|
||||
|
||||
//dnl ch42 250909
|
||||
// WANNE - BMP: DONE!
|
||||
typedef struct
|
||||
{
|
||||
//These are the mandatory entry points for a map. If any of the values are -1, then that means that
|
||||
@@ -33,14 +35,34 @@ typedef struct
|
||||
INT16 sCenterGridNo;
|
||||
INT16 sIsolatedGridNo;
|
||||
INT8 bPadding[83]; //I'm sure lots of map info will be added
|
||||
}MAPCREATE_STRUCT; //99 bytes
|
||||
}_OLD_MAPCREATE_STRUCT; //99 bytes
|
||||
|
||||
class MAPCREATE_STRUCT
|
||||
{
|
||||
public:
|
||||
INT32 sNorthGridNo;
|
||||
INT32 sEastGridNo;
|
||||
INT32 sSouthGridNo;
|
||||
INT32 sWestGridNo;
|
||||
INT32 sCenterGridNo;
|
||||
INT32 sIsolatedGridNo;
|
||||
UINT16 ubNumIndividuals;
|
||||
UINT8 ubMapVersion;
|
||||
UINT8 ubRestrictedScrollID;
|
||||
UINT8 ubEditorSmoothingType;
|
||||
public:
|
||||
MAPCREATE_STRUCT& operator=(const _OLD_MAPCREATE_STRUCT& src);
|
||||
BOOLEAN Load(INT8** hBuffer, FLOAT dMajorMapVersion);
|
||||
BOOLEAN Save(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion);
|
||||
};
|
||||
|
||||
extern MAPCREATE_STRUCT gMapInformation;
|
||||
|
||||
void SaveMapInformation( HWFILE fp );
|
||||
void LoadMapInformation( INT8 **hBuffer );
|
||||
void LoadMapInformation(INT8** hBuffer, FLOAT dMajorMapVersion);
|
||||
void SaveMapInformation(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion);
|
||||
|
||||
void ValidateAndUpdateMapVersionIfNecessary();
|
||||
BOOLEAN ValidateEntryPointGridNo( INT16 *sGridNo );
|
||||
BOOLEAN ValidateEntryPointGridNo( INT32 *sGridNo );
|
||||
|
||||
extern BOOLEAN gfWorldLoaded;
|
||||
|
||||
|
||||
@@ -362,7 +362,7 @@ INT8 gbNumHeliSeatsOccupied = 0;
|
||||
BOOLEAN gfFirstGuyDown = FALSE;
|
||||
|
||||
UINT32 uiSoundSample;
|
||||
INT16 gsGridNoSweetSpot;
|
||||
INT32 gsGridNoSweetSpot;
|
||||
INT16 gsHeliXPos;
|
||||
INT16 gsHeliYPos;
|
||||
FLOAT gdHeliZPos;
|
||||
@@ -414,7 +414,7 @@ void AddMercToHeli( UINT8 ubID )
|
||||
}
|
||||
|
||||
|
||||
void StartHelicopterRun( INT16 sGridNoSweetSpot )
|
||||
void StartHelicopterRun( INT32 sGridNoSweetSpot )
|
||||
{
|
||||
INT16 sX, sY;
|
||||
|
||||
@@ -798,7 +798,7 @@ void HandleHeliDrop( )
|
||||
}
|
||||
|
||||
|
||||
void BeginMercEntering( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
void BeginMercEntering( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
ResetHeliSeats( );
|
||||
|
||||
|
||||
@@ -653,7 +653,7 @@ void CheckForValidArrivalSector( )
|
||||
INT16 cnt1, cnt2, sGoodX, sGoodY;
|
||||
UINT8 ubRadius = 4;
|
||||
INT32 leftmost;
|
||||
INT16 sSectorGridNo, sSectorGridNo2;
|
||||
INT32 sSectorGridNo, sSectorGridNo2;
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
BOOLEAN fFound = FALSE;
|
||||
CHAR16 sString[ 1024 ];
|
||||
|
||||
@@ -227,7 +227,7 @@ void PrepareMilitiaForTactical( BOOLEAN fPrepareAll)
|
||||
for (int i=0; i<TOTAL_SOLDIERS; i++)
|
||||
{
|
||||
//CHRISL: What's this assert for?
|
||||
//Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || MercPtrs[i]->sGridNo != NOWHERE);
|
||||
//Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || !TileIsOutOfBounds(MercPtrs[i]->sGridNo));
|
||||
}
|
||||
|
||||
pSector = &SectorInfo[ SECTOR( gWorldSectorX, gWorldSectorY ) ];
|
||||
@@ -284,7 +284,7 @@ void PrepareMilitiaForTactical( BOOLEAN fPrepareAll)
|
||||
for (int i=0; i<TOTAL_SOLDIERS; i++)
|
||||
{
|
||||
//CHRISL: What's this assert for?
|
||||
//Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || MercPtrs[i]->sGridNo != NOWHERE);
|
||||
//Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || !TileIsOutOfBounds(MercPtrs[i]->sGridNo));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1342,8 +1342,8 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
sActionGridNo = FindSpotMaxDistFromOpponents( pTMilitiaSoldier );
|
||||
|
||||
pTMilitiaSoldier->aiData.usNextActionData = sActionGridNo;
|
||||
|
||||
if ( pTMilitiaSoldier->aiData.usNextActionData != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(pTMilitiaSoldier->aiData.usNextActionData))
|
||||
{
|
||||
pTMilitiaSoldier->aiData.bNextAction = AI_ACTION_RUN_AWAY;
|
||||
pTMilitiaSoldier->aiData.usActionData = ANIM_STAND;
|
||||
@@ -1379,7 +1379,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTMilitiaSoldier->bActive) && (pTMilitiaSoldier->bInSector) && (pTMilitiaSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
INT16 sActionGridNo, sGridNo, sAdjustedGridNo;
|
||||
INT32 sActionGridNo, sGridNo, sAdjustedGridNo;
|
||||
UINT8 ubDirection;
|
||||
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
@@ -1460,8 +1460,8 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
INT32 iDummy;
|
||||
|
||||
sActionGridNo = FindBestNearbyCover(pTMilitiaSoldier,pTMilitiaSoldier->aiData.bAIMorale,&iDummy);
|
||||
|
||||
if ( sActionGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sActionGridNo))
|
||||
{
|
||||
// SEND PENDING ACTION
|
||||
pTMilitiaSoldier->aiData.sPendingActionData2 = sActionGridNo;
|
||||
@@ -1577,7 +1577,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
//// set up next action to run away
|
||||
//pTeamSoldier->usNextActionData = FindSpotMaxDistFromOpponents( pTeamSoldier );
|
||||
|
||||
//if ( pTeamSoldier->usNextActionData != NOWHERE )
|
||||
//if ( !TileIsOutOfBounds(pTeamSoldier->usNextActionData) )
|
||||
//{
|
||||
// pTeamSoldier->bNextAction = AI_ACTION_RUN_AWAY;
|
||||
// pTeamSoldier->usActionData = ANIM_STAND;
|
||||
@@ -1588,7 +1588,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
|
||||
pTeamSoldier->aiData.usNextActionData = sActionGridNo;
|
||||
|
||||
if ( pTeamSoldier->aiData.usNextActionData != NOWHERE )
|
||||
if ( !TileIsOutOfBounds(pTeamSoldier->aiData.usNextActionData) )
|
||||
{
|
||||
pTeamSoldier->aiData.bNextAction = AI_ACTION_RUN_AWAY;
|
||||
pTeamSoldier->aiData.usActionData = ANIM_STAND;
|
||||
@@ -1624,7 +1624,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
case( MILCON_MENU_ALL_COMETOME ):
|
||||
{
|
||||
UINT8 cnt, ubDirection;
|
||||
INT16 sActionGridNo, sGridNo, sAdjustedGridNo;
|
||||
INT32 sActionGridNo, sGridNo, sAdjustedGridNo;
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
|
||||
cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID;
|
||||
@@ -1679,7 +1679,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
case( MILCON_MENU_ALL_SPREAD ):
|
||||
{
|
||||
UINT8 cnt;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo;
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
|
||||
cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID;
|
||||
@@ -1781,7 +1781,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
//
|
||||
// pTeamSoldier->usNextActionData = FindBestNearbyCover(pTeamSoldier,pTeamSoldier->bAIMorale,&iDummy);
|
||||
//
|
||||
// //if ( pTeamSoldier->usNextActionData != NOWHERE )
|
||||
// //if ( !TileIsOutOfBounds(pTeamSoldier->usNextActionData) )
|
||||
// {
|
||||
// pTeamSoldier->bNextAction = AI_ACTION_TAKE_COVER;
|
||||
// pTeamSoldier->usActionData = ANIM_STAND;
|
||||
@@ -1803,8 +1803,8 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
// See if we can get there
|
||||
sActionGridNo = FindBestNearbyCover(pTeamSoldier,pTeamSoldier->aiData.bAIMorale,&iDummy);
|
||||
|
||||
if ( sActionGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sActionGridNo))
|
||||
{
|
||||
// SEND PENDING ACTION
|
||||
pTeamSoldier->aiData.sPendingActionData2 = sActionGridNo;
|
||||
@@ -1861,7 +1861,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
// pTeamSoldier->usNextActionData = SearchForItems( pTeamSoldier, 0, pTeamSoldier->inv[HANDPOS].usItem );
|
||||
|
||||
|
||||
// //if ( pTeamSoldier->usNextActionData != NOWHERE )
|
||||
// //if ( !TileIsOutOfBounds(pTeamSoldier->usNextActionData) )
|
||||
// {
|
||||
// pTeamSoldier->bNextAction = AI_ACTION_PICKUP_ITEM;
|
||||
// //pTeamSoldier->usActionData = ANIM_STAND;
|
||||
@@ -2227,7 +2227,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
//
|
||||
// // set up next action to run away
|
||||
// pTMilitiaSoldier->usNextActionData = FindSpotMaxDistFromOpponents( pTMilitiaSoldier );
|
||||
// if ( pTMilitiaSoldier->usNextActionData != NOWHERE )
|
||||
// if ( !TileIsOutOfBounds(pTMilitiaSoldier->usNextActionData) )
|
||||
// {
|
||||
// pTMilitiaSoldier->bNextAction = AI_ACTION_RUN_AWAY;
|
||||
// pTMilitiaSoldier->usActionData = ANIM_STAND;
|
||||
|
||||
+7
-7
@@ -867,13 +867,13 @@ void HourlyMoraleUpdate( void )
|
||||
|
||||
// WANNE: Fix by Headrock: Morale and the ice-cream truck.
|
||||
if (OKToCheckOpinion(pOtherSoldier->ubProfile))
|
||||
{
|
||||
bOpinion = pProfile->bMercOpinion[ pOtherSoldier->ubProfile ];
|
||||
}
|
||||
else
|
||||
{
|
||||
bOpinion = 0;
|
||||
}
|
||||
{
|
||||
bOpinion = pProfile->bMercOpinion[ pOtherSoldier->ubProfile ];
|
||||
}
|
||||
else
|
||||
{
|
||||
bOpinion = 0;
|
||||
}
|
||||
|
||||
if (bOpinion == HATED_OPINION)
|
||||
{
|
||||
|
||||
+154
-142
@@ -185,7 +185,7 @@ void MilitiaChangesSides( void );
|
||||
|
||||
extern void CheckForAlertWhenEnemyDies( SOLDIERTYPE * pDyingSoldier );
|
||||
extern void PlaySoldierFootstepSound( SOLDIERTYPE *pSoldier );
|
||||
extern void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel );
|
||||
extern void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel );
|
||||
extern UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady );
|
||||
|
||||
|
||||
@@ -374,7 +374,7 @@ UINT8 bDefaultTeamRanges[ MAXTEAMS_SP ][ 2 ] =
|
||||
|
||||
COLORVAL bDefaultTeamColors[ MAXTEAMS ] =
|
||||
{
|
||||
FROMRGB( 255, 255, 0 ), // own team: yellow
|
||||
FROMRGB( 255, 255, 0 ),
|
||||
FROMRGB( 255, 0, 0 ),
|
||||
FROMRGB( 255, 0, 255 ),
|
||||
FROMRGB( 0, 255, 0 ),
|
||||
@@ -967,7 +967,7 @@ BOOLEAN ExecuteOverhead( )
|
||||
BOOLEAN fKeepMoving;
|
||||
INT8 bShadeLevel;
|
||||
BOOLEAN fNoAPsForPendingAction;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
STRUCTURE *pStructure;
|
||||
BOOLEAN fHandleAI = FALSE;
|
||||
|
||||
@@ -1158,15 +1158,12 @@ BOOLEAN ExecuteOverhead( )
|
||||
|
||||
// Check for fade out....
|
||||
if ( pSoldier->bVisible == -1 && pSoldier->bLastRenderVisibleValue >= 0 )
|
||||
{
|
||||
if ( pSoldier->sGridNo != NOWHERE )
|
||||
{
|
||||
if (!TileIsOutOfBounds(pSoldier->sGridNo))
|
||||
{
|
||||
pSoldier->ubFadeLevel = gpWorldLevelData[ pSoldier->sGridNo ].pLandHead->ubShadeLevel;
|
||||
}
|
||||
else
|
||||
{
|
||||
int i = 0;
|
||||
}
|
||||
|
||||
pSoldier->flags.fBeginFade = TRUE;
|
||||
pSoldier->sLocationOfFadeStart = pSoldier->sGridNo;
|
||||
|
||||
@@ -1452,12 +1449,12 @@ BOOLEAN ExecuteOverhead( )
|
||||
{
|
||||
// If the two gridnos are not the same, check to see if we can
|
||||
// now go into it
|
||||
if ( sGridNo != (INT16)pSoldier->aiData.uiPendingActionData4 )
|
||||
if ( sGridNo != (pSoldier->aiData.uiPendingActionData4 ))
|
||||
{
|
||||
if ( NewOKDestination( pSoldier, (INT16)pSoldier->aiData.uiPendingActionData4, TRUE, pSoldier->pathing.bLevel ) )
|
||||
if ( NewOKDestination( pSoldier, pSoldier->aiData.uiPendingActionData4, TRUE, pSoldier->pathing.bLevel ) )
|
||||
{
|
||||
// GOTO NEW TILE!
|
||||
SoldierPickupItem( pSoldier, pSoldier->aiData.uiPendingActionData1, (INT16)pSoldier->aiData.uiPendingActionData4, pSoldier->aiData.bPendingActionData3 );
|
||||
SoldierPickupItem( pSoldier, pSoldier->aiData.uiPendingActionData1, pSoldier->aiData.uiPendingActionData4, pSoldier->aiData.bPendingActionData3 );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -1468,12 +1465,12 @@ BOOLEAN ExecuteOverhead( )
|
||||
{
|
||||
//if ( ItemExistsAtLocation( (INT16)( pSoldier->aiData.uiPendingActionData4 ), pSoldier->aiData.uiPendingActionData1, pSoldier->pathing.bLevel ) )
|
||||
{
|
||||
PickPickupAnimation( pSoldier, pSoldier->aiData.uiPendingActionData1, (INT16)( pSoldier->aiData.uiPendingActionData4 ), pSoldier->aiData.bPendingActionData3 );
|
||||
PickPickupAnimation( pSoldier, pSoldier->aiData.uiPendingActionData1, pSoldier->aiData.uiPendingActionData4, pSoldier->aiData.bPendingActionData3 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PickPickupAnimation( pSoldier, pSoldier->aiData.uiPendingActionData1, (INT16)( pSoldier->aiData.uiPendingActionData4 ), pSoldier->aiData.bPendingActionData3 );
|
||||
PickPickupAnimation( pSoldier, pSoldier->aiData.uiPendingActionData1, pSoldier->aiData.uiPendingActionData4, pSoldier->aiData.bPendingActionData3 );
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1633,8 +1630,8 @@ BOOLEAN ExecuteOverhead( )
|
||||
|
||||
// In case this is an AI person with the path-stored flag set,
|
||||
// turn it OFF since we have exhausted our stored path
|
||||
pSoldier->pathing.bPathStored = FALSE;
|
||||
if (pSoldier->sAbsoluteFinalDestination != NOWHERE)
|
||||
pSoldier->pathing.bPathStored = FALSE;
|
||||
if (!TileIsOutOfBounds(pSoldier->sAbsoluteFinalDestination))
|
||||
{
|
||||
// We have not made it to our dest... but it's better to let the AI handle this itself,
|
||||
// on the very next fram
|
||||
@@ -1662,9 +1659,9 @@ BOOLEAN ExecuteOverhead( )
|
||||
{
|
||||
if ( FindBestPath( pSoldier, pSoldier->pathing.sFinalDestination, pSoldier->pathing.bLevel, pSoldier->usUIMovementMode, NO_COPYROUTE, PATH_THROUGH_PEOPLE ) != 0 )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( (UINT8)guiPathingData[ 0 ] ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( (UINT8)guiPathingData[ 0 ] ) );
|
||||
|
||||
SetDelayedTileWaiting( pSoldier, sNewGridNo, 1 );
|
||||
}
|
||||
@@ -1977,7 +1974,7 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
{
|
||||
INT16 sAPCost;
|
||||
INT16 sBPCost;
|
||||
INT16 sNewGridNo, sOverFenceGridNo, sMineGridNo;
|
||||
INT32 usNewGridNo, sOverFenceGridNo, sMineGridNo;
|
||||
|
||||
if (gTacticalStatus.uiFlags & INCOMBAT && fInitialMove )
|
||||
{
|
||||
@@ -2021,10 +2018,10 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
|
||||
}
|
||||
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ] ) );
|
||||
usNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ] ) );
|
||||
|
||||
// OK, check if this is a fence cost....
|
||||
if ( gubWorldMovementCosts[ sNewGridNo ][ (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ] ][ pSoldier->pathing.bLevel ] == TRAVELCOST_FENCE )
|
||||
if ( gubWorldMovementCosts[ usNewGridNo ][ (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ] ][ pSoldier->pathing.bLevel ] == TRAVELCOST_FENCE )
|
||||
{
|
||||
// We have been told to jump fence....
|
||||
|
||||
@@ -2046,7 +2043,7 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
if ( EnoughPoints( pSoldier, sAPCost, sBPCost, FALSE ) )
|
||||
{
|
||||
// ATE: Check for tile being clear....
|
||||
sOverFenceGridNo = NewGridNo( sNewGridNo, DirectionInc( (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex + 1 ] ) );
|
||||
sOverFenceGridNo = NewGridNo( usNewGridNo, DirectionInc( (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex + 1 ] ) );
|
||||
|
||||
if ( HandleNextTile( pSoldier, (INT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex + 1 ], sOverFenceGridNo, pSoldier->pathing.sFinalDestination ) )
|
||||
{
|
||||
@@ -2075,11 +2072,11 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
|
||||
return( FALSE );
|
||||
}
|
||||
else if ( InternalDoorTravelCost( pSoldier, sNewGridNo, gubWorldMovementCosts[ sNewGridNo ][ (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ] ][ pSoldier->pathing.bLevel ], (BOOLEAN) (pSoldier->bTeam == gbPlayerNum), NULL, TRUE ) == TRAVELCOST_DOOR )
|
||||
else if ( InternalDoorTravelCost( pSoldier, usNewGridNo, gubWorldMovementCosts[ usNewGridNo ][ (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ] ][ pSoldier->pathing.bLevel ], (BOOLEAN) (pSoldier->bTeam == gbPlayerNum), NULL, TRUE ) == TRAVELCOST_DOOR )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
INT8 bDirection;
|
||||
INT16 sDoorGridNo;
|
||||
INT32 sDoorGridNo;
|
||||
|
||||
// OK, if we are here, we have been told to get a pth through a door.
|
||||
|
||||
@@ -2093,7 +2090,7 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
// OK, based on the direction, get door gridno
|
||||
if ( bDirection == NORTH || bDirection == WEST )
|
||||
{
|
||||
sDoorGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ] ) );
|
||||
sDoorGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ] ) );
|
||||
}
|
||||
else if ( bDirection == SOUTH || bDirection == EAST )
|
||||
{
|
||||
@@ -2143,11 +2140,11 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
|
||||
|
||||
// Find out how much it takes to move here!
|
||||
sAPCost = ActionPointCost( pSoldier, sNewGridNo, (INT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ], usAnimState );
|
||||
sBPCost = TerrainBreathPoints( pSoldier, sNewGridNo, (INT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ], usAnimState );
|
||||
sAPCost = ActionPointCost( pSoldier, usNewGridNo, (INT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ], usAnimState );
|
||||
sBPCost = TerrainBreathPoints( pSoldier, usNewGridNo, (INT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ], usAnimState );
|
||||
|
||||
// CHECK IF THIS TILE IS A GOOD ONE!
|
||||
if ( !HandleNextTile( pSoldier, (INT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ], sNewGridNo, pSoldier->pathing.sFinalDestination ) )
|
||||
if ( !HandleNextTile( pSoldier, (INT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ], usNewGridNo, pSoldier->pathing.sFinalDestination ) )
|
||||
{
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "HandleGotoNewGridNo() Failed: Tile %d Was blocked", sNewGridNo ) );
|
||||
|
||||
@@ -2164,7 +2161,7 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
|
||||
|
||||
// just check the tile we're going to walk into
|
||||
if ( NearbyGroundSeemsWrong( pSoldier, sNewGridNo, FALSE, (INT16 *) &sMineGridNo ) )
|
||||
if ( NearbyGroundSeemsWrong( pSoldier, usNewGridNo, FALSE, &sMineGridNo ) )
|
||||
{
|
||||
if ( pSoldier->flags.uiStatusFlags & SOLDIER_PC )
|
||||
{
|
||||
@@ -2196,7 +2193,7 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
|
||||
(*pfKeepMoving) = FALSE;
|
||||
|
||||
if (sMineGridNo != NOWHERE)
|
||||
if (!TileIsOutOfBounds(sMineGridNo))
|
||||
{
|
||||
LocateGridNo( sMineGridNo );
|
||||
// we reuse the boobytrap gridno variable here
|
||||
@@ -2207,10 +2204,9 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sMineGridNo != NOWHERE)
|
||||
{
|
||||
if (!TileIsOutOfBounds(sMineGridNo))
|
||||
{
|
||||
|
||||
pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection );
|
||||
(*pfKeepMoving) = FALSE;
|
||||
|
||||
@@ -2226,7 +2222,6 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
// better stop and reconsider what to do...
|
||||
SetNewSituation( pSoldier );
|
||||
ActionDone( pSoldier );
|
||||
|
||||
// HEADROCK HAM 3.6: Militia can now place flags when they spot landmines.
|
||||
if (gGameExternalOptions.fMilitiaPlaceBlueFlags &&
|
||||
pSoldier->bTeam == MILITIA_TEAM)
|
||||
@@ -2283,6 +2278,8 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
INT8 bPosOfMask;
|
||||
|
||||
bPosOfMask = FindGasMask (pSoldier);
|
||||
if(!DoesSoldierWearGasMask(pSoldier))//dnl ch40 200909
|
||||
bPosOfMask = NO_SLOT;
|
||||
//if ( pSoldier->inv[ HEAD1POS ].usItem == GASMASK && pSoldier->inv[ HEAD1POS ][0]->data.objectStatus >= GASMASK_MIN_STATUS )
|
||||
//{
|
||||
// bPosOfMask = HEAD1POS;
|
||||
@@ -2307,7 +2304,7 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
|
||||
if ( gpWorldLevelData[ pSoldier->sGridNo ].ubExtFlags[pSoldier->pathing.bLevel] & MAPELEMENT_EXT_SMOKE )
|
||||
{
|
||||
if ( bPosOfMask == NO_SLOT )
|
||||
if ( bPosOfMask == NO_SLOT && !(pSoldier->flags.fHitByGasFlags & HIT_BY_SMOKEGAS) )//dnl ch40 200909
|
||||
{
|
||||
pExplosive = &( Explosive[ Item[ GetFirstExplosiveOfType(EXPLOSV_SMOKE) ].ubClassIndex ]);
|
||||
}
|
||||
@@ -2393,7 +2390,7 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
}
|
||||
|
||||
if ( (pSoldier->bBlindedCounter > 0) && (pSoldier->usAnimState == RUNNING) && (Random( 5 ) == 0) &&
|
||||
OKFallDirection( pSoldier, (INT16) (pSoldier->sGridNo + DirectionInc( pSoldier->ubDirection ) ), pSoldier->pathing.bLevel, pSoldier->ubDirection, pSoldier->usAnimState ) )
|
||||
OKFallDirection( pSoldier, (pSoldier->sGridNo + DirectionInc( pSoldier->ubDirection ) ), pSoldier->pathing.bLevel, pSoldier->ubDirection, pSoldier->usAnimState ) )
|
||||
{
|
||||
// 20% chance of falling over!
|
||||
pSoldier->DoMercBattleSound( BATTLE_SOUND_CURSE1 );
|
||||
@@ -2406,7 +2403,7 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
return( FALSE );
|
||||
}
|
||||
else if ( ( GetDrunkLevel( pSoldier ) == DRUNK ) && (Random( 5 ) == 0) &&
|
||||
OKFallDirection( pSoldier, (INT16) (pSoldier->sGridNo + DirectionInc( pSoldier->ubDirection ) ), pSoldier->pathing.bLevel, pSoldier->ubDirection, pSoldier->usAnimState ) )
|
||||
OKFallDirection( pSoldier, (pSoldier->sGridNo + DirectionInc( pSoldier->ubDirection ) ), pSoldier->pathing.bLevel, pSoldier->ubDirection, pSoldier->usAnimState ) )
|
||||
{
|
||||
// 20% chance of falling over!
|
||||
pSoldier->DoMercBattleSound( BATTLE_SOUND_CURSE1 );
|
||||
@@ -2524,7 +2521,7 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE
|
||||
|
||||
void HandleMaryArrival( SOLDIERTYPE * pSoldier )
|
||||
{
|
||||
INT16 sDist;
|
||||
INT32 sDist;
|
||||
|
||||
if ( !pSoldier )
|
||||
{
|
||||
@@ -2540,9 +2537,11 @@ void HandleMaryArrival( SOLDIERTYPE * pSoldier )
|
||||
return;
|
||||
}
|
||||
// new requirements: player close by
|
||||
|
||||
// TODO.WANNE: Hardcoded grid number
|
||||
else if (PythSpacesAway( pSoldier->sGridNo, 8228 ) < 40)
|
||||
{
|
||||
if ( ClosestPC( pSoldier, &sDist ) != NOWHERE && sDist > NPC_TALK_RADIUS * 2 )
|
||||
{
|
||||
if ( !TileIsOutOfBounds(ClosestPC( pSoldier, &sDist )) && sDist > NPC_TALK_RADIUS * 2 )
|
||||
{
|
||||
// too far away
|
||||
return;
|
||||
@@ -2561,7 +2560,7 @@ void HandleMaryArrival( SOLDIERTYPE * pSoldier )
|
||||
void HandleJohnArrival( SOLDIERTYPE * pSoldier )
|
||||
{
|
||||
SOLDIERTYPE * pSoldier2 = NULL;
|
||||
INT16 sDist;
|
||||
INT32 sDist;
|
||||
|
||||
if ( !pSoldier )
|
||||
{
|
||||
@@ -2571,10 +2570,11 @@ void HandleJohnArrival( SOLDIERTYPE * pSoldier )
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TODO.WANNE: Hardcoded grid number
|
||||
if (PythSpacesAway( pSoldier->sGridNo, 8228 ) < 40)
|
||||
{
|
||||
if ( ClosestPC( pSoldier, &sDist ) != NOWHERE && sDist > NPC_TALK_RADIUS * 2 )
|
||||
{
|
||||
if (!TileIsOutOfBounds(ClosestPC( pSoldier, &sDist )) && sDist > NPC_TALK_RADIUS * 2 )
|
||||
{
|
||||
// too far away
|
||||
return;
|
||||
@@ -2613,7 +2613,7 @@ void HandleJohnArrival( SOLDIERTYPE * pSoldier )
|
||||
|
||||
BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving )
|
||||
{
|
||||
INT16 sMineGridNo;
|
||||
INT32 sMineGridNo;
|
||||
UINT8 ubVolume;
|
||||
|
||||
|
||||
@@ -2803,8 +2803,8 @@ BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving )
|
||||
}
|
||||
|
||||
(*pfKeepMoving) = FALSE;
|
||||
|
||||
if (sMineGridNo != NOWHERE)
|
||||
|
||||
if (!TileIsOutOfBounds(sMineGridNo))
|
||||
{
|
||||
LocateGridNo( sMineGridNo );
|
||||
// we reuse the boobytrap gridno variable here
|
||||
@@ -2815,8 +2815,8 @@ BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving )
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sMineGridNo != NOWHERE)
|
||||
{
|
||||
if (!TileIsOutOfBounds(sMineGridNo))
|
||||
{
|
||||
|
||||
pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection );
|
||||
@@ -2907,9 +2907,9 @@ BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving )
|
||||
case OLGA:
|
||||
case TYRONE:
|
||||
{
|
||||
INT16 sDesiredMercDist;
|
||||
|
||||
if ( ClosestPC( pSoldier, &sDesiredMercDist ) != NOWHERE )
|
||||
INT32 sDesiredMercDist;
|
||||
|
||||
if (!TileIsOutOfBounds(ClosestPC( pSoldier, &sDesiredMercDist )))
|
||||
{
|
||||
if ( sDesiredMercDist <= NPC_TALK_RADIUS * 2 )
|
||||
{
|
||||
@@ -3185,7 +3185,7 @@ void LocateSoldier( UINT16 usID, BOOLEAN fSetLocator)
|
||||
}
|
||||
|
||||
|
||||
void InternalLocateGridNo( INT16 sGridNo, BOOLEAN fForce )
|
||||
void InternalLocateGridNo( INT32 sGridNo, BOOLEAN fForce )
|
||||
{
|
||||
INT16 sNewCenterWorldX, sNewCenterWorldY;
|
||||
|
||||
@@ -3200,14 +3200,14 @@ void InternalLocateGridNo( INT16 sGridNo, BOOLEAN fForce )
|
||||
SetRenderCenter( sNewCenterWorldX, sNewCenterWorldY );
|
||||
}
|
||||
|
||||
void LocateGridNo( INT16 sGridNo )
|
||||
void LocateGridNo( INT32 sGridNo )
|
||||
{
|
||||
InternalLocateGridNo( sGridNo, FALSE );
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SlideTo(INT16 sGridno, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSetLocator)
|
||||
void SlideTo(INT32 sGridNo, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSetLocator)
|
||||
{
|
||||
INT32 cnt;
|
||||
|
||||
@@ -3248,9 +3248,9 @@ void SlideTo(INT16 sGridno, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSet
|
||||
}
|
||||
|
||||
|
||||
void SlideToLocation( UINT16 usReasonID, INT16 sDestGridNo )
|
||||
{
|
||||
if ( sDestGridNo == NOWHERE )
|
||||
void SlideToLocation( UINT16 usReasonID, INT32 sDestGridNo )
|
||||
{
|
||||
if (TileIsOutOfBounds(sDestGridNo))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -3355,8 +3355,8 @@ void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier )
|
||||
switch( pSoldier->ubProfile )
|
||||
{
|
||||
case SLAY:
|
||||
pTeamSoldier = FindSoldierByProfileID( CARMEN, FALSE );
|
||||
if (pTeamSoldier && pTeamSoldier->aiData.bAttitude == ATTACKSLAYONLY && ClosestPC( pTeamSoldier, NULL ) != NOWHERE )
|
||||
pTeamSoldier = FindSoldierByProfileID( CARMEN, FALSE );
|
||||
if (pTeamSoldier && pTeamSoldier->aiData.bAttitude == ATTACKSLAYONLY && !TileIsOutOfBounds(ClosestPC( pTeamSoldier, NULL )) )
|
||||
{
|
||||
// Carmen now becomes friendly again
|
||||
TriggerNPCRecord( CARMEN, 29 );
|
||||
@@ -4421,10 +4421,10 @@ CHAR8 *GetSceneFilename( )
|
||||
return( gzLevelFilenames[ gubCurrentScene ] );
|
||||
}
|
||||
|
||||
extern BOOLEAN InternalOkayToAddStructureToWorld( INT16 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, INT16 sExclusionID, BOOLEAN fIgnorePeople );
|
||||
extern BOOLEAN InternalOkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, INT16 sExclusionID, BOOLEAN fIgnorePeople );
|
||||
|
||||
// NB if making changes don't forget to update NewOKDestinationAndDirection
|
||||
INT16 NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT16 sGridNo, BOOLEAN fPeopleToo, INT8 bLevel )
|
||||
INT16 NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, BOOLEAN fPeopleToo, INT8 bLevel )
|
||||
{
|
||||
UINT8 bPerson;
|
||||
STRUCTURE * pStructure;
|
||||
@@ -4553,7 +4553,7 @@ INT16 NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT16 sGridNo, BOOLEAN fPeop
|
||||
}
|
||||
|
||||
// NB if making changes don't forget to update NewOKDestination
|
||||
INT16 NewOKDestinationAndDirection( SOLDIERTYPE * pCurrSoldier, INT16 sGridNo, INT8 bDirection, BOOLEAN fPeopleToo, INT8 bLevel )
|
||||
INT16 NewOKDestinationAndDirection( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, INT8 bDirection, BOOLEAN fPeopleToo, INT8 bLevel )
|
||||
{
|
||||
UINT8 bPerson;
|
||||
STRUCTURE * pStructure;
|
||||
@@ -4707,7 +4707,7 @@ BOOLEAN IsLocationSittable( INT32 iMapIndex, BOOLEAN fOnRoof )
|
||||
{
|
||||
STRUCTURE *pStructure;
|
||||
INT16 sDesiredLevel;
|
||||
if( WhoIsThere2( (INT16)iMapIndex, 0 ) != NOBODY )
|
||||
if( WhoIsThere2( iMapIndex, 0 ) != NOBODY )
|
||||
return FALSE;
|
||||
//Locations on roofs without a roof is not possible, so
|
||||
//we convert the onroof intention to ground.
|
||||
@@ -4718,7 +4718,7 @@ BOOLEAN IsLocationSittable( INT32 iMapIndex, BOOLEAN fOnRoof )
|
||||
{
|
||||
// Something is here, check obstruction in future
|
||||
sDesiredLevel = fOnRoof ? STRUCTURE_ON_ROOF : STRUCTURE_ON_GROUND;
|
||||
pStructure = FindStructure( (INT16)iMapIndex, STRUCTURE_BLOCKSMOVES );
|
||||
pStructure = FindStructure( iMapIndex, STRUCTURE_BLOCKSMOVES );
|
||||
while( pStructure )
|
||||
{
|
||||
if( !(pStructure->fFlags & STRUCTURE_PASSABLE) && pStructure->sCubeOffset == sDesiredLevel )
|
||||
@@ -4744,7 +4744,7 @@ BOOLEAN IsLocationSittableExcludingPeople( INT32 iMapIndex, BOOLEAN fOnRoof )
|
||||
{
|
||||
// Something is here, check obstruction in future
|
||||
sDesiredLevel = fOnRoof ? STRUCTURE_ON_ROOF : STRUCTURE_ON_GROUND;
|
||||
pStructure = FindStructure( (INT16)iMapIndex, STRUCTURE_BLOCKSMOVES );
|
||||
pStructure = FindStructure( iMapIndex, STRUCTURE_BLOCKSMOVES );
|
||||
while( pStructure )
|
||||
{
|
||||
if( !(pStructure->fFlags & STRUCTURE_PASSABLE) && pStructure->sCubeOffset == sDesiredLevel )
|
||||
@@ -4756,7 +4756,7 @@ BOOLEAN IsLocationSittableExcludingPeople( INT32 iMapIndex, BOOLEAN fOnRoof )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN TeamMemberNear(INT8 bTeam, INT16 sGridNo, INT32 iRange)
|
||||
BOOLEAN TeamMemberNear(INT8 bTeam, INT32 sGridNo, INT32 iRange)
|
||||
{
|
||||
UINT8 bLoop;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
@@ -4775,7 +4775,7 @@ BOOLEAN TeamMemberNear(INT8 bTeam, INT16 sGridNo, INT32 iRange)
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
INT16 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pubDirection, INT16 *psAdjustedGridNo, BOOLEAN fForceToPerson, BOOLEAN fDoor )
|
||||
INT32 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pubDirection, INT32 *psAdjustedGridNo, BOOLEAN fForceToPerson, BOOLEAN fDoor )
|
||||
{
|
||||
// psAdjustedGridNo gets the original gridno or the new one if updated
|
||||
// It will ONLY be updated IF we were over a merc, ( it's updated to their gridno )
|
||||
@@ -4784,11 +4784,13 @@ INT16 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pubDirect
|
||||
// in that location, because we could be passed a gridno based on the overlap of soldier's graphic
|
||||
// fDoor determines whether special door-handling code should be used (for interacting with doors)
|
||||
|
||||
INT16 sFourGrids[4], sDistance=0;
|
||||
INT32 sFourGrids[4], sDistance=0;
|
||||
static const UINT8 sDirs[4] = { NORTH, EAST, SOUTH, WEST };
|
||||
//INT32 cnt;
|
||||
INT16 sClosest=NOWHERE, sSpot, sOkTest;
|
||||
INT16 sCloseGridNo=NOWHERE;
|
||||
//INT32 sClosest=NOWHERE, sSpot, sOkTest;
|
||||
INT32 sClosest = MAX_MAP_POS, sSpot, sOkTest; //Lalien: changed to ensure compability with new definition of NOWHERE
|
||||
//INT32 sCloseGridNo=NOWHERE;
|
||||
INT32 sCloseGridNo = MAX_MAP_POS; //Lalien: changed to ensure compability with new definition of NOWHERE
|
||||
UINT32 uiMercFlags;
|
||||
UINT16 usSoldierIndex;
|
||||
UINT8 ubDir;
|
||||
@@ -5003,12 +5005,12 @@ INT16 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pubDirect
|
||||
if ( sDistance < sClosest )
|
||||
{
|
||||
sClosest = sDistance;
|
||||
sCloseGridNo = (INT16)sSpot;
|
||||
sCloseGridNo = sSpot;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sClosest != NOWHERE)
|
||||
|
||||
if ( !TileIsOutOfBounds( sClosest ) )
|
||||
{
|
||||
// Take last direction and use opposite!
|
||||
// This will be usefull for ours and AI mercs
|
||||
@@ -5050,8 +5052,8 @@ INT16 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pubDirect
|
||||
//if ( psAdjustedGridNo != NULL )
|
||||
//{
|
||||
// (*psAdjustedGridNo) = sCloseGridNo;
|
||||
//}
|
||||
if ( sCloseGridNo == NOWHERE )
|
||||
//}
|
||||
if ( TileIsOutOfBounds( sCloseGridNo ) )
|
||||
{
|
||||
return( -1 );
|
||||
}
|
||||
@@ -5062,7 +5064,7 @@ INT16 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pubDirect
|
||||
}
|
||||
|
||||
|
||||
INT16 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pubDirection, INT16 *psAdjustedGridNo, BOOLEAN fForceToPerson, BOOLEAN fDoor )
|
||||
INT32 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pubDirection, INT32 *psAdjustedGridNo, BOOLEAN fForceToPerson, BOOLEAN fDoor )
|
||||
{
|
||||
// This function works in a similar way as FindAdjacentGridEx, but looks for a location 2 tiles away
|
||||
|
||||
@@ -5072,11 +5074,11 @@ INT16 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pub
|
||||
// in that location, because we could be passed a gridno based on the overlap of soldier's graphic
|
||||
// fDoor determines whether special door-handling code should be used (for interacting with doors)
|
||||
|
||||
INT16 sFourGrids[4], sDistance=0;
|
||||
INT32 sFourGrids[4], sDistance=0;
|
||||
static const UINT8 sDirs[4] = { NORTH, EAST, SOUTH, WEST };
|
||||
//INT32 cnt;
|
||||
INT16 sClosest=WORLD_MAX, sSpot, sSpot2, sOkTest;
|
||||
INT16 sCloseGridNo=NOWHERE;
|
||||
INT32 sClosest=WORLD_MAX, sSpot, sSpot2, sOkTest;
|
||||
INT32 sCloseGridNo=NOWHERE;
|
||||
UINT32 uiMercFlags;
|
||||
UINT16 usSoldierIndex;
|
||||
UINT8 ubDir;
|
||||
@@ -5144,7 +5146,7 @@ INT16 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pub
|
||||
if ( sDistance < sClosest )
|
||||
{
|
||||
sClosest = sDistance;
|
||||
sCloseGridNo = (INT16)sGridNo;
|
||||
sCloseGridNo = sGridNo;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5235,12 +5237,12 @@ INT16 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pub
|
||||
if ( sDistance < sClosest )
|
||||
{
|
||||
sClosest = sDistance;
|
||||
sCloseGridNo = (INT16)sSpot;
|
||||
sCloseGridNo = sSpot;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sClosest != NOWHERE)
|
||||
|
||||
if (!TileIsOutOfBounds(sClosest))
|
||||
{
|
||||
// Take last direction and use opposite!
|
||||
// This will be usefull for ours and AI mercs
|
||||
@@ -5279,8 +5281,8 @@ INT16 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pub
|
||||
*pubDirection = ubDir;
|
||||
}
|
||||
}
|
||||
|
||||
if ( sCloseGridNo == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(sCloseGridNo))
|
||||
{
|
||||
return( -1 );
|
||||
}
|
||||
@@ -5292,7 +5294,7 @@ INT16 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pub
|
||||
|
||||
|
||||
/*
|
||||
if (sCloseGridNo != NOWHERE)
|
||||
if ( !TileIsOutOfBounds(sCloseGridNo))
|
||||
{
|
||||
// Take last direction and use opposite!
|
||||
// This will be usefull for ours and AI mercs
|
||||
@@ -5328,9 +5330,9 @@ INT16 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pub
|
||||
*/
|
||||
}
|
||||
|
||||
INT16 FindAdjacentPunchTarget( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTargetSoldier, INT16 * psAdjustedTargetGridNo, UINT8 * pubDirection )
|
||||
INT32 FindAdjacentPunchTarget( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTargetSoldier, INT32 * psAdjustedTargetGridNo, UINT8 * pubDirection )
|
||||
{
|
||||
INT16 sSpot;
|
||||
INT32 sSpot;
|
||||
UINT8 ubGuyThere;
|
||||
|
||||
for ( INT8 cnt = 0; cnt < NUM_WORLD_DIRECTIONS; cnt++ )
|
||||
@@ -5360,12 +5362,12 @@ INT16 FindAdjacentPunchTarget( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTargetSold
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN UIOKMoveDestination( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
BOOLEAN UIOKMoveDestination( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
{
|
||||
BOOLEAN fVisible;
|
||||
|
||||
// Check if a hidden tile exists but is not revealed
|
||||
if ( DoesGridnoContainHiddenStruct( sMapPos, &fVisible ) )
|
||||
if ( DoesGridNoContainHiddenStruct( usMapPos, &fVisible ) )
|
||||
{
|
||||
if ( !fVisible )
|
||||
{
|
||||
@@ -5375,7 +5377,7 @@ BOOLEAN UIOKMoveDestination( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
}
|
||||
|
||||
|
||||
if ( !NewOKDestination( pSoldier, sMapPos, FALSE, (INT8) gsInterfaceLevel ) )
|
||||
if ( !NewOKDestination( pSoldier, usMapPos, FALSE, (INT8) gsInterfaceLevel ) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -5643,8 +5645,8 @@ void CommonEnterCombatModeCode( )
|
||||
{
|
||||
if ( pSoldier->bTeam == CIV_TEAM && pSoldier->aiData.bNeutral )
|
||||
{
|
||||
// only set precombat gridno if unset
|
||||
if ( gMercProfiles[ pSoldier->ubProfile ].sPreCombatGridNo == 0 || gMercProfiles[ pSoldier->ubProfile ].sPreCombatGridNo == NOWHERE )
|
||||
// only set precombat gridno if unset
|
||||
if ( gMercProfiles[ pSoldier->ubProfile ].sPreCombatGridNo == 0 || TileIsOutOfBounds(gMercProfiles[ pSoldier->ubProfile ].sPreCombatGridNo))
|
||||
{
|
||||
gMercProfiles[ pSoldier->ubProfile ].sPreCombatGridNo = pSoldier->sGridNo;
|
||||
}
|
||||
@@ -6229,41 +6231,46 @@ BOOLEAN CheckForEndOfCombatMode( BOOLEAN fIncrementTurnsNotSeen )
|
||||
void DeathNoMessageTimerCallback( void )
|
||||
{
|
||||
//CheckAndHandleUnloadingOfCurrentWorld();
|
||||
if(!is_client)CheckAndHandleUnloadingOfCurrentWorld();
|
||||
if(!is_client)
|
||||
CheckAndHandleUnloadingOfCurrentWorld();
|
||||
else
|
||||
{
|
||||
ScreenMsg( FONT_LTGREEN, MSG_CHAT, MPClientMessage[40] );
|
||||
if(!DISABLE_SPEC_MODE)
|
||||
if (!isOwnTeamWipedOut)
|
||||
{
|
||||
gTacticalStatus.uiFlags |= SHOW_ALL_MERCS;//hayden
|
||||
ScreenMsg( FONT_YELLOW, MSG_CHAT, MPClientMessage[41] );
|
||||
ScreenMsg( FONT_LTGREEN, MSG_CHAT, MPClientMessage[40] );
|
||||
if(!DISABLE_SPEC_MODE)
|
||||
{
|
||||
gTacticalStatus.uiFlags |= SHOW_ALL_MERCS;//hayden
|
||||
ScreenMsg( FONT_YELLOW, MSG_CHAT, MPClientMessage[41] );
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_LTBLUE, MSG_CHAT, L"spectator mode disabled");
|
||||
|
||||
teamwiped();
|
||||
}
|
||||
else ScreenMsg( FONT_LTBLUE, MSG_CHAT, L"spectator mode disabled");
|
||||
teamwiped();
|
||||
}
|
||||
}
|
||||
|
||||
// HEADROCK HAM 3.5: This function needs a Z-Level argument!!! It is screwing up garrisons, when a battle is won underneath
|
||||
// a sector.
|
||||
void RemoveStaticEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
|
||||
{
|
||||
if (!bMapZ) // Battle ended Above-ground
|
||||
{
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sMapX, sMapY ) ] );
|
||||
if (!bMapZ) // Battle ended Above-ground
|
||||
{
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sMapX, sMapY ) ] );
|
||||
|
||||
pSectorInfo->ubNumAdmins = pSectorInfo->ubNumTroops = pSectorInfo->ubNumElites = 0;
|
||||
pSectorInfo->ubAdminsInBattle = pSectorInfo->ubTroopsInBattle = pSectorInfo->ubElitesInBattle = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
UNDERGROUND_SECTORINFO *pSectorInfo;
|
||||
|
||||
pSectorInfo = FindUnderGroundSector( sMapX, sMapY, bMapZ );
|
||||
pSectorInfo->ubNumAdmins = pSectorInfo->ubNumTroops = pSectorInfo->ubNumElites = 0;
|
||||
pSectorInfo->ubAdminsInBattle = pSectorInfo->ubTroopsInBattle = pSectorInfo->ubElitesInBattle = 0;
|
||||
}
|
||||
pSectorInfo->ubNumAdmins = pSectorInfo->ubNumTroops = pSectorInfo->ubNumElites = 0;
|
||||
pSectorInfo->ubAdminsInBattle = pSectorInfo->ubTroopsInBattle = pSectorInfo->ubElitesInBattle = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
UNDERGROUND_SECTORINFO *pSectorInfo;
|
||||
|
||||
pSectorInfo = FindUnderGroundSector( sMapX, sMapY, bMapZ );
|
||||
pSectorInfo->ubNumAdmins = pSectorInfo->ubNumTroops = pSectorInfo->ubNumElites = 0;
|
||||
pSectorInfo->ubAdminsInBattle = pSectorInfo->ubTroopsInBattle = pSectorInfo->ubElitesInBattle = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//!!!!
|
||||
//IMPORTANT NEW NOTE:
|
||||
//Whenever returning TRUE, make sure you clear gfBlitBattleSectorLocator;
|
||||
@@ -6375,6 +6382,7 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated )
|
||||
|
||||
// Play death music
|
||||
SetMusicMode( MUSIC_TACTICAL_DEATH );
|
||||
|
||||
SetCustomizableTimerCallbackAndDelay( 10000, DeathNoMessageTimerCallback, FALSE );
|
||||
|
||||
if (is_networked)
|
||||
@@ -6424,9 +6432,6 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated )
|
||||
}
|
||||
|
||||
// Kill all enemies. Sometime even after killing all the enemies, there appeares "in battle" enemies in sector info
|
||||
// HEADROCK HAM 3.5: This has to take Z-Level into account, otherwise winning a battle underground will kill all
|
||||
// enemies in the sector above! We still need to run the function though, to prevent confusions with the
|
||||
// strategic screen, which is what it was doing only for aboveground. UNTIL NOW, muahaha.
|
||||
RemoveStaticEnemiesFromSectorInfo( gWorldSectorX, gWorldSectorY, gbWorldSectorZ );
|
||||
|
||||
|
||||
@@ -7297,16 +7302,16 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
|
||||
// inflicts various penalties accordingly.
|
||||
// The most important result of this function is AP loss.
|
||||
|
||||
SOLDIERTYPE * pSoldier;
|
||||
//INT8 SUPPRESSION_AP_LIMIT = gGameExternalOptions.iMinAPLimitFromSuppression;
|
||||
|
||||
INT8 bTolerance;
|
||||
INT16 sClosestOpponent, sClosestOppLoc;
|
||||
UINT8 ubPointsLost, ubNewStance;
|
||||
UINT32 uiLoop;
|
||||
INT8 bTolerance;
|
||||
INT32 sClosestOpponent, sClosestOppLoc;
|
||||
UINT8 ubPointsLost, ubNewStance;
|
||||
UINT32 uiLoop;
|
||||
UINT8 ubLoop2;
|
||||
// Flag to determine if the target is cowering (if allowed)
|
||||
BOOLEAN fCower;
|
||||
|
||||
BOOLEAN fCower;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
// External options
|
||||
|
||||
// JA2_OPTIONS.INI
|
||||
@@ -7462,8 +7467,8 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
|
||||
if (ubPointsLost >= APBPConstants[AP_PRONE] && IsValidStance( pSoldier, ANIM_PRONE ) && gAnimControl[ pSoldier->usAnimState ].ubEndHeight != ANIM_PRONE )
|
||||
{
|
||||
sClosestOpponent = ClosestKnownOpponent( pSoldier, &sClosestOppLoc, NULL );
|
||||
// HEADROCK: Added cowering.
|
||||
if (sClosestOpponent == NOWHERE || SpacesAway( pSoldier->sGridNo, sClosestOppLoc ) > 8 || fCower)
|
||||
// HEADROCK: Added cowering.
|
||||
if (TileIsOutOfBounds(sClosestOpponent) || SpacesAway( pSoldier->sGridNo, sClosestOppLoc ) > 8 || fCower)
|
||||
{
|
||||
ubPointsLost -= APBPConstants[AP_PRONE];
|
||||
ubNewStance = ANIM_PRONE;
|
||||
@@ -7480,7 +7485,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
|
||||
{
|
||||
sClosestOpponent = ClosestKnownOpponent( pSoldier, &sClosestOppLoc, NULL );
|
||||
// HEADROCK: Added cowering.
|
||||
if ( sClosestOpponent == NOWHERE || SpacesAway( pSoldier->sGridNo, sClosestOppLoc ) > 8 ||fCower )
|
||||
if (TileIsOutOfBounds(sClosestOpponent) || SpacesAway( pSoldier->sGridNo, sClosestOppLoc ) > 8 ||fCower )
|
||||
{
|
||||
if ( gAnimControl[ pSoldier->usAnimState ].ubEndHeight == ANIM_STAND )
|
||||
{
|
||||
@@ -7505,7 +7510,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
|
||||
ubNewStance = ANIM_CROUCH;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("HandleSuppressionFire: reduce action points"));
|
||||
@@ -7935,8 +7940,13 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( )
|
||||
pSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||
}
|
||||
|
||||
if(!pSoldier && AreInMeanwhile())//dnl fix for preventing game crash in meanwhile after Queen slap Elliot
|
||||
return(NULL);
|
||||
if (!pSoldier)
|
||||
return (NULL);
|
||||
|
||||
//if(!pSoldier && AreInMeanwhile())//dnl fix for preventing game crash in meanwhile after Queen slap Elliot
|
||||
// return(NULL);
|
||||
|
||||
//if (!pSoldier)
|
||||
|
||||
ubID = pSoldier->ubID;
|
||||
|
||||
@@ -8148,14 +8158,14 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( )
|
||||
// Display quote!
|
||||
if ( !AM_AN_EPC( MercPtrs[ gTacticalStatus.ubItemsSeenOnAttackSoldier ] ) )
|
||||
{
|
||||
TacticalCharacterDialogueWithSpecialEvent( MercPtrs[ gTacticalStatus.ubItemsSeenOnAttackSoldier ], (UINT16)( QUOTE_SPOTTED_SOMETHING_ONE + Random( 2 ) ), DIALOGUE_SPECIAL_EVENT_SIGNAL_ITEM_LOCATOR_START, gTacticalStatus.sItemsSeenOnAttackGridNo, 0 );
|
||||
TacticalCharacterDialogueWithSpecialEvent( MercPtrs[ gTacticalStatus.ubItemsSeenOnAttackSoldier ], (UINT16)( QUOTE_SPOTTED_SOMETHING_ONE + Random( 2 ) ), DIALOGUE_SPECIAL_EVENT_SIGNAL_ITEM_LOCATOR_START, gTacticalStatus.usItemsSeenOnAttackGridNo, 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Turn off item lock for locators...
|
||||
gTacticalStatus.fLockItemLocators = FALSE;
|
||||
// Slide to location!
|
||||
SlideToLocation( 0, gTacticalStatus.sItemsSeenOnAttackGridNo );
|
||||
SlideToLocation( 0, gTacticalStatus.usItemsSeenOnAttackGridNo );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8533,10 +8543,12 @@ void EndBattleWithUnconsciousGuysCallback( UINT8 bExitValue )
|
||||
ScreenMsg( FONT_LTGREEN, MSG_CHAT, MPClientMessage[40] );
|
||||
if(!DISABLE_SPEC_MODE)
|
||||
{
|
||||
gTacticalStatus.uiFlags |= SHOW_ALL_MERCS;//hayden
|
||||
ScreenMsg( FONT_YELLOW, MSG_CHAT, MPClientMessage[41] );
|
||||
gTacticalStatus.uiFlags |= SHOW_ALL_MERCS;//hayden
|
||||
ScreenMsg( FONT_YELLOW, MSG_CHAT, MPClientMessage[41] );
|
||||
}
|
||||
else ScreenMsg( FONT_LTBLUE, MSG_CHAT, L"spectator mode disabled");
|
||||
else
|
||||
ScreenMsg( FONT_LTBLUE, MSG_CHAT, L"spectator mode disabled");
|
||||
|
||||
teamwiped();
|
||||
}
|
||||
}
|
||||
@@ -8646,15 +8658,15 @@ void DoPOWPathChecks( void )
|
||||
// check to see if POW has been freed!
|
||||
// this will be true if a path can be made from the POW to either of 3 gridnos
|
||||
// 10492 (hallway) or 10482 (outside), or 9381 (outside)
|
||||
if ( FindBestPath( pSoldier, 10492, 0, WALKING, NO_COPYROUTE, PATH_THROUGH_PEOPLE ) )
|
||||
if ( FindBestPath( pSoldier, 10492, 0, WALKING, NO_COPYROUTE, PATH_THROUGH_PEOPLE ) )//dnl!!!
|
||||
{
|
||||
// drop out of if
|
||||
}
|
||||
else if ( FindBestPath( pSoldier, 10482, 0, WALKING, NO_COPYROUTE, PATH_THROUGH_PEOPLE ) )
|
||||
else if ( FindBestPath( pSoldier, 10482, 0, WALKING, NO_COPYROUTE, PATH_THROUGH_PEOPLE ) )//dnl!!!
|
||||
{
|
||||
// drop out of if
|
||||
}
|
||||
else if ( FindBestPath( pSoldier, 9381, 0, WALKING, NO_COPYROUTE, PATH_THROUGH_PEOPLE ) )
|
||||
else if ( FindBestPath( pSoldier, 9381, 0, WALKING, NO_COPYROUTE, PATH_THROUGH_PEOPLE ) )//dnl!!!
|
||||
{
|
||||
// drop out of if
|
||||
}
|
||||
@@ -8962,4 +8974,4 @@ INT8 CheckStatusNearbyFriendlies( SOLDIERTYPE *pSoldier )
|
||||
|
||||
return(sModifier);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+15
-15
@@ -84,11 +84,11 @@ typedef struct
|
||||
UINT32 uiFlags;
|
||||
TacticalTeamType Team[ MAXTEAMS ];
|
||||
UINT8 ubCurrentTeam;
|
||||
INT16 sSlideTarget;
|
||||
INT32 sSlideTarget;
|
||||
INT16 sSlideReason;
|
||||
UINT32 uiTimeSinceMercAIStart;
|
||||
INT8 fPanicFlags;
|
||||
INT16 sPanicTriggerGridnoUnused;
|
||||
INT32 sPanicTriggerGridNoUnused;
|
||||
INT16 sHandGrid;
|
||||
UINT8 ubSpottersCalledForBy;
|
||||
UINT8 ubTheChosenOne;
|
||||
@@ -128,7 +128,7 @@ typedef struct
|
||||
INT8 bConsNumTurnsNotSeen;
|
||||
UINT8 ubArmyGuysKilled;
|
||||
|
||||
INT16 sPanicTriggerGridNo[ NUM_PANIC_TRIGGERS ];
|
||||
INT32 sPanicTriggerGridNo[ NUM_PANIC_TRIGGERS ];
|
||||
INT8 bPanicTriggerIsAlarm[ NUM_PANIC_TRIGGERS ];
|
||||
UINT8 ubPanicTolerance[ NUM_PANIC_TRIGGERS ];
|
||||
BOOLEAN fAtLeastOneGuyOnMultiSelect;
|
||||
@@ -142,13 +142,13 @@ typedef struct
|
||||
BOOLEAN ubItemsSeenOnAttackSoldier;
|
||||
BOOLEAN fBeenInCombatOnce;
|
||||
BOOLEAN fSaidCreatureSmellQuote;
|
||||
INT16 sItemsSeenOnAttackGridNo;
|
||||
UINT32 usItemsSeenOnAttackGridNo;
|
||||
BOOLEAN fLockItemLocators;
|
||||
UINT8 ubLastQuoteSaid;
|
||||
UINT8 ubLastQuoteProfileNUm;
|
||||
BOOLEAN fCantGetThrough;
|
||||
INT16 sCantGetThroughGridNo;
|
||||
INT16 sCantGetThroughSoldierGridNo;
|
||||
INT32 sCantGetThroughGridNo;
|
||||
INT32 sCantGetThroughSoldierGridNo;
|
||||
UINT8 ubCantGetThroughID;
|
||||
BOOLEAN fDidGameJustStart;
|
||||
BOOLEAN fStatChangeCheatOn;
|
||||
@@ -225,7 +225,7 @@ BOOLEAN GetSoldier( SOLDIERTYPE **ppSoldier, UINT16 usSoldierIndex );
|
||||
|
||||
UINT32 CountNonVehiclesOnPlayerTeam( void );
|
||||
|
||||
INT16 NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT16 sGridNo, BOOLEAN fPeopleToo, INT8 bLevel );
|
||||
INT16 NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, BOOLEAN fPeopleToo, INT8 bLevel );
|
||||
|
||||
//Simple check to see if a (one-tiled) soldier can occupy a given location on the ground or roof.
|
||||
extern BOOLEAN IsLocationSittable( INT32 iMapIndex, BOOLEAN fOnRoof );
|
||||
@@ -247,12 +247,12 @@ void SelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceRese
|
||||
//Kaiden: Function declaration from UB to reveal all items after combat.
|
||||
void RevealAllDroppedEnemyItems();
|
||||
|
||||
void LocateGridNo( INT16 sGridNo );
|
||||
void LocateGridNo( INT32 sGridNo );
|
||||
void LocateSoldier( UINT16 usID, BOOLEAN fSetLocator);
|
||||
|
||||
void BeginTeamTurn( UINT8 ubTeam );
|
||||
void SlideTo(INT16 sGridno, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSetLocator) ;
|
||||
void SlideToLocation( UINT16 usReasonID, INT16 sDestGridNo );
|
||||
void SlideTo(INT32 sGridNo, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSetLocator) ;
|
||||
void SlideToLocation( UINT16 usReasonID, INT32 sDestGridNo );
|
||||
|
||||
void RebuildAllSoldierShadeTables( );
|
||||
void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier );
|
||||
@@ -269,14 +269,14 @@ void StopMercAnimation( BOOLEAN fStop );
|
||||
|
||||
UINT32 EnterTacticalDemoMode();
|
||||
|
||||
BOOLEAN UIOKMoveDestination( SOLDIERTYPE *pSoldier, INT16 sMapPos );
|
||||
BOOLEAN UIOKMoveDestination( SOLDIERTYPE *pSoldier, INT32 usMapPos );
|
||||
|
||||
INT16 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pubDirection, INT16 *psAdjustedGridNo, BOOLEAN fForceToPerson, BOOLEAN fDoor );
|
||||
INT16 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 *pubDirection, INT16 *psAdjustedGridNo, BOOLEAN fForceToPerson, BOOLEAN fDoor );
|
||||
INT32 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pubDirection, INT32 *psAdjustedGridNo, BOOLEAN fForceToPerson, BOOLEAN fDoor );
|
||||
INT32 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pubDirection, INT32 *psAdjustedGridNo, BOOLEAN fForceToPerson, BOOLEAN fDoor );
|
||||
|
||||
|
||||
void SelectNextAvailSoldier( SOLDIERTYPE *pSoldier );
|
||||
BOOLEAN TeamMemberNear(INT8 bTeam, INT16 sGridNo, INT32 iRange);
|
||||
BOOLEAN TeamMemberNear(INT8 bTeam, INT32 sGridNo, INT32 iRange);
|
||||
BOOLEAN IsValidTargetMerc( UINT8 ubSoldierID );
|
||||
|
||||
|
||||
@@ -342,7 +342,7 @@ void MakeCivHostile( SOLDIERTYPE *pSoldier, INT8 bNewSide );
|
||||
|
||||
BOOLEAN ProcessImplicationsOfPCAttack( SOLDIERTYPE * pSoldier, SOLDIERTYPE ** ppTarget, INT8 bReason );
|
||||
|
||||
INT16 FindAdjacentPunchTarget( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTargetSoldier, INT16 * psAdjustedTargetGridNo, UINT8 * pubDirection );
|
||||
INT32 FindAdjacentPunchTarget( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTargetSoldier, INT32 * psAdjustedTargetGridNo, UINT8 * pubDirection );
|
||||
|
||||
SOLDIERTYPE * CivilianGroupMemberChangesSides( SOLDIERTYPE * pAttacked );
|
||||
void CivilianGroupChangesSides( UINT8 ubCivilianGroup );
|
||||
|
||||
+52
-39
@@ -10,7 +10,8 @@
|
||||
#define _PATHAI_H
|
||||
#include "isometric utils.h"
|
||||
|
||||
|
||||
// WANNE: Please do not use ASTAR pathing,
|
||||
// because it is a HUGH PERFORMANCE KILLER on big maps!!
|
||||
//#define USE_ASTAR_PATHS
|
||||
|
||||
#ifdef USE_ASTAR_PATHS
|
||||
@@ -42,7 +43,7 @@ public:
|
||||
//int f;//F is also calculated on the fly
|
||||
//int APCost;//the APs spent to get here // Isn't this the same as "cost"?
|
||||
int extraGCoverCost;//an extra cost that makes stopping in midpath at a node with little cover worse
|
||||
INT16 parent;
|
||||
INT32 parent;
|
||||
eAStar status;
|
||||
//int prevCost;
|
||||
bool wasBackwards;
|
||||
@@ -56,7 +57,7 @@ public:
|
||||
AStarPathfinder ();
|
||||
static AStarPathfinder& GetInstance();
|
||||
int GetPath (SOLDIERTYPE *s ,
|
||||
INT16 dest,
|
||||
INT32 dest,
|
||||
INT8 ubLevel,
|
||||
INT16 usMovementMode,
|
||||
INT8 bCopy,
|
||||
@@ -64,7 +65,7 @@ public:
|
||||
|
||||
private:
|
||||
static AStarPathfinder* pThis;
|
||||
CBinaryHeap<int, INT16> OpenHeap;
|
||||
CBinaryHeap<int, INT32> OpenHeap;
|
||||
|
||||
// The "closed list" is the AStarData array below which is also the path backtrace when a path is found.
|
||||
|
||||
@@ -115,12 +116,14 @@ private:
|
||||
//#endif
|
||||
|
||||
// member variables to prevent passing them around
|
||||
INT16 StartNode;
|
||||
INT16 DestNode;
|
||||
INT16 CurrentNode;
|
||||
INT16 ParentNode;
|
||||
INT32 StartNode;
|
||||
INT32 DestNode;
|
||||
INT32 CurrentNode;
|
||||
INT32 ParentNode;
|
||||
|
||||
AStar_Data AStarData[WORLD_MAX];
|
||||
// WANNE - BMP: DONE!
|
||||
//AStar_Data AStarData[WORLD_MAX];
|
||||
AStar_Data AStarData[MAX_ALLOWED_WORLD_MAX];
|
||||
|
||||
|
||||
|
||||
@@ -141,36 +144,36 @@ private:
|
||||
INT16 CalcStartingAP ();
|
||||
|
||||
//including THREATTYPE was a pain, so pass by value
|
||||
int CalcCoverValue (INT16 sMyGridNo, INT32 iMyThreat, INT32 iMyAPsLeft,
|
||||
INT32 myThreatsiOrigRange, INT16 myThreatssGridNo, SOLDIERTYPE* myThreatspOpponent,
|
||||
int CalcCoverValue (INT32 sMyGridNo, INT32 iMyThreat, INT32 iMyAPsLeft,
|
||||
INT32 myThreatsiOrigRange, INT32 myThreatssGridNo, SOLDIERTYPE* myThreatspOpponent,
|
||||
INT32 myThreatsiValue, INT32 myThreatsiAPs, INT32 myThreatsiCertainty);
|
||||
|
||||
eAStar GetAStarStatus (const INT16 node) const {return AStarData[node].status;};
|
||||
INT16 GetAStarParent (const INT16 node) const {return AStarData[node].parent;};
|
||||
INT16 GetAStarG (INT16 node) const {return AStarData[node].cost;};
|
||||
int GetExtraGCover (const INT16 node) const {return AStarData[node].extraGCoverCost;};
|
||||
eAStar GetAStarStatus (const INT32 node) const {return AStarData[node].status;};
|
||||
INT32 GetAStarParent (const INT32 node) const {return AStarData[node].parent;};
|
||||
INT16 GetAStarG (INT32 node) const {return AStarData[node].cost;};
|
||||
int GetExtraGCover (const INT32 node) const {return AStarData[node].extraGCoverCost;};
|
||||
//int GetAStarF (const INT16 node) const {return AStarData[node].f;};
|
||||
//int GetActionPoints (const INT16 node) const {return AStarData[node].APCost;};
|
||||
bool GetLoopState (const INT16 node) const {return AStarData[node].wasBackwards;};
|
||||
bool GetLoopState (const INT32 node) const {return AStarData[node].wasBackwards;};
|
||||
//int GetPrevCost (const INT16 node) const {return AStarData[node].prevCost;};
|
||||
UINT8 GetDirection (const INT16 node) const {return AStarData[node].directionFromPrev;};
|
||||
int GetNumSteps (const INT16 node) const {return AStarData[node].numSteps;};
|
||||
UINT8 GetDirection (const INT32 node) const {return AStarData[node].directionFromPrev;};
|
||||
int GetNumSteps (const INT32 node) const {return AStarData[node].numSteps;};
|
||||
|
||||
void SetAStarStatus (const INT16 node, const eAStar status) {AStarData[node].status = status;};
|
||||
void SetAStarParent (const INT16 node, const INT16 parent) {AStarData[node].parent = parent;};
|
||||
void SetAStarG (const INT16 node, const INT16 cost) {AStarData[node].cost = cost;};
|
||||
void SetExtraGCover (const INT16 node, const int extraGCoverCost) {AStarData[node].extraGCoverCost = extraGCoverCost;};
|
||||
void SetAStarStatus (const INT32 node, const eAStar status) {AStarData[node].status = status;};
|
||||
void SetAStarParent (const INT32 node, const INT32 parent) {AStarData[node].parent = parent;};
|
||||
void SetAStarG (const INT32 node, const INT16 cost) {AStarData[node].cost = cost;};
|
||||
void SetExtraGCover (const INT32 node, const int extraGCoverCost) {AStarData[node].extraGCoverCost = extraGCoverCost;};
|
||||
//void SetAStarF (const INT16 node, const int f) {AStarData[node].f = f;};
|
||||
//void SetActionPoints (const INT16 node, const int APCost) {AStarData[node].APCost = APCost;};
|
||||
void SetLoopState (const INT16 node, const int loopState);
|
||||
void SetLoopState (const INT32 node, const int loopState);
|
||||
//void SetPrevCost (const INT16 node, const int prevCost) {AStarData[node].prevCost = prevCost;};
|
||||
void SetDirection (const INT16 node, const UINT8 direction) {AStarData[node].directionFromPrev = direction;};
|
||||
void SetNumSteps (const INT16 node, const int steps) {AStarData[node].numSteps = steps;};
|
||||
void SetDirection (const INT32 node, const UINT8 direction) {AStarData[node].directionFromPrev = direction;};
|
||||
void SetNumSteps (const INT32 node, const int steps) {AStarData[node].numSteps = steps;};
|
||||
|
||||
int PythSpacesAway (const INT16 node1,
|
||||
const INT16 node2);
|
||||
INT16 SpacesAway (const INT16 node1,
|
||||
const INT16 node2);
|
||||
int PythSpacesAway (const INT32 node1,
|
||||
const INT32 node2);
|
||||
INT16 SpacesAway (const INT32 node1,
|
||||
const INT32 node2);
|
||||
//bool IsDiagonal (const INT16 node1,
|
||||
// const INT16 node2) {return (abs(node1.x - node2.x) && abs(node1.y - node2.y));};
|
||||
bool IsDiagonal (int const direction) {return (direction & 1);};
|
||||
@@ -190,27 +193,37 @@ private:
|
||||
|
||||
BOOLEAN InitPathAI( void );
|
||||
void ShutDownPathAI( void );
|
||||
INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget);
|
||||
INT16 UIPlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget);
|
||||
INT16 EstimatePlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget);
|
||||
INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget);
|
||||
INT32 UIPlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget);
|
||||
INT32 EstimatePlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget);
|
||||
|
||||
void ErasePath(char bEraseOldOne);
|
||||
INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMovementMode, INT8 bCopy, UINT8 fFlags );
|
||||
void GlobalReachableTest( INT16 sStartGridNo );
|
||||
void GlobalItemsReachableTest( INT16 sStartGridNo1, INT16 sStartGridNo2 );
|
||||
void RoofReachableTest( INT16 sStartGridNo, UINT8 ubBuildingID );
|
||||
void LocalReachableTest( INT16 sStartGridNo, INT8 bRadius );
|
||||
INT32 FindBestPath(SOLDIERTYPE *s , INT32 sDestination, INT8 ubLevel, INT16 usMovementMode, INT8 bCopy, UINT8 fFlags );
|
||||
void GlobalReachableTest( INT32 sStartGridNo );
|
||||
void GlobalItemsReachableTest( INT32 sStartGridNo1, INT32 sStartGridNo2 );
|
||||
void RoofReachableTest( INT32 sStartGridNo, UINT8 ubBuildingID );
|
||||
void LocalReachableTest( INT32 sStartGridNo, INT8 bRadius );
|
||||
|
||||
UINT8 DoorTravelCost( SOLDIERTYPE * pSoldier, INT32 iGridNo, UINT8 ubMovementCost, BOOLEAN fReturnPerceivedValue, INT32 * piDoorGridNo );
|
||||
UINT8 InternalDoorTravelCost( SOLDIERTYPE * pSoldier, INT32 iGridNo, UINT8 ubMovementCost, BOOLEAN fReturnPerceivedValue, INT32 * piDoorGridNo, BOOLEAN fReturnDoorCost );
|
||||
|
||||
INT16 RecalculatePathCost( SOLDIERTYPE *pSoldier, UINT16 usMovementMode );
|
||||
|
||||
//dnl ch50 071009
|
||||
// ABSOLUTE maximums
|
||||
#define ABSMAX_SKIPLIST_LEVEL 10 // was 5
|
||||
#define ABSMAX_TRAIL_TREE (WORLD_MAX) // was 16384
|
||||
#define ABSMAX_PATHQ (ABSMAX_TRAIL_TREE/16) // was 512
|
||||
// STANDARD maximums... configurable!
|
||||
#define MAX_SKIPLIST_LEVEL ABSMAX_SKIPLIST_LEVEL// was 5
|
||||
#define MAX_TRAIL_TREE ABSMAX_TRAIL_TREE // was 16384
|
||||
#define MAX_PATHQ ABSMAX_PATHQ // was 512
|
||||
// Lesh: setup max length of path
|
||||
#define MAX_PATH_DATA_LENGTH 512
|
||||
#define MAX_PATH_DATA_LENGTH MAX_PATHQ // was 512
|
||||
|
||||
#define TRAILCELLTYPE UINT16 //Lalien: moved form pathai.cpp
|
||||
// Exporting these global variables
|
||||
extern UINT32 guiPathingData[MAX_PATH_DATA_LENGTH];
|
||||
extern UINT32* guiPathingData;
|
||||
extern INT16 gubNPCAPBudget;
|
||||
extern UINT16 gusNPCMovementMode;
|
||||
extern UINT8 gubNPCDistLimit;
|
||||
|
||||
+218
-174
@@ -30,7 +30,7 @@
|
||||
#include "english.h"
|
||||
#include "worlddef.h"
|
||||
#include "worldman.h"
|
||||
#include "renderworld.h"
|
||||
// #include "renderworld.h"
|
||||
#include "pathai.h"
|
||||
#include "PathAIDebug.h"
|
||||
#include "Points.h"
|
||||
@@ -54,7 +54,7 @@ class SOLDIERTYPE;
|
||||
#include "opplist.h"
|
||||
#include "weapons.h"
|
||||
#endif
|
||||
|
||||
//#include "dnlprocesstalk.h"//dnl???
|
||||
|
||||
extern UINT16 gubAnimSurfaceIndex[ TOTALBODYTYPES ][ NUMANIMATIONSTATES ];
|
||||
|
||||
@@ -69,7 +69,8 @@ extern UINT16 gubAnimSurfaceIndex[ TOTALBODYTYPES ][ NUMANIMATIONSTATES ];
|
||||
#ifdef PATHAI_VISIBLE_DEBUG
|
||||
#include "video.h"
|
||||
|
||||
extern INT16 gsCoverValue[WORLD_MAX];
|
||||
//extern INT16 gsCoverValue[WORLD_MAX];
|
||||
extern INT16 * gsCoverValue;
|
||||
BOOLEAN gfDisplayCoverValues = TRUE;
|
||||
BOOLEAN gfDrawPathPoints = TRUE;
|
||||
#endif
|
||||
@@ -77,50 +78,31 @@ extern UINT16 gubAnimSurfaceIndex[ TOTALBODYTYPES ][ NUMANIMATIONSTATES ];
|
||||
BOOLEAN gfPlotPathToExitGrid = FALSE;
|
||||
BOOLEAN gfRecalculatingExistingPathCost = FALSE;
|
||||
UINT8 gubGlobalPathFlags = 0;
|
||||
|
||||
UINT8 gubBuildingInfoToSet;
|
||||
|
||||
// ABSOLUTE maximums
|
||||
//#ifdef JA2EDITOR
|
||||
#define ABSMAX_SKIPLIST_LEVEL 5
|
||||
#define ABSMAX_TRAIL_TREE (16384)
|
||||
#define ABSMAX_PATHQ (512)
|
||||
/*
|
||||
#else
|
||||
#define ABSMAX_SKIPLIST_LEVEL 5
|
||||
#define ABSMAX_TRAIL_TREE (4096)
|
||||
#define ABSMAX_PATHQ (512)
|
||||
#endif
|
||||
*/
|
||||
|
||||
// STANDARD maximums... configurable!
|
||||
#define MAX_SKIPLIST_LEVEL 5
|
||||
#define MAX_TRAIL_TREE (16384)//(4096)
|
||||
#define MAX_PATHQ (512)
|
||||
|
||||
UINT8 gubBuildingInfoToSet;
|
||||
INT32 iMaxSkipListLevel = MAX_SKIPLIST_LEVEL;
|
||||
INT32 iMaxTrailTree = MAX_TRAIL_TREE;
|
||||
INT32 iMaxTrailTree = MAX_TRAIL_TREE;
|
||||
INT32 iMaxPathQ = MAX_PATHQ;
|
||||
|
||||
extern BOOLEAN gfGeneratingMapEdgepoints;
|
||||
|
||||
#define VEHICLE
|
||||
|
||||
#define TRAILCELLTYPE UINT16
|
||||
//#define TRAILCELLTYPE UINT16 //Lalien: moved to pathai.h
|
||||
|
||||
// OLD PATHAI STUFF
|
||||
/////////////////////////////////////////////////
|
||||
//dnl ch50 071009
|
||||
struct path_s
|
||||
{
|
||||
INT32 iLocation; //4
|
||||
struct path_s * pNext[ABSMAX_SKIPLIST_LEVEL]; //4 * MAX_SKIPLIST_LEVEL (5) = 20
|
||||
INT16 sPathNdx; //2
|
||||
TRAILCELLTYPE usCostSoFar; //2
|
||||
TRAILCELLTYPE usCostToGo; //2
|
||||
TRAILCELLTYPE usTotalCost; //2
|
||||
INT8 bLevel; //1
|
||||
INT16 ubTotalAPCost; //1
|
||||
UINT8 ubLegDistance; //1
|
||||
INT32 iLocation;
|
||||
INT32 sPathNdx;
|
||||
struct path_s* pNext[ABSMAX_SKIPLIST_LEVEL];
|
||||
TRAILCELLTYPE usCostSoFar;
|
||||
TRAILCELLTYPE usCostToGo;
|
||||
TRAILCELLTYPE usTotalCost;
|
||||
INT16 ubTotalAPCost;
|
||||
INT8 bLevel;
|
||||
UINT8 ubLegDistance;
|
||||
};
|
||||
|
||||
typedef struct path_s path_t;
|
||||
@@ -130,7 +112,7 @@ struct trail_s
|
||||
INT16 nextLink;
|
||||
INT8 stepDir;
|
||||
INT8 fFlags;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
};
|
||||
typedef struct trail_s trail_t;
|
||||
|
||||
@@ -151,7 +133,7 @@ static INT32 queRequests;
|
||||
static INT32 iSkipListSize;
|
||||
static INT32 iClosedListSize;
|
||||
static INT8 bSkipListLevel;
|
||||
static INT32 iSkipListLevelLimit[8] = {0, 4, 16, 64, 256, 1024, 4192, 16384 };
|
||||
static INT32 iSkipListLevelLimit[ABSMAX_SKIPLIST_LEVEL] = { 0, 4, 16, 64, 256, 1024, 4192, 16384, 65536, 262144 };//dnl ch50 071009
|
||||
|
||||
#define ESTIMATE0 ((dx>dy) ? (dx) : (dy))
|
||||
#define ESTIMATE1 ((dx<dy) ? ((dx*14)/10+dy) : ((dy*14)/10+dx) )
|
||||
@@ -165,8 +147,8 @@ static INT32 iSkipListLevelLimit[8] = {0, 4, 16, 64, 256, 1024, 4192, 16384 };
|
||||
//#define MAXCOST (255)
|
||||
//#define TOTALCOST( pCurrPtr ) (pCurrPtr->usCostSoFar + pCurrPtr->usCostToGo)
|
||||
#define TOTALCOST( ptr ) (ptr->usTotalCost)
|
||||
#define XLOC(a) (a%MAPWIDTH)
|
||||
#define YLOC(a) (a/MAPWIDTH)
|
||||
#define XLOC(a) (a%WORLD_COLS)
|
||||
#define YLOC(a) (a/WORLD_COLS)
|
||||
//#define LEGDISTANCE(a,b) ( abs( XLOC(b)-XLOC(a) ) + abs( YLOC(b)-YLOC(a) ) )
|
||||
#define LEGDISTANCE( x1, y1, x2, y2 ) ( abs( x2 - x1 ) + abs( y2 - y1 ) )
|
||||
//#define FARTHER(ndx,NDX) ( LEGDISTANCE( ndx->sLocation,sDestination) > LEGDISTANCE(NDX->sLocation,sDestination) )
|
||||
@@ -182,7 +164,7 @@ static UINT8 * trailCostUsed;
|
||||
static UINT8 gubGlobalPathCount = 0;
|
||||
static trail_t * trailTree;
|
||||
|
||||
static short trailTreeNdx=0;
|
||||
static INT32 trailTreeNdx = 0;//dnl ch50 071009
|
||||
|
||||
#define QHEADNDX (0)
|
||||
#define QPOOLNDX (iMaxPathQ-1)
|
||||
@@ -414,22 +396,45 @@ BOOLEAN gfPathAroundObstacles = TRUE;
|
||||
// Lesh: fix CTD in Tixa
|
||||
// The game was trying to store very long path (270 cells) in 256-cell array and corrupted
|
||||
// some data, not belonged to array. It was ordinary array boundary break.
|
||||
static UINT32 guiPlottedPath[MAX_PATH_DATA_LENGTH];
|
||||
UINT32 guiPathingData[MAX_PATH_DATA_LENGTH];
|
||||
UINT32* guiPlottedPath = NULL;
|
||||
UINT32* guiPathingData = NULL;
|
||||
static INT32 giPathDataSize;
|
||||
static INT32 giPlotCnt;
|
||||
static UINT32 guiEndPlotGridNo;
|
||||
static INT32 guiEndPlotGridNo;
|
||||
|
||||
static INT16 dirDelta[8]=
|
||||
//static INT32 dirDelta[8]=
|
||||
//{
|
||||
// -MAPWIDTH, //N
|
||||
// 1-MAPWIDTH, //NE
|
||||
// 1, //E
|
||||
// 1+MAPWIDTH, //SE
|
||||
// MAPWIDTH, //S
|
||||
// MAPWIDTH-1, //SW
|
||||
// -1, //W
|
||||
// -MAPWIDTH-1 //NW
|
||||
//};
|
||||
|
||||
///*static */INT32 dirDelta[8]=
|
||||
//{
|
||||
// -OLD_WORLD_COLS, //N
|
||||
// 1-OLD_WORLD_COLS, //NE
|
||||
// 1, //E
|
||||
// 1+OLD_WORLD_COLS, //SE
|
||||
// OLD_WORLD_COLS, //S
|
||||
// OLD_WORLD_COLS-1, //SW
|
||||
// -1, //W
|
||||
// -OLD_WORLD_COLS-1 //NW
|
||||
//};
|
||||
INT32 dirDelta[8]=
|
||||
{
|
||||
-MAPWIDTH, //N
|
||||
1-MAPWIDTH, //NE
|
||||
1, //E
|
||||
1+MAPWIDTH, //SE
|
||||
MAPWIDTH, //S
|
||||
MAPWIDTH-1, //SW
|
||||
-1, //W
|
||||
-MAPWIDTH-1 //NW
|
||||
-WORLD_COLS, //N
|
||||
1-WORLD_COLS, //NE
|
||||
1, //E
|
||||
1+WORLD_COLS, //SE
|
||||
WORLD_COLS, //S
|
||||
WORLD_COLS-1, //SW
|
||||
-1, //W
|
||||
-WORLD_COLS-1 //NW
|
||||
};
|
||||
|
||||
#define LOOPING_CLOCKWISE 0
|
||||
@@ -491,7 +496,7 @@ void AStarPathfinder::ResetAStarList()
|
||||
// SetAStarStatus(node, AStar_Init);
|
||||
// SetAStarG(node, 0);
|
||||
//}
|
||||
for (INT16 node = 0; node < WORLD_MAX; node++)
|
||||
for (INT32 node = 0; node < WORLD_MAX; node++)
|
||||
{
|
||||
SetAStarStatus(node, AStar_Init);
|
||||
SetAStarG(node, 0);
|
||||
@@ -502,7 +507,7 @@ void AStarPathfinder::ResetAStarList()
|
||||
return;
|
||||
}//end ResetAStarList
|
||||
|
||||
void AStarPathfinder::SetLoopState(const INT16 node,
|
||||
void AStarPathfinder::SetLoopState(const INT32 node,
|
||||
int const loopState)
|
||||
{
|
||||
if ( loopState == LOOPING_REVERSE )
|
||||
@@ -515,8 +520,8 @@ void AStarPathfinder::SetLoopState(const INT16 node,
|
||||
}
|
||||
}
|
||||
|
||||
int AStarPathfinder::PythSpacesAway(const INT16 node1,
|
||||
const INT16 node2)
|
||||
int AStarPathfinder::PythSpacesAway(const INT32 node1,
|
||||
const INT32 node2)
|
||||
{
|
||||
int sRows,sCols,sResult;
|
||||
GridNode *n1, *n2;
|
||||
@@ -535,8 +540,8 @@ int AStarPathfinder::PythSpacesAway(const INT16 node1,
|
||||
return(sResult);
|
||||
}
|
||||
|
||||
INT16 AStarPathfinder::SpacesAway(const INT16 node1,
|
||||
const INT16 node2)
|
||||
INT16 AStarPathfinder::SpacesAway(const INT32 node1,
|
||||
const INT32 node2)
|
||||
{
|
||||
//should be faster than its counterpart
|
||||
int sRows,sCols;
|
||||
@@ -552,7 +557,7 @@ INT16 AStarPathfinder::SpacesAway(const INT16 node1,
|
||||
}
|
||||
|
||||
int AStarPathfinder::GetPath(SOLDIERTYPE *s ,
|
||||
INT16 dest,
|
||||
INT32 dest,
|
||||
INT8 ubLevel,
|
||||
INT16 usMovementMode,
|
||||
INT8 bCopy,
|
||||
@@ -655,8 +660,8 @@ int AStarPathfinder::GetPath(SOLDIERTYPE *s ,
|
||||
}
|
||||
|
||||
gubNPCPathCount++;
|
||||
|
||||
if (DestNode != NOWHERE)
|
||||
|
||||
if (!TileIsOutOfBounds(DestNode))
|
||||
{
|
||||
if (DestNode == pSoldier->sGridNo)
|
||||
{
|
||||
@@ -737,8 +742,8 @@ int AStarPathfinder::GetPath(SOLDIERTYPE *s ,
|
||||
}
|
||||
|
||||
// if origin and dest is water, then user wants to stay in water!
|
||||
// so, check and set waterToWater flag accordingly
|
||||
if (dest == NOWHERE)
|
||||
// so, check and set waterToWater flag accordingly
|
||||
if (TileIsOutOfBounds(dest))
|
||||
{
|
||||
bWaterToWater = false;
|
||||
}
|
||||
@@ -789,13 +794,13 @@ int AStarPathfinder::GetPath(SOLDIERTYPE *s ,
|
||||
|
||||
// Count the number of steps, but keep it less than the max path length.
|
||||
// Adjust the parent until it begins at the tail end of the max path length (or the dest if reachable)
|
||||
INT16 parent = DestNode;
|
||||
INT16 current = parent;
|
||||
INT32 parent = DestNode;
|
||||
INT32 current = parent;
|
||||
unsigned int sizePath = 0;
|
||||
//CHRISL: If, for whatever reason, the pathfinding system gets the wrong Grid values, it's possible that an infinite
|
||||
// loop can result. This can often require a hard reboot to get around. To try and force a CTD in this event, lets
|
||||
// track all the grids and force a crash if we ever pull the same GridNo.
|
||||
std::vector<INT16> trackNode;
|
||||
std::vector<INT32> trackNode;
|
||||
trackNode.resize(1,current);
|
||||
while (current != -1)
|
||||
{
|
||||
@@ -897,7 +902,7 @@ int AStarPathfinder::GetPath(SOLDIERTYPE *s ,
|
||||
|
||||
INT16 AStarPathfinder::AStar()
|
||||
{
|
||||
HEAP<int, INT16> TopHeap(StartNode, 0);
|
||||
HEAP<int, INT32> TopHeap(StartNode, 0);
|
||||
ParentNode = StartNode;
|
||||
|
||||
this->travelcostOrth = CalcAP( TRAVELCOST_FLAT, 0);
|
||||
@@ -1015,7 +1020,7 @@ void AStarPathfinder::ExecuteAStarLogic()
|
||||
|
||||
if (fContinuousTurnNeeded)
|
||||
{
|
||||
INT16 parent = GetAStarParent(ParentNode);
|
||||
INT32 parent = GetAStarParent(ParentNode);
|
||||
if (parent == -1)
|
||||
{
|
||||
lastDir = pSoldier->ubDirection;
|
||||
@@ -1122,7 +1127,7 @@ void AStarPathfinder::ExecuteAStarLogic()
|
||||
//movementG = terrainCost * 100;
|
||||
movementG = terrainCost;
|
||||
// Favor continuing in the same direction by increasing the cost for changing direction
|
||||
int ParentParentNode = GetAStarParent( ParentNode);
|
||||
INT32 ParentParentNode = GetAStarParent( ParentNode);
|
||||
if ((ParentParentNode != -1 &&
|
||||
ParentNode - ParentParentNode != CurrentNode - ParentNode) ||
|
||||
(ParentParentNode == -1 && (direction & 1) ) )
|
||||
@@ -1240,6 +1245,12 @@ INT16 AStarPathfinder::CalcStartingAP()
|
||||
// Add to points, those needed to start from different stance!
|
||||
INT16 startingAPCost = MinAPsToStartMovement( pSoldier, movementMode );
|
||||
|
||||
// WANNE - BMP: We have to reset the CurrentNode.
|
||||
// This can happen, if the previous savegame was on a big map
|
||||
// and now we are on a "normal" map.
|
||||
if (CurrentNode > WORLD_MAX)
|
||||
CurrentNode = 0;
|
||||
|
||||
// We should reduce points for starting to run if first tile is a fence...
|
||||
if ( gubWorldMovementCosts[ CurrentNode ][ direction ][ onRooftop ] == TRAVELCOST_FENCE )
|
||||
{
|
||||
@@ -1419,7 +1430,7 @@ int AStarPathfinder::CalcG(int* pPrevCost)
|
||||
{
|
||||
// Is this obstacle a hidden tile that has not been revealed yet?
|
||||
BOOLEAN fHiddenStructVisible;
|
||||
if( DoesGridnoContainHiddenStruct( CurrentNode, &fHiddenStructVisible ) )
|
||||
if( DoesGridNoContainHiddenStruct( CurrentNode, &fHiddenStructVisible ) )
|
||||
{
|
||||
// Are we not visible, if so use terrain costs!
|
||||
if ( !fHiddenStructVisible )
|
||||
@@ -1455,7 +1466,7 @@ int AStarPathfinder::CalcG(int* pPrevCost)
|
||||
return -1;
|
||||
}
|
||||
|
||||
INT16 iDoorGridNo = CurrentNode;
|
||||
INT32 iDoorGridNo = CurrentNode;
|
||||
bool fDoorIsObstacleIfClosed = FALSE;
|
||||
bool fDoorIsOpen = false;
|
||||
switch( nextCost )
|
||||
@@ -1843,8 +1854,8 @@ int AStarPathfinder::CalcGCover(int const NodeIndex,
|
||||
return (min (iCurrentCoverValue, (TRAVELCOST_FLAT * 10 - 1)));
|
||||
}
|
||||
|
||||
int AStarPathfinder::CalcCoverValue(INT16 sMyGridNo, INT32 iMyThreat, INT32 iMyAPsLeft,
|
||||
INT32 myThreatsiOrigRange, INT16 myThreatssGridNo, SOLDIERTYPE* myThreatspOpponent,
|
||||
int AStarPathfinder::CalcCoverValue(INT32 sMyGridNo, INT32 iMyThreat, INT32 iMyAPsLeft,
|
||||
INT32 myThreatsiOrigRange, INT32 myThreatssGridNo, SOLDIERTYPE* myThreatspOpponent,
|
||||
INT32 myThreatsiValue, INT32 myThreatsiAPs, INT32 myThreatsiCertainty)
|
||||
{
|
||||
SOLDIERTYPE* pMe = this->pSoldier;
|
||||
@@ -1852,7 +1863,7 @@ int AStarPathfinder::CalcCoverValue(INT16 sMyGridNo, INT32 iMyThreat, INT32 iMyA
|
||||
|
||||
INT32 iRange = myThreatsiOrigRange;
|
||||
// all 32-bit integers for max. speed
|
||||
INT16 sHisGridNo, sMyRealGridNo, sHisRealGridNo = NOWHERE;
|
||||
INT32 sHisGridNo, sMyRealGridNo, sHisRealGridNo = NOWHERE;
|
||||
INT16 sTempX, sTempY;
|
||||
FLOAT dMyX, dMyY, dHisX, dHisY;
|
||||
INT8 bHisBestCTGT, bHisActualCTGT, bHisCTGT, bMyCTGT;
|
||||
@@ -1908,7 +1919,7 @@ int AStarPathfinder::CalcCoverValue(INT16 sMyGridNo, INT32 iMyThreat, INT32 iMyA
|
||||
{
|
||||
// if we didn't remember his real gridno earlier up above, we got to now,
|
||||
// because calculating worst case is about to play with it in a big way!
|
||||
if (sHisRealGridNo == NOWHERE)
|
||||
if (TileIsOutOfBounds(sHisRealGridNo))
|
||||
{
|
||||
sHisRealGridNo = pHim->sGridNo; // remember where he REALLY is
|
||||
dHisX = pHim->dXPos;
|
||||
@@ -1961,7 +1972,7 @@ int AStarPathfinder::CalcCoverValue(INT16 sMyGridNo, INT32 iMyThreat, INT32 iMyA
|
||||
pMe->dXPos = dMyX; // also change the 'x'
|
||||
pMe->dYPos = dMyY; // and the 'y'
|
||||
|
||||
if (sHisRealGridNo != NOWHERE)
|
||||
if (!TileIsOutOfBounds(sHisRealGridNo))
|
||||
{
|
||||
pHim->sGridNo = sHisRealGridNo; // put HIM back where HE belongs!
|
||||
pHim->dXPos = dHisX; // also change the 'x'
|
||||
@@ -2242,7 +2253,7 @@ bool AStarPathfinder::IsSomeoneInTheWay()
|
||||
if (fPathAroundPeople && ( (CurrentNode != DestNode) || fCopyReachable) )
|
||||
{
|
||||
// ATE: ONLY cancel if they are moving.....
|
||||
UINT8 ubMerc = WhoIsThere2( (UINT16) CurrentNode, pSoldier->pathing.bLevel);
|
||||
UINT8 ubMerc = WhoIsThere2( CurrentNode, pSoldier->pathing.bLevel);
|
||||
if ( ubMerc < NOBODY && ubMerc != pSoldier->ubID )
|
||||
{
|
||||
// Check for movement....
|
||||
@@ -2272,30 +2283,6 @@ INT8 RandomSkipListLevel( void )
|
||||
return( bLevel );
|
||||
}
|
||||
|
||||
BOOLEAN InitPathAI( void )
|
||||
{
|
||||
pathQ = (path_t *) MemAlloc( ABSMAX_PATHQ * sizeof( path_t ) );
|
||||
trailCost = (UINT16 *) MemAlloc( MAPLENGTH * sizeof( TRAILCELLTYPE ) );
|
||||
trailCostUsed = (UINT8 *) MemAlloc( MAPLENGTH );
|
||||
trailTree = (trail_t *) MemAlloc( ABSMAX_TRAIL_TREE * sizeof( trail_t ) );
|
||||
if (!pathQ || !trailCost || !trailCostUsed || !trailTree)
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
pQueueHead = &(pathQ[QHEADNDX]);
|
||||
pClosedHead = &(pathQ[QPOOLNDX]);
|
||||
memset( trailCostUsed, 0, MAPLENGTH );
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
void ShutDownPathAI( void )
|
||||
{
|
||||
MemFree( pathQ );
|
||||
MemFree( trailCostUsed );
|
||||
MemFree( trailCost );
|
||||
MemFree( trailTree );
|
||||
}
|
||||
|
||||
void ReconfigurePathAI( INT32 iNewMaxSkipListLevel, INT32 iNewMaxTrailTree, INT32 iNewMaxPathQ )
|
||||
{
|
||||
// make sure the specified parameters are reasonable
|
||||
@@ -2321,23 +2308,51 @@ void RestorePathAIToDefaults( void )
|
||||
memset( pClosedHead, 0, sizeof( path_t ) );
|
||||
}
|
||||
|
||||
//dnl ch50 071009
|
||||
BOOLEAN InitPathAI(void)
|
||||
{
|
||||
guiPathingData = (UINT32*)MemAlloc(MAX_PATH_DATA_LENGTH * sizeof(UINT32));
|
||||
guiPlottedPath = (UINT32*)MemAlloc(MAX_PATH_DATA_LENGTH * sizeof(UINT32));
|
||||
pathQ = (path_t*)MemAlloc(ABSMAX_PATHQ * sizeof(path_t));
|
||||
trailCost = (UINT16*)MemAlloc(WORLD_MAX * sizeof(TRAILCELLTYPE));
|
||||
trailCostUsed = (UINT8*)MemAlloc(WORLD_MAX);
|
||||
trailTree = (trail_t*)MemAlloc(ABSMAX_TRAIL_TREE * sizeof(trail_t));
|
||||
if(!guiPlottedPath || !guiPathingData || !pathQ || !trailCost || !trailCostUsed || !trailTree)
|
||||
return(FALSE);
|
||||
pQueueHead = &pathQ[QHEADNDX];
|
||||
pClosedHead = &pathQ[QPOOLNDX];
|
||||
memset(trailCostUsed, 0, WORLD_MAX);
|
||||
RestorePathAIToDefaults();
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
void ShutDownPathAI(void)
|
||||
{
|
||||
MemFree(guiPathingData);
|
||||
MemFree(guiPlottedPath);
|
||||
MemFree(pathQ);
|
||||
MemFree(trailCostUsed);
|
||||
MemFree(trailCost);
|
||||
MemFree(trailTree);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// FINDBESTPATH /
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMovementMode, INT8 bCopy, UINT8 fFlags )
|
||||
INT32 FindBestPath(SOLDIERTYPE *s , INT32 sDestination, INT8 ubLevel, INT16 usMovementMode, INT8 bCopy, UINT8 fFlags )
|
||||
{
|
||||
s->sPlotSrcGrid = s->sGridNo;
|
||||
|
||||
#ifdef USE_ASTAR_PATHS
|
||||
int retVal = ASTAR::AStarPathfinder::GetInstance().GetPath(s, sDestination, ubLevel, usMovementMode, bCopy, fFlags);
|
||||
if (retVal || sDestination == NOWHERE) {
|
||||
if (retVal || TileIsOutOfBounds(sDestination)) {
|
||||
return retVal;
|
||||
}
|
||||
else {
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_0, String( "ASTAR path failed!" ) );
|
||||
}
|
||||
|
||||
// if (sDestination == NOWHERE)
|
||||
// if (TileIsOutOfBounds(sDestination))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -2355,7 +2370,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
INT32 newLoc,curLoc;
|
||||
//INT32 curY;
|
||||
INT32 curCost,newTotCost,nextCost;
|
||||
INT16 sCurPathNdx;
|
||||
INT32 sCurPathNdx;
|
||||
INT32 prevCost;
|
||||
INT32 iWaterToWater;
|
||||
INT16 ubCurAPCost,ubAPCost;
|
||||
@@ -2420,16 +2435,38 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
|
||||
fVehicle = FALSE;
|
||||
iOriginationX = iOriginationY = 0;
|
||||
iOrigination = (INT32) s->sGridNo;
|
||||
iOrigination = s->sGridNo;
|
||||
/*
|
||||
//dnl??? ch53 111009
|
||||
if(!GridNoOnVisibleWorldTile(iOrigination))
|
||||
{
|
||||
SendFmtMsg("shuuu=%d,%d", s->ubID, iOrigination);//dnl???
|
||||
//bad!!! return(0);
|
||||
}
|
||||
if(!GridNoOnVisibleWorldTile(iDestination))
|
||||
{
|
||||
//iDestination != (guiWorldCols*guiWorldRows)
|
||||
SendFmtMsg("blaaa=%d,%d", s->ubID, iDestination);//dnl???
|
||||
//bad!!! return(0);
|
||||
}
|
||||
*/
|
||||
if(TileIsOutOfBounds(sDestination) && sDestination != GRIDSIZE)//dnl ch50 071009 GRIDSIZE is use when want to travel all over the map, one of useage is when seeking suitable place for edge points
|
||||
{
|
||||
return(0); // There is no path to nowhere, because everywhere you can go is somewhere!
|
||||
}
|
||||
else if(sDestination < GRIDSIZE && !GridNoOnVisibleWorldTile(iDestination))//dnl ch53 111009
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
if (iOrigination < 0 || iOrigination > WORLD_MAX)
|
||||
if ( TileIsOutOfBounds( iOrigination ) )
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
ScreenMsg( FONT_MCOLOR_RED, MSG_TESTVERSION, L"ERROR! Trying to calculate path from off-world gridno %d to %d", iOrigination, sDestination );
|
||||
#endif
|
||||
return( 0 );
|
||||
}
|
||||
else if (!GridNoOnVisibleWorldTile( (INT16) iOrigination ) )
|
||||
else if (!GridNoOnVisibleWorldTile( iOrigination ))
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
if(!is_networked)ScreenMsg( FONT_MCOLOR_RED, MSG_TESTVERSION, L"ERROR! Trying to calculate path from non-visible gridno %d to %d", iOrigination, sDestination );
|
||||
@@ -2463,7 +2500,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
fCloseGoodEnough = ( (fFlags & PATH_CLOSE_GOOD_ENOUGH) != 0);
|
||||
if ( fCloseGoodEnough )
|
||||
{
|
||||
sClosePathLimit = __min( PythSpacesAway( (INT16)s->sGridNo, sDestination ) - 1, PATH_CLOSE_RADIUS );
|
||||
sClosePathLimit = __min( PythSpacesAway( s->sGridNo, sDestination ) - 1, PATH_CLOSE_RADIUS );
|
||||
if ( sClosePathLimit <= 0 )
|
||||
{
|
||||
return( 0 );
|
||||
@@ -2496,7 +2533,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
if (gubGlobalPathCount == 255)
|
||||
{
|
||||
// reset arrays!
|
||||
memset( trailCostUsed, 0, MAPLENGTH );
|
||||
memset( trailCostUsed, 0, WORLD_MAX );
|
||||
gubGlobalPathCount = 1;
|
||||
}
|
||||
else
|
||||
@@ -2504,8 +2541,8 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
gubGlobalPathCount++;
|
||||
}
|
||||
|
||||
// only allow nowhere destination if distance limit set
|
||||
if (sDestination == NOWHERE)
|
||||
// only allow nowhere destination if distance limit set
|
||||
if (TileIsOutOfBounds(sDestination))
|
||||
{
|
||||
/*
|
||||
if (gubNPCDistLimit == 0)
|
||||
@@ -2637,16 +2674,16 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
//set up common info
|
||||
if (fCopyPathCosts)
|
||||
{
|
||||
iOriginationY = (iOrigination / MAPWIDTH);
|
||||
iOriginationX = (iOrigination % MAPWIDTH);
|
||||
iOriginationY = (iOrigination / WORLD_COLS);
|
||||
iOriginationX = (iOrigination % WORLD_COLS);
|
||||
}
|
||||
|
||||
iDestY = (iDestination / MAPWIDTH);
|
||||
iDestX = (iDestination % MAPWIDTH);
|
||||
iDestY = (iDestination / WORLD_COLS);
|
||||
iDestX = (iDestination % WORLD_COLS);
|
||||
|
||||
// if origin and dest is water, then user wants to stay in water!
|
||||
// so, check and set waterToWater flag accordingly
|
||||
if (iDestination == NOWHERE)
|
||||
// so, check and set waterToWater flag accordingly
|
||||
if (TileIsOutOfBounds(iDestination))
|
||||
{
|
||||
iWaterToWater = 0;
|
||||
}
|
||||
@@ -2668,8 +2705,8 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
pClosedHead->pNext[1] = pClosedHead;
|
||||
|
||||
//setup first path record
|
||||
iLocY = iOrigination / MAPWIDTH;
|
||||
iLocX = iOrigination % MAPWIDTH;
|
||||
iLocY = iOrigination / WORLD_COLS;
|
||||
iLocX = iOrigination % WORLD_COLS;
|
||||
|
||||
SETLOC( pathQ[1], iOrigination );
|
||||
pathQ[1].sPathNdx = 0;
|
||||
@@ -2680,10 +2717,10 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
}
|
||||
else
|
||||
{
|
||||
pathQ[1].usCostToGo = (INT16) REMAININGCOST( &(pathQ[1]) );
|
||||
pathQ[1].usCostToGo = REMAININGCOST( &(pathQ[1]) );
|
||||
}
|
||||
pathQ[1].usTotalCost = pathQ[1].usCostSoFar + pathQ[1].usCostToGo;
|
||||
pathQ[1].ubLegDistance = (UINT8)LEGDISTANCE( iLocX, iLocY, iDestX, iDestY );
|
||||
pathQ[1].ubLegDistance = LEGDISTANCE( iLocX, iLocY, iDestX, iDestY );
|
||||
pathQ[1].bLevel = 1;
|
||||
pQueueHead->pNext[0] = &( pathQ[1] );
|
||||
iSkipListSize++;
|
||||
@@ -2838,7 +2875,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
{
|
||||
if ( iCnt != iLastDir )
|
||||
{
|
||||
if ( !OkayToAddStructureToWorld( (INT16) curLoc, ubLevel, &(pStructureFileRef->pDBStructureRef[ iStructIndex ]), usOKToAddStructID ) )
|
||||
if ( !OkayToAddStructureToWorld( curLoc, ubLevel, &(pStructureFileRef->pDBStructureRef[ iStructIndex ]), usOKToAddStructID ) )
|
||||
{
|
||||
// we have to abort this loop and possibly reset the loop conditions to
|
||||
// search in the other direction (if we haven't already done the other dir)
|
||||
@@ -2877,7 +2914,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
else if ( pStructureFileRef )
|
||||
{
|
||||
// check to make sure it's okay for us to turn to the new direction in our current tile
|
||||
if (!OkayToAddStructureToWorld( (INT16) curLoc, ubLevel, &(pStructureFileRef->pDBStructureRef[ iStructIndex ]), usOKToAddStructID ) )
|
||||
if (!OkayToAddStructureToWorld( curLoc, ubLevel, &(pStructureFileRef->pDBStructureRef[ iStructIndex ]), usOKToAddStructID ) )
|
||||
{
|
||||
goto NEXTDIR;
|
||||
}
|
||||
@@ -2908,14 +2945,14 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
{
|
||||
if ( gfNPCCircularDistLimit )
|
||||
{
|
||||
if (PythSpacesAway( (INT16) iOrigination, (INT16) newLoc) > gubNPCDistLimit)
|
||||
if (PythSpacesAway( iOrigination, newLoc) > gubNPCDistLimit)
|
||||
{
|
||||
goto NEXTDIR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SpacesAway( (INT16) iOrigination, (INT16) newLoc) > gubNPCDistLimit)
|
||||
if (SpacesAway( iOrigination, newLoc) > gubNPCDistLimit)
|
||||
{
|
||||
goto NEXTDIR;
|
||||
}
|
||||
@@ -2965,7 +3002,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
if ( fPathingForPlayer )
|
||||
{
|
||||
// Is this obstcale a hidden tile that has not been revealed yet?
|
||||
if( DoesGridnoContainHiddenStruct( (INT16)newLoc, &fHiddenStructVisible ) )
|
||||
if( DoesGridNoContainHiddenStruct( newLoc, &fHiddenStructVisible ) )
|
||||
{
|
||||
// Are we not visible, if so use terrain costs!
|
||||
if ( !fHiddenStructVisible )
|
||||
@@ -3083,7 +3120,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
if ( fPathingForPlayer && gpWorldLevelData[ iDoorGridNo ].ubExtFlags[0] & MAPELEMENT_EXT_DOOR_STATUS_PRESENT )
|
||||
{
|
||||
// check door status
|
||||
pDoorStatus = GetDoorStatus( (INT16) iDoorGridNo );
|
||||
pDoorStatus = GetDoorStatus( iDoorGridNo );
|
||||
if (pDoorStatus)
|
||||
{
|
||||
fDoorIsOpen = (pDoorStatus->ubFlags & DOOR_PERCEIVED_OPEN) != 0;
|
||||
@@ -3097,7 +3134,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
else
|
||||
{
|
||||
// check door structure
|
||||
pDoorStructure = FindStructure( (INT16) iDoorGridNo, STRUCTURE_ANYDOOR );
|
||||
pDoorStructure = FindStructure( iDoorGridNo, STRUCTURE_ANYDOOR );
|
||||
if (pDoorStructure)
|
||||
{
|
||||
fDoorIsOpen = (pDoorStructure->fFlags & STRUCTURE_OPEN) != 0;
|
||||
@@ -3195,7 +3232,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
if (fPathAroundPeople && ( (newLoc != iDestination) || fCopyReachable) )
|
||||
{
|
||||
// ATE: ONLY cancel if they are moving.....
|
||||
ubMerc = WhoIsThere2( (INT16) newLoc, s->pathing.bLevel);
|
||||
ubMerc = WhoIsThere2( newLoc, s->pathing.bLevel);
|
||||
|
||||
if ( ubMerc < TOTAL_SOLDIERS && ubMerc != s->ubID )
|
||||
{
|
||||
@@ -3222,7 +3259,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
// then 0 1 2 3 4 5 6), we must subtract 1 from the direction
|
||||
// ATE: Send in our existing structure ID so it's ignored!
|
||||
|
||||
if (!OkayToAddStructureToWorld( (INT16) newLoc, ubLevel, &(pStructureFileRef->pDBStructureRef[ iStructIndex ]), usOKToAddStructID ) )
|
||||
if (!OkayToAddStructureToWorld( newLoc, ubLevel, &(pStructureFileRef->pDBStructureRef[ iStructIndex ]), usOKToAddStructID ) )
|
||||
{
|
||||
goto NEXTDIR;
|
||||
}
|
||||
@@ -3469,11 +3506,11 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
|
||||
if ( fCloseGoodEnough )
|
||||
{
|
||||
if ( PythSpacesAway( (INT16)newLoc, sDestination ) <= sClosePathLimit )
|
||||
if ( PythSpacesAway( newLoc, sDestination ) <= sClosePathLimit )
|
||||
{
|
||||
// stop the path here!
|
||||
iDestination = newLoc;
|
||||
sDestination = (INT16) newLoc;
|
||||
sDestination = newLoc;
|
||||
fCloseGoodEnough = FALSE;
|
||||
}
|
||||
}
|
||||
@@ -3607,7 +3644,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
{
|
||||
trailTree[trailTreeNdx].fFlags = 0;
|
||||
}
|
||||
trailTree[trailTreeNdx].sGridNo = (INT16) newLoc;
|
||||
trailTree[trailTreeNdx].sGridNo = newLoc;
|
||||
pNewPtr->sPathNdx = trailTreeNdx;
|
||||
trailTreeNdx++;
|
||||
|
||||
@@ -3621,8 +3658,8 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
return(0);
|
||||
}
|
||||
|
||||
iLocY = newLoc / MAPWIDTH;
|
||||
iLocX = newLoc % MAPWIDTH;
|
||||
iLocY = newLoc / WORLD_COLS;
|
||||
iLocX = newLoc % WORLD_COLS;
|
||||
SETLOC( *pNewPtr, newLoc );
|
||||
pNewPtr->usCostSoFar = (UINT16) newTotCost;
|
||||
pNewPtr->usCostToGo = (UINT16) REMAININGCOST(pNewPtr);
|
||||
@@ -3635,7 +3672,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
pNewPtr->usCostToGo = (UINT16) REMAININGCOST(pNewPtr);
|
||||
}
|
||||
|
||||
pNewPtr->usTotalCost = (UINT16) (newTotCost + pNewPtr->usCostToGo);
|
||||
pNewPtr->usTotalCost = newTotCost + pNewPtr->usCostToGo;
|
||||
pNewPtr->ubLegDistance = (UINT8) LEGDISTANCE( iLocX, iLocY, iDestX, iDestY );
|
||||
|
||||
if (gubNPCAPBudget)
|
||||
@@ -3663,6 +3700,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT16 sDestination, INT8 ubLevel, INT16 usMo
|
||||
pCurr = pQueueHead;
|
||||
uiCost = TOTALCOST( pNewPtr );
|
||||
memset( pUpdate, 0, MAX_SKIPLIST_LEVEL * sizeof( path_t *) );
|
||||
AssertMsg((bSkipListLevel <= MAX_SKIPLIST_LEVEL), String("bSkipListLevel=%d but must be less then %d", bSkipListLevel, MAX_SKIPLIST_LEVEL));//dnl ch50 071009
|
||||
for (iCurrLevel = bSkipListLevel - 1; iCurrLevel >= 0; iCurrLevel--)
|
||||
{
|
||||
pNext = pCurr->pNext[iCurrLevel];
|
||||
@@ -3821,12 +3859,14 @@ ENDOFLOOP:
|
||||
// work finished. Did we find a path?
|
||||
if (pathQNotEmpty && pathFound)
|
||||
{
|
||||
INT16 z,_z,_nextLink; //,tempgrid;
|
||||
//dnl ch53 121009
|
||||
INT16 _nextLink;
|
||||
INT32 z, _z;
|
||||
|
||||
_z=0;
|
||||
z = (INT16) pQueueHead->pNext[0]->sPathNdx;
|
||||
_z = 0;
|
||||
z = pQueueHead->pNext[0]->sPathNdx;
|
||||
|
||||
while (z)
|
||||
while(z)
|
||||
{
|
||||
_nextLink = trailTree[z].nextLink;
|
||||
trailTree[z].nextLink = _z;
|
||||
@@ -3864,7 +3904,7 @@ ENDOFLOOP:
|
||||
z = trailTree[z].nextLink;
|
||||
}
|
||||
|
||||
giPathDataSize = (UINT16) iCnt;
|
||||
giPathDataSize = iCnt;
|
||||
|
||||
}
|
||||
|
||||
@@ -3924,7 +3964,7 @@ ENDOFLOOP:
|
||||
#endif
|
||||
}
|
||||
|
||||
void GlobalReachableTest( INT16 sStartGridNo )
|
||||
void GlobalReachableTest( INT32 sStartGridNo )
|
||||
{
|
||||
SOLDIERTYPE s;
|
||||
INT32 iCurrentGridNo =0;
|
||||
@@ -3943,12 +3983,12 @@ void GlobalReachableTest( INT16 sStartGridNo )
|
||||
}
|
||||
|
||||
ReconfigurePathAI( ABSMAX_SKIPLIST_LEVEL, ABSMAX_TRAIL_TREE, ABSMAX_PATHQ );
|
||||
gubNPCDistLimit = 0;//dnl without this ASTAR will not calculate map edgepoints
|
||||
FindBestPath( &s, NOWHERE, 0, WALKING, COPYREACHABLE, PATH_THROUGH_PEOPLE );
|
||||
gubNPCDistLimit = 0;//dnl without this each save will not calculate properly map edgepoints
|
||||
FindBestPath( &s, GRIDSIZE, 0, WALKING, COPYREACHABLE, PATH_THROUGH_PEOPLE );//dnl ch50 071009
|
||||
RestorePathAIToDefaults();
|
||||
}
|
||||
|
||||
void LocalReachableTest( INT16 sStartGridNo, INT8 bRadius )
|
||||
void LocalReachableTest( INT32 sStartGridNo, INT8 bRadius )
|
||||
{
|
||||
SOLDIERTYPE s;
|
||||
INT32 iCurrentGridNo = 0;
|
||||
@@ -3987,12 +4027,12 @@ void LocalReachableTest( INT16 sStartGridNo, INT8 bRadius )
|
||||
// set the dist limit
|
||||
gubNPCDistLimit = bRadius;
|
||||
// make the function call
|
||||
FindBestPath( &s, NOWHERE, s.pathing.bLevel, WALKING, COPYREACHABLE, PATH_THROUGH_PEOPLE );
|
||||
FindBestPath( &s, GRIDSIZE, s.pathing.bLevel, WALKING, COPYREACHABLE, PATH_THROUGH_PEOPLE );//dnl ch50 071009
|
||||
// reset dist limit
|
||||
gubNPCDistLimit = 0;
|
||||
}
|
||||
|
||||
void GlobalItemsReachableTest( INT16 sStartGridNo1, INT16 sStartGridNo2 )
|
||||
void GlobalItemsReachableTest( INT32 sStartGridNo1, INT32 sStartGridNo2 )
|
||||
{
|
||||
SOLDIERTYPE s;
|
||||
INT32 iCurrentGridNo =0;
|
||||
@@ -4011,19 +4051,20 @@ void GlobalItemsReachableTest( INT16 sStartGridNo1, INT16 sStartGridNo2 )
|
||||
}
|
||||
|
||||
ReconfigurePathAI( ABSMAX_SKIPLIST_LEVEL, ABSMAX_TRAIL_TREE, ABSMAX_PATHQ );
|
||||
FindBestPath( &s, NOWHERE, 0, WALKING, COPYREACHABLE, PATH_THROUGH_PEOPLE );
|
||||
if ( sStartGridNo2 != NOWHERE )
|
||||
FindBestPath( &s, GRIDSIZE, 0, WALKING, COPYREACHABLE, PATH_THROUGH_PEOPLE );//dnl ch50 071009
|
||||
|
||||
if (!TileIsOutOfBounds(sStartGridNo2))
|
||||
{
|
||||
s.sGridNo = sStartGridNo2;
|
||||
FindBestPath( &s, NOWHERE, 0, WALKING, COPYREACHABLE, PATH_THROUGH_PEOPLE );
|
||||
FindBestPath( &s, GRIDSIZE, 0, WALKING, COPYREACHABLE, PATH_THROUGH_PEOPLE );//dnl ch50 071009
|
||||
}
|
||||
RestorePathAIToDefaults();
|
||||
}
|
||||
|
||||
void RoofReachableTest( INT16 sStartGridNo, UINT8 ubBuildingID )
|
||||
void RoofReachableTest( INT32 sStartGridNo, UINT8 ubBuildingID )
|
||||
{
|
||||
SOLDIERTYPE s;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
|
||||
// WDS - Clean up inventory handling
|
||||
//memset( &s, 0, SIZEOF_SOLDIERTYPE );
|
||||
@@ -4034,14 +4075,17 @@ void RoofReachableTest( INT16 sStartGridNo, UINT8 ubBuildingID )
|
||||
|
||||
// clearing flags
|
||||
|
||||
for( sGridNo = 0 ; sGridNo < NOWHERE ; ++sGridNo )
|
||||
//for( sGridNo = 0 ; sGridNo < NOWHERE ; ++sGridNo )
|
||||
//for( sGridNo = 0 ; sGridNo < MAX_MAP_POS; ++sGridNo )
|
||||
for( sGridNo = 0 ; sGridNo < WORLD_MAX ; ++sGridNo )
|
||||
{
|
||||
gpWorldLevelData[ sGridNo ].uiFlags &= (~MAPELEMENT_REACHABLE);
|
||||
|
||||
}
|
||||
|
||||
gubBuildingInfoToSet = ubBuildingID;
|
||||
|
||||
ReconfigurePathAI( ABSMAX_SKIPLIST_LEVEL, ABSMAX_TRAIL_TREE, ABSMAX_PATHQ );
|
||||
FindBestPath( &s, NOWHERE, 1, WALKING, FINDCLIMBPOINTS, 0 );
|
||||
FindBestPath( &s, GRIDSIZE, 1, WALKING, FINDCLIMBPOINTS, 0 );//dnl ch50 071009
|
||||
RestorePathAIToDefaults();
|
||||
|
||||
// set start position to reachable since path code sets it unreachable
|
||||
@@ -4053,7 +4097,7 @@ void RoofReachableTest( INT16 sStartGridNo, UINT8 ubBuildingID )
|
||||
|
||||
void ErasePath(char bEraseOldOne)
|
||||
{
|
||||
INT16 iCnt;
|
||||
INT32 iCnt;
|
||||
|
||||
// NOTE: This routine must be called BEFORE anything happens that changes
|
||||
// a merc's gridno, else the....
|
||||
@@ -4114,14 +4158,14 @@ void ErasePath(char bEraseOldOne)
|
||||
|
||||
|
||||
|
||||
INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget)
|
||||
INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget)
|
||||
{
|
||||
INT16 sTileCost,sPoints=0,sTempGrid,sAnimCost=0;
|
||||
INT16 sTileCost,sPoints=0,sAnimCost=0;
|
||||
INT16 sPointsWalk=0,sPointsCrawl=0,sPointsRun=0,sPointsSwat=0;
|
||||
INT16 sExtraCostStand,sExtraCostSwat,sExtraCostCrawl;
|
||||
INT32 iLastGrid;
|
||||
INT32 iLastGrid, sTempGrid;
|
||||
INT32 iCnt;
|
||||
INT16 sOldGrid=0;
|
||||
INT32 sOldGrid=0;
|
||||
INT16 sFootOrderIndex;
|
||||
INT16 sSwitchValue;
|
||||
INT16 sFootOrder[5] = { GREENSTEPSTART, PURPLESTEPSTART, BLUESTEPSTART,
|
||||
@@ -4131,7 +4175,7 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
|
||||
LEVELNODE *pNode;
|
||||
UINT16 usMovementModeToUseForAPs;
|
||||
BOOLEAN bIgnoreNextCost = FALSE;
|
||||
INT16 sTestGridno;
|
||||
INT32 sTestGridNo;
|
||||
|
||||
if ( bPlot && gusPathShown )
|
||||
{
|
||||
@@ -4139,7 +4183,7 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
|
||||
}
|
||||
|
||||
gusAPtsToMove = 0;
|
||||
sTempGrid = (INT16) pSold->sGridNo;
|
||||
sTempGrid = pSold->sGridNo;
|
||||
|
||||
sFootOrderIndex = 0;
|
||||
|
||||
@@ -4148,7 +4192,7 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
|
||||
// distance limit to reduce the cost of plotting a path to a location we can't reach
|
||||
|
||||
// For now, use known hight adjustment
|
||||
if ( gfRecalculatingExistingPathCost || FindBestPath( pSold, sDestGridno, pSold->pathing.bLevel, usMovementMode, bCopyRoute, 0 ) )
|
||||
if ( gfRecalculatingExistingPathCost || FindBestPath( pSold, sDestGridNo, pSold->pathing.bLevel, usMovementMode, bCopyRoute, 0 ) )
|
||||
{
|
||||
// if soldier would be STARTING to run then he pays a penalty since it takes time to
|
||||
// run full speed
|
||||
@@ -4163,8 +4207,8 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
|
||||
|
||||
|
||||
// We should reduce points for starting to run if first tile is a fence...
|
||||
sTestGridno = NewGridNo(pSold->sGridNo, DirectionInc( (UINT8)guiPathingData[0]));
|
||||
if ( gubWorldMovementCosts[ sTestGridno ][ guiPathingData[0] ][ pSold->pathing.bLevel] == TRAVELCOST_FENCE )
|
||||
sTestGridNo = NewGridNo(pSold->sGridNo, DirectionInc( (UINT8)guiPathingData[0]));
|
||||
if ( gubWorldMovementCosts[ sTestGridNo ][ guiPathingData[0] ][ pSold->pathing.bLevel] == TRAVELCOST_FENCE )
|
||||
{
|
||||
if ( usMovementMode == RUNNING && pSold->usAnimState != RUNNING )
|
||||
{
|
||||
@@ -4530,11 +4574,11 @@ INT16 PlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPl
|
||||
|
||||
}
|
||||
|
||||
INT16 UIPlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget)
|
||||
INT32 UIPlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget)
|
||||
{
|
||||
// This function is specifically for UI calls to the pathing routine, to
|
||||
// check whether the shift key is pressed, etc.
|
||||
INT16 sRet;
|
||||
INT32 sRet;
|
||||
|
||||
if ( _KeyDown( SHIFT ) )
|
||||
{
|
||||
@@ -4552,7 +4596,7 @@ INT16 UIPlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 b
|
||||
bPlot = TRUE;
|
||||
}
|
||||
|
||||
sRet = PlotPath( pSold, sDestGridno, bCopyRoute, bPlot, bStayOn, usMovementMode, bStealth, bReverse, sAPBudget);
|
||||
sRet = PlotPath( pSold, sDestGridNo, bCopyRoute, bPlot, bStayOn, usMovementMode, bStealth, bReverse, sAPBudget);
|
||||
gfPlotDirectPath = FALSE;
|
||||
return( sRet );
|
||||
}
|
||||
@@ -4573,15 +4617,15 @@ INT16 RecalculatePathCost( SOLDIERTYPE *pSoldier, UINT16 usMovementMode )
|
||||
return( sRet );
|
||||
}
|
||||
|
||||
INT16 EstimatePlotPath( SOLDIERTYPE *pSold, INT16 sDestGridno, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget)
|
||||
INT32 EstimatePlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPlot, INT8 bStayOn, UINT16 usMovementMode, INT8 bStealth, INT8 bReverse , INT16 sAPBudget)
|
||||
{
|
||||
// This function is specifically for AI calls to estimate path cost to a location
|
||||
// It sets stuff up to ignore all people
|
||||
INT16 sRet;
|
||||
INT32 sRet;
|
||||
|
||||
gfEstimatePath = TRUE;
|
||||
|
||||
sRet = PlotPath( pSold, sDestGridno, bCopyRoute, bPlot, bStayOn, usMovementMode, bStealth, bReverse, sAPBudget);
|
||||
sRet = PlotPath( pSold, sDestGridNo, bCopyRoute, bPlot, bStayOn, usMovementMode, bStealth, bReverse, sAPBudget);
|
||||
|
||||
gfEstimatePath = FALSE;
|
||||
|
||||
@@ -4702,7 +4746,7 @@ UINT8 InternalDoorTravelCost( SOLDIERTYPE * pSoldier, INT32 iGridNo, UINT8 ubMov
|
||||
if ( fReturnPerceivedValue && gpWorldLevelData[ iDoorGridNo ].ubExtFlags[0] & MAPELEMENT_EXT_DOOR_STATUS_PRESENT )
|
||||
{
|
||||
// check door status
|
||||
pDoorStatus = GetDoorStatus( (INT16) iDoorGridNo );
|
||||
pDoorStatus = GetDoorStatus( iDoorGridNo );
|
||||
if (pDoorStatus)
|
||||
{
|
||||
fDoorIsOpen = (pDoorStatus->ubFlags & DOOR_PERCEIVED_OPEN) != 0;
|
||||
@@ -4716,7 +4760,7 @@ UINT8 InternalDoorTravelCost( SOLDIERTYPE * pSoldier, INT32 iGridNo, UINT8 ubMov
|
||||
else
|
||||
{
|
||||
// check door structure
|
||||
pDoorStructure = FindStructure( (INT16) iDoorGridNo, STRUCTURE_ANYDOOR );
|
||||
pDoorStructure = FindStructure( iDoorGridNo, STRUCTURE_ANYDOOR );
|
||||
if (pDoorStructure)
|
||||
{
|
||||
fDoorIsOpen = (pDoorStructure->fFlags & STRUCTURE_OPEN) != 0;
|
||||
|
||||
+70
-64
@@ -44,7 +44,7 @@ extern BOOLEAN IsValidSecondHandShot( SOLDIERTYPE *pSoldier );
|
||||
|
||||
INT16 GetBreathPerAP( SOLDIERTYPE *pSoldier, UINT16 usAnimState );
|
||||
|
||||
INT16 TerrainActionPoints( SOLDIERTYPE *pSoldier, INT16 sGridno, INT8 bDir, INT8 bLevel )
|
||||
INT16 TerrainActionPoints( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, INT8 bLevel )
|
||||
{
|
||||
INT16 sAPCost = 0;
|
||||
INT16 sSwitchValue;
|
||||
@@ -60,26 +60,26 @@ INT16 TerrainActionPoints( SOLDIERTYPE *pSoldier, INT16 sGridno, INT8 bDir, INT8
|
||||
// switchValue = BackupGridCost[gridno];
|
||||
//else
|
||||
|
||||
sSwitchValue = gubWorldMovementCosts[sGridno][bDir][ bLevel ];
|
||||
sSwitchValue = gubWorldMovementCosts[sGridNo][bDir][ bLevel ];
|
||||
|
||||
// Check reality vs what the player knows....
|
||||
if ( pSoldier->bTeam == gbPlayerNum )
|
||||
{
|
||||
// Is this obstcale a hidden tile that has not been revealed yet?
|
||||
if( DoesGridnoContainHiddenStruct( (INT16)sGridno, &fHiddenStructVisible ) )
|
||||
if( DoesGridNoContainHiddenStruct( sGridNo, &fHiddenStructVisible ) )
|
||||
{
|
||||
// Are we not visible, if so use terrain costs!
|
||||
if ( !fHiddenStructVisible )
|
||||
{
|
||||
// Set cost of terrain!
|
||||
sSwitchValue = gTileTypeMovementCost[ gpWorldLevelData[ sGridno ].ubTerrainID ];
|
||||
sSwitchValue = gTileTypeMovementCost[ gpWorldLevelData[ sGridNo ].ubTerrainID ];
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( sSwitchValue == TRAVELCOST_NOT_STANDING )
|
||||
{
|
||||
// use the cost of the terrain!
|
||||
sSwitchValue = gTileTypeMovementCost[ gpWorldLevelData[ sGridno ].ubTerrainID ];
|
||||
sSwitchValue = gTileTypeMovementCost[ gpWorldLevelData[ sGridNo ].ubTerrainID ];
|
||||
}
|
||||
else if (IS_TRAVELCOST_DOOR( sSwitchValue ))
|
||||
{
|
||||
@@ -88,11 +88,11 @@ INT16 TerrainActionPoints( SOLDIERTYPE *pSoldier, INT16 sGridno, INT8 bDir, INT8
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
sSwitchValue = DoorTravelCost( pSoldier, sGridno, (UINT8) sSwitchValue, (BOOLEAN) (pSoldier->bTeam == gbPlayerNum), NULL );
|
||||
sSwitchValue = DoorTravelCost( pSoldier, sGridNo, (UINT8) sSwitchValue, (BOOLEAN) (pSoldier->bTeam == gbPlayerNum), NULL );
|
||||
}
|
||||
else if (gfPlotPathToExitGrid && sSwitchValue == TRAVELCOST_EXITGRID)
|
||||
{
|
||||
sSwitchValue = gTileTypeMovementCost[ gpWorldLevelData[ sGridno ].ubTerrainID ];
|
||||
sSwitchValue = gTileTypeMovementCost[ gpWorldLevelData[ sGridNo ].ubTerrainID ];
|
||||
}
|
||||
|
||||
if (sSwitchValue >= TRAVELCOST_BLOCKED && sSwitchValue != TRAVELCOST_DOOR )
|
||||
@@ -219,12 +219,12 @@ INT16 BreathPointAdjustmentForCarriedWeight( SOLDIERTYPE * pSoldier )
|
||||
}
|
||||
|
||||
|
||||
INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT16 sGridno,INT8 bDir, UINT16 usMovementMode)
|
||||
INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode)
|
||||
{
|
||||
INT32 iPoints=0;
|
||||
UINT8 ubMovementCost;
|
||||
|
||||
ubMovementCost = gubWorldMovementCosts[sGridno][bDir][0];
|
||||
ubMovementCost = gubWorldMovementCosts[sGridNo][bDir][0];
|
||||
|
||||
switch( ubMovementCost )
|
||||
{
|
||||
@@ -257,9 +257,9 @@ INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT16 sGridno,INT8 bDir, UINT1
|
||||
iPoints = iPoints * BreathPointAdjustmentForCarriedWeight( pSoldier ) / 100;
|
||||
|
||||
// ATE - MAKE MOVEMENT ALWAYS WALK IF IN WATER
|
||||
if ( TERRAIN_IS_WATER( gpWorldLevelData[ sGridno ].ubTerrainID) )
|
||||
if ( TERRAIN_IS_WATER( gpWorldLevelData[ sGridNo ].ubTerrainID) )
|
||||
{
|
||||
usMovementMode = WALKING;
|
||||
usMovementMode = WALKING;
|
||||
}
|
||||
|
||||
// so, then we must modify it for other movement styles and accumulate
|
||||
@@ -298,7 +298,7 @@ INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT16 sGridno,INT8 bDir, UINT1
|
||||
}
|
||||
|
||||
|
||||
INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bDir, UINT16 usMovementMode )
|
||||
INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode )
|
||||
{
|
||||
INT16 sTileCost, sPoints, sSwitchValue;
|
||||
|
||||
@@ -311,6 +311,8 @@ INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bDir, UINT16 u
|
||||
return 100;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Get switch value...
|
||||
sSwitchValue = gubWorldMovementCosts[ sGridNo ][ bDir ][ pSoldier->pathing.bLevel ];
|
||||
|
||||
@@ -398,7 +400,7 @@ INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bDir, UINT16 u
|
||||
return( sPoints );
|
||||
}
|
||||
|
||||
INT16 EstimateActionPointCost( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bDir, UINT16 usMovementMode, INT8 bPathIndex, INT8 bPathLength )
|
||||
INT16 EstimateActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode, INT8 bPathIndex, INT8 bPathLength )
|
||||
{
|
||||
// This action point cost code includes the penalty for having to change
|
||||
// stance after jumping a fence IF our path continues...
|
||||
@@ -1101,13 +1103,13 @@ INT16 CalcAPsToAutofire( INT16 bBaseActionPoints, OBJECTTYPE * pObj, UINT8 bDoAu
|
||||
}
|
||||
|
||||
|
||||
INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurningCost, INT16 bAimTime )
|
||||
INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost, INT16 bAimTime )
|
||||
{
|
||||
UINT16 sAPCost = 0;
|
||||
UINT16 usItemNum;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo;
|
||||
UINT8 ubDirection;
|
||||
INT16 sAdjustedGridNo;
|
||||
INT32 sAdjustedGridNo;
|
||||
UINT32 uiItemClass;
|
||||
BOOLEAN fAddingTurningCost = FALSE;
|
||||
BOOLEAN fAddingRaiseGunCost = FALSE;
|
||||
@@ -1132,7 +1134,6 @@ INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTur
|
||||
if (gGameExternalOptions.fIncreasedAimingCost )
|
||||
{
|
||||
// HEADROCK HAM B2.6: Changed the number of APs to attack when aiming.
|
||||
// HEADROCK HAM 3.1: Externalized the entire function to allow customization of each detail.
|
||||
if (bAimTime > 0)
|
||||
{
|
||||
GetAPChargeForShootOrStabWRTGunRaises( pSoldier, sGridNo, ubAddTurningCost, &fAddingTurningCost, &fAddingRaiseGunCost );
|
||||
@@ -1141,7 +1142,7 @@ INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTur
|
||||
// HEADROCK HAM 3: No idea what should come here... For now I've put my extra gun-raise costs
|
||||
// outside this IF (see below).
|
||||
}
|
||||
|
||||
|
||||
// HEADROCK HAM 3: One-time penalty: Add part of the weapon's Ready AP cost. Reinstated because
|
||||
// it's now externalized.
|
||||
if (gGameExternalOptions.ubFirstAimReadyCostDivisor > 0)
|
||||
@@ -1222,7 +1223,7 @@ INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTur
|
||||
//INT32 cnt;
|
||||
//INT16 sSpot;
|
||||
UINT8 ubGuyThere;
|
||||
INT16 sGotLocation = NOWHERE;
|
||||
INT32 sGotLocation = NOWHERE;
|
||||
BOOLEAN fGotAdjacent = FALSE;
|
||||
SOLDIERTYPE *pTarget;
|
||||
|
||||
@@ -1246,8 +1247,8 @@ INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTur
|
||||
sGotLocation = FindAdjacentPunchTarget( pSoldier, pTarget, &sAdjustedGridNo, &ubDirection );
|
||||
}
|
||||
}
|
||||
|
||||
if ( sGotLocation == NOWHERE && pSoldier->ubBodyType != BLOODCAT )
|
||||
|
||||
if (TileIsOutOfBounds(sGotLocation) && pSoldier->ubBodyType != BLOODCAT )
|
||||
{
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
|
||||
@@ -1261,8 +1262,8 @@ INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTur
|
||||
}
|
||||
fGotAdjacent = TRUE;
|
||||
}
|
||||
|
||||
if ( sGotLocation != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sGotLocation))
|
||||
{
|
||||
if (pSoldier->sGridNo == sGotLocation || !fGotAdjacent )
|
||||
{
|
||||
@@ -1308,7 +1309,7 @@ INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTur
|
||||
return( sAPCost );
|
||||
}
|
||||
|
||||
INT16 MinAPsToAttack(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost)
|
||||
INT16 MinAPsToAttack(SOLDIERTYPE *pSoldier, INT32 sGridno, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost)
|
||||
{
|
||||
INT16 sAPCost = 0;
|
||||
UINT32 uiItemClass;
|
||||
@@ -1421,6 +1422,7 @@ INT16 BaseAPsToShootOrStab( INT16 bAPs, INT16 bAimSkill, OBJECTTYPE * pObj )
|
||||
//{
|
||||
// Top *= 100;
|
||||
//}
|
||||
|
||||
// WANNE : Fixed CTD that occurs when trowing item (grenade, throwing knife, ...)
|
||||
// with open description box in tactical
|
||||
INT16 baseAPsToShootOrStab = -1;
|
||||
@@ -1434,15 +1436,15 @@ INT16 BaseAPsToShootOrStab( INT16 bAPs, INT16 bAimSkill, OBJECTTYPE * pObj )
|
||||
return baseAPsToShootOrStab;
|
||||
}
|
||||
|
||||
void GetAPChargeForShootOrStabWRTGunRaises( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurningCost, BOOLEAN *pfChargeTurning, BOOLEAN *pfChargeRaise )
|
||||
void GetAPChargeForShootOrStabWRTGunRaises( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost, BOOLEAN *pfChargeTurning, BOOLEAN *pfChargeRaise )
|
||||
{
|
||||
UINT8 ubDirection;
|
||||
UINT32 uiMercFlags;
|
||||
UINT16 usTargID;
|
||||
BOOLEAN fAddingTurningCost = FALSE;
|
||||
BOOLEAN fAddingRaiseGunCost = FALSE;
|
||||
|
||||
if ( sGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
// OK, get a direction and see if we need to turn...
|
||||
if (ubAddTurningCost)
|
||||
@@ -1532,7 +1534,7 @@ UINT16 CalculateRaiseGunCost(SOLDIERTYPE *pSoldier, BOOLEAN fAddingRaiseGunCost)
|
||||
return usRaiseGunCost;
|
||||
}
|
||||
|
||||
INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost)
|
||||
INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost)
|
||||
{
|
||||
UINT32 uiMercFlags;
|
||||
UINT16 usTargID;
|
||||
@@ -1583,8 +1585,8 @@ INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurni
|
||||
//charge for turn and/or raise based on the results of fAddingTurningCost & fAddingRaiseGunCost
|
||||
bAPCost += (usTurningCost + usRaiseGunCost);
|
||||
|
||||
|
||||
if ( sGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
// Given a gridno here, check if we are on a guy - if so - get his gridno
|
||||
if ( FindSoldier( sGridNo, &usTargID, &uiMercFlags, FIND_SOLDIER_GRIDNO ) )
|
||||
@@ -1658,14 +1660,14 @@ INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurni
|
||||
}
|
||||
|
||||
|
||||
INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurningCost)
|
||||
INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost)
|
||||
{
|
||||
UINT8 bAPCost = 0;
|
||||
UINT16 usTargID;
|
||||
UINT8 ubDirection;
|
||||
|
||||
// bAimSkill = ( pSoldier->stats.bDexterity + pSoldier->stats.bAgility) / 2;
|
||||
if ( sGridNo != NOWHERE )
|
||||
// bAimSkill = ( pSoldier->stats.bDexterity + pSoldier->stats.bAgility) / 2;
|
||||
if (!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
usTargID = WhoIsThere2( sGridNo, pSoldier->bTargetLevel );
|
||||
|
||||
@@ -1718,19 +1720,22 @@ INT16 MinPtsToMove(SOLDIERTYPE *pSoldier)
|
||||
// look around all 8 directions and return lowest terrain cost
|
||||
UINT8 cnt;
|
||||
INT16 sLowest=127;
|
||||
INT16 sGridno,sCost;
|
||||
INT16 sCost;
|
||||
INT32 sGridNo;
|
||||
|
||||
if ( TANK( pSoldier ) )
|
||||
{
|
||||
return( (INT8)sLowest);
|
||||
}
|
||||
|
||||
for (cnt=0; cnt <= 8; cnt++)
|
||||
// WANNE - BMP: FIX: Valid directions are only from 0-7!!
|
||||
//for (cnt=0; cnt <= 8; cnt++)
|
||||
for (cnt=0; cnt < 8; cnt++)
|
||||
{
|
||||
sGridno = NewGridNo(pSoldier->sGridNo,DirectionInc(cnt));
|
||||
if (sGridno != pSoldier->sGridNo)
|
||||
sGridNo = NewGridNo(pSoldier->sGridNo,DirectionInc(cnt));
|
||||
if (sGridNo != pSoldier->sGridNo)
|
||||
{
|
||||
if ( (sCost=ActionPointCost( pSoldier, sGridno, cnt , pSoldier->usUIMovementMode ) ) < sLowest )
|
||||
if ( (sCost=ActionPointCost( pSoldier, sGridNo, cnt , pSoldier->usUIMovementMode ) ) < sLowest )
|
||||
{
|
||||
sLowest = sCost;
|
||||
}
|
||||
@@ -1741,25 +1746,26 @@ INT16 MinPtsToMove(SOLDIERTYPE *pSoldier)
|
||||
|
||||
INT8 PtsToMoveDirection(SOLDIERTYPE *pSoldier, INT8 bDirection )
|
||||
{
|
||||
INT16 sGridno,sCost;
|
||||
INT16 sCost;
|
||||
INT32 sGridNo;
|
||||
INT8 bOverTerrainType;
|
||||
UINT16 usMoveModeToUse;
|
||||
|
||||
sGridno = NewGridNo( pSoldier->sGridNo, DirectionInc( bDirection ) );
|
||||
sGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( bDirection ) );
|
||||
|
||||
usMoveModeToUse = pSoldier->usUIMovementMode;
|
||||
|
||||
// ATE: Check if the new place is watter and we were tying to run....
|
||||
bOverTerrainType = GetTerrainType( sGridno );
|
||||
bOverTerrainType = GetTerrainType( sGridNo );
|
||||
|
||||
if ( TERRAIN_IS_WATER( bOverTerrainType) )
|
||||
{
|
||||
usMoveModeToUse = WALKING;
|
||||
}
|
||||
|
||||
sCost = ActionPointCost( pSoldier, sGridno, bDirection , usMoveModeToUse );
|
||||
sCost = ActionPointCost( pSoldier, sGridNo, bDirection , usMoveModeToUse );
|
||||
|
||||
if ( gubWorldMovementCosts[ sGridno ][ bDirection ][ pSoldier->pathing.bLevel ] != TRAVELCOST_FENCE )
|
||||
if ( gubWorldMovementCosts[ sGridNo ][ bDirection ][ pSoldier->pathing.bLevel ] != TRAVELCOST_FENCE )
|
||||
{
|
||||
if ( usMoveModeToUse == RUNNING && pSoldier->usAnimState != RUNNING )
|
||||
{
|
||||
@@ -1975,17 +1981,17 @@ void DeductAmmo( SOLDIERTYPE *pSoldier, INT8 bInvPos )
|
||||
}
|
||||
|
||||
|
||||
INT16 GetAPsToPickupItem( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
UINT16 GetAPsToPickupItem( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
UINT16 sAPCost = 0;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo;
|
||||
|
||||
// Check if we are over an item pool
|
||||
if ( GetItemPool( sMapPos, &pItemPool, pSoldier->pathing.bLevel ) )
|
||||
if ( GetItemPool( usMapPos, &pItemPool, pSoldier->pathing.bLevel ) )
|
||||
{
|
||||
// If we are in the same tile, just return pickup cost
|
||||
sActionGridNo = AdjustGridNoForItemPlacement( pSoldier, sMapPos );
|
||||
sActionGridNo = AdjustGridNoForItemPlacement( pSoldier, usMapPos );
|
||||
|
||||
if ( pSoldier->sGridNo != sActionGridNo )
|
||||
{
|
||||
@@ -2008,14 +2014,14 @@ INT16 GetAPsToPickupItem( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
}
|
||||
|
||||
|
||||
INT16 GetAPsToGiveItem( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
UINT16 GetAPsToGiveItem( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
{
|
||||
UINT16 sAPCost = 0;
|
||||
|
||||
sAPCost = PlotPath( pSoldier, sMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
sAPCost = PlotPath( pSoldier, usMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
|
||||
// If point cost is zero, return 0
|
||||
if ( sAPCost != 0 || pSoldier->sGridNo == sMapPos )
|
||||
if ( sAPCost != 0 || pSoldier->sGridNo == usMapPos )
|
||||
{
|
||||
// ADD APS TO PICKUP
|
||||
sAPCost += APBPConstants[AP_GIVE_ITEM];
|
||||
@@ -2139,9 +2145,9 @@ INT16 GetAPsToAutoReload( SOLDIERTYPE * pSoldier )
|
||||
UINT16 GetAPsToReloadRobot( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pRobot )
|
||||
{
|
||||
UINT16 sAPCost = 0;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo;
|
||||
UINT8 ubDirection;
|
||||
INT16 sAdjustedGridNo;
|
||||
INT32 sAdjustedGridNo;
|
||||
|
||||
sActionGridNo = FindAdjacentGridEx( pSoldier, pRobot->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
|
||||
@@ -2273,7 +2279,7 @@ INT16 GetAPsToLook( SOLDIERTYPE *pSoldier )
|
||||
BOOLEAN CheckForMercContMove( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
INT16 sAPCost;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
|
||||
if ( !( gTacticalStatus.uiFlags & INCOMBAT ) )
|
||||
{
|
||||
@@ -2435,7 +2441,7 @@ INT16 GetAPsToRefuelVehicle( SOLDIERTYPE *pSoldier )
|
||||
//#define APBPConstants[AP_MAX_AIM_ATTACK] 4 // maximum permitted extra aiming
|
||||
|
||||
|
||||
INT16 MinAPsToThrow( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurningCost )
|
||||
INT16 MinAPsToThrow( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost )
|
||||
{
|
||||
INT32 iTop, iBottom;
|
||||
INT32 iFullAPs;
|
||||
@@ -2465,8 +2471,8 @@ INT16 MinAPsToThrow( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurningCos
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
||||
if ( sGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
// Given a gridno here, check if we are on a guy - if so - get his gridno
|
||||
if ( FindSoldier( sGridNo, &usTargID, &uiMercFlags, FIND_SOLDIER_GRIDNO ) )
|
||||
@@ -2548,7 +2554,7 @@ INT16 GetAPsToPlantMine( SOLDIERTYPE *pSoldier )
|
||||
return( APBPConstants[AP_BURY_MINE] );
|
||||
}
|
||||
|
||||
INT16 GetTotalAPsToDropBomb( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
UINT16 GetTotalAPsToDropBomb( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
INT16 sAPs = 0;
|
||||
|
||||
@@ -2573,13 +2579,13 @@ INT16 GetAPsToUseRemote( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
INT16 GetAPsToStealItem( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
INT16 GetAPsToStealItem( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
{
|
||||
INT16 sAPCost = 0;
|
||||
|
||||
if (sMapPos != -1)
|
||||
if (usMapPos != -1)
|
||||
{
|
||||
sAPCost = PlotPath( pSoldier, sMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
sAPCost = PlotPath( pSoldier, usMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
}
|
||||
|
||||
// ADD APS TO PICKUP
|
||||
@@ -2601,11 +2607,11 @@ INT16 GetBPsToStealItem( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
INT16 GetAPsToUseJar( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
INT16 GetAPsToUseJar( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
{
|
||||
INT16 sAPCost = 0;
|
||||
|
||||
sAPCost = PlotPath( pSoldier, sMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
sAPCost = PlotPath( pSoldier, usMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
|
||||
// If point cost is zero, return 0
|
||||
if ( sAPCost != 0 )
|
||||
@@ -2618,11 +2624,11 @@ INT16 GetAPsToUseJar( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
|
||||
}
|
||||
|
||||
INT16 GetAPsToUseCan( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
INT16 GetAPsToUseCan( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
{
|
||||
INT16 sAPCost = 0;
|
||||
|
||||
sAPCost = PlotPath( pSoldier, sMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
sAPCost = PlotPath( pSoldier, usMapPos, NO_COPYROUTE, NO_PLOT, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints );
|
||||
|
||||
// If point cost is zero, return 0
|
||||
if ( sAPCost != 0 )
|
||||
|
||||
+16
-16
@@ -278,37 +278,37 @@ extern INT16 APBPConstants[TOTAL_APBP_VALUES];
|
||||
|
||||
INT16 BaseAPsToShootOrStab( INT16 bAPs, INT16 bAimSkill, OBJECTTYPE * pObj );
|
||||
|
||||
INT16 TerrainActionPoints( SOLDIERTYPE *pSoldier, INT16 sGridno, INT8 bDir, INT8 bLevel );
|
||||
INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bDir, UINT16 usMovementMode );
|
||||
INT16 EstimateActionPointCost( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bDir, UINT16 usMovementMode, INT8 bPathIndex, INT8 bPathLength );
|
||||
INT16 TerrainActionPoints( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, INT8 bLevel );
|
||||
INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode );
|
||||
INT16 EstimateActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 usMovementMode, INT8 bPathIndex, INT8 bPathLength );
|
||||
BOOLEAN SelectedMercCanAffordMove( );
|
||||
|
||||
BOOLEAN EnoughPoints( SOLDIERTYPE *pSoldier, INT16 sAPCost, INT32 iBPCost, BOOLEAN fDisplayMsg );
|
||||
void DeductPoints( SOLDIERTYPE *pSoldier, INT16 sAPCost, INT32 iBPCost, BOOLEAN fProactive = TRUE );
|
||||
INT32 AdjustBreathPts(SOLDIERTYPE *pSold, INT32 iBPCost);
|
||||
void UnusedAPsToBreath(SOLDIERTYPE *pSold);
|
||||
INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT16 sGridno,INT8 bDir, UINT16 usMovementMode);
|
||||
INT16 MinAPsToAttack(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost = 0);
|
||||
INT16 TerrainBreathPoints(SOLDIERTYPE * pSoldier, INT32 sGridNo,INT8 bDir, UINT16 usMovementMode);
|
||||
INT16 MinAPsToAttack(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost = 0);
|
||||
INT16 MinPtsToMove(SOLDIERTYPE *pSoldier);
|
||||
INT8 MinAPsToStartMovement( SOLDIERTYPE * pSoldier, UINT16 usMovementMode );
|
||||
INT8 PtsToMoveDirection(SOLDIERTYPE *pSoldier, INT8 bDirection );
|
||||
UINT16 CalculateTurningCost(SOLDIERTYPE *pSoldier, UINT16 usItem, BOOLEAN fAddingTurningCost);
|
||||
UINT16 CalculateRaiseGunCost(SOLDIERTYPE *pSoldier, BOOLEAN fAddingRaiseGunCost);
|
||||
INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost = 0 );
|
||||
INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost = 0 );
|
||||
BOOLEAN EnoughAmmo( SOLDIERTYPE *pSoldier, BOOLEAN fDisplay, INT8 bInvPos );
|
||||
void DeductAmmo( SOLDIERTYPE *pSoldier, INT8 bInvPos );
|
||||
|
||||
|
||||
INT16 GetAPsToPickupItem( SOLDIERTYPE *pSoldier, INT16 sMapPos );
|
||||
INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost );
|
||||
INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, INT16 bAimTime );
|
||||
UINT16 GetAPsToPickupItem( SOLDIERTYPE *pSoldier, INT32 usMapPos );
|
||||
INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost );
|
||||
INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost, INT16 bAimTime );
|
||||
INT16 CalcAPsToBurst( INT16 bBaseActionPoints, OBJECTTYPE * pObj );
|
||||
INT16 CalcAPsToAutofire( INT16 bBaseActionPoints, OBJECTTYPE * pObj, UINT8 bDoAutofire );
|
||||
INT16 GetAPsToChangeStance( SOLDIERTYPE *pSoldier, INT8 bDesiredHeight );
|
||||
INT16 GetBPsToChangeStance( SOLDIERTYPE *pSoldier, INT8 bDesiredHeight );
|
||||
|
||||
INT16 GetAPsToLook( SOLDIERTYPE *pSoldier );
|
||||
INT16 GetAPsToGiveItem( SOLDIERTYPE *pSoldier, INT16 sMapPos );
|
||||
UINT16 GetAPsToGiveItem( SOLDIERTYPE *pSoldier, INT32 usMapPos );
|
||||
|
||||
BOOLEAN CheckForMercContMove( SOLDIERTYPE *pSoldier );
|
||||
|
||||
@@ -325,23 +325,23 @@ INT16 GetAPsToBeginFirstAid( SOLDIERTYPE *pSoldier );
|
||||
INT16 GetAPsToBeginRepair( SOLDIERTYPE *pSoldier );
|
||||
INT16 GetAPsToRefuelVehicle( SOLDIERTYPE *pSoldier );
|
||||
|
||||
INT16 MinAPsToThrow( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurningCost );
|
||||
INT16 MinAPsToThrow( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost );
|
||||
|
||||
INT16 GetAPsToDropBomb( SOLDIERTYPE *pSoldier );
|
||||
INT16 GetAPsToPlantMine( SOLDIERTYPE *pSoldier );
|
||||
INT16 GetTotalAPsToDropBomb( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
UINT16 GetTotalAPsToDropBomb( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
INT16 GetAPsToUseRemote( SOLDIERTYPE *pSoldier );
|
||||
|
||||
INT16 GetAPsToStealItem( SOLDIERTYPE *pSoldier, INT16 sMapPos );
|
||||
INT16 GetAPsToStealItem( SOLDIERTYPE *pSoldier, INT32 usMapPos );
|
||||
INT16 GetBPsToStealItem( SOLDIERTYPE *pSoldier );
|
||||
|
||||
INT16 GetAPsToUseJar( SOLDIERTYPE *pSoldier, INT16 sMapPos );
|
||||
INT16 GetAPsToUseCan( SOLDIERTYPE *pSoldier, INT16 sMapPos );
|
||||
INT16 GetAPsToUseJar( SOLDIERTYPE *pSoldier, INT32 usMapPos );
|
||||
INT16 GetAPsToUseCan( SOLDIERTYPE *pSoldier, INT32 usMapPos );
|
||||
INT16 GetBPsTouseJar( SOLDIERTYPE *pSoldier );
|
||||
|
||||
INT16 GetAPsToJumpOver( SOLDIERTYPE *pSoldier );
|
||||
|
||||
void GetAPChargeForShootOrStabWRTGunRaises( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTurningCost, BOOLEAN *pfChargeTurning, BOOLEAN *pfChargeRaise );
|
||||
void GetAPChargeForShootOrStabWRTGunRaises( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubAddTurningCost, BOOLEAN *pfChargeTurning, BOOLEAN *pfChargeRaise );
|
||||
|
||||
UINT16 GetAPsToReloadRobot( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pRobot );
|
||||
INT16 GetAPsToReloadGunWithAmmo( SOLDIERTYPE *pSoldier, OBJECTTYPE * pGun, OBJECTTYPE * pAmmo, BOOLEAN usAllAPs = TRUE );
|
||||
|
||||
@@ -81,7 +81,7 @@ extern UINT32 guiCurrentUICursor;
|
||||
extern void DetermineWhichAssignmentMenusCanBeShown( void );
|
||||
extern void DetermineWhichMilitiaControlMenusCanBeShown( void );
|
||||
extern BOOLEAN gfIgnoreOnSelectedGuy;
|
||||
extern INT16 gsOverItemsGridNo;
|
||||
extern INT32 gsOverItemsGridNo;
|
||||
extern INT16 gsOverItemsLevel;
|
||||
extern UINT32 guiUITargetSoldierId;
|
||||
extern BOOLEAN gfUIShowExitSouth;
|
||||
@@ -112,17 +112,17 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT32 uiMercFlags;
|
||||
static UINT32 uiSingleClickTime;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
static BOOLEAN fDoubleClickIntercepted = FALSE;
|
||||
static BOOLEAN fValidDoubleClickPossible = FALSE;
|
||||
static BOOLEAN fCanCheckForSpeechAdvance = FALSE;
|
||||
static INT16 sMoveClickGridNo = 0;
|
||||
static INT32 sMoveClickGridNo = 0;
|
||||
|
||||
|
||||
// LEFT MOUSE BUTTON
|
||||
if ( gViewportRegion.uiFlags & MSYS_MOUSE_IN_AREA )
|
||||
{
|
||||
if (!GetMouseMapPos( &sMapPos ) && !gfUIShowExitSouth )
|
||||
if (!GetMouseMapPos( &usMapPos ) && !gfUIShowExitSouth )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -166,7 +166,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
{
|
||||
if ( pSoldier->bDoBurst )
|
||||
{
|
||||
pSoldier->sStartGridNo = sMapPos;
|
||||
pSoldier->sStartGridNo = usMapPos;
|
||||
ResetBurstLocations( );
|
||||
*puiNewEvent = A_CHANGE_TO_CONFIM_ACTION;
|
||||
}
|
||||
@@ -207,7 +207,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
{
|
||||
INT8 bReturnCode;
|
||||
|
||||
bReturnCode = HandleMoveModeInteractiveClick( sMapPos, puiNewEvent );
|
||||
bReturnCode = HandleMoveModeInteractiveClick( usMapPos, puiNewEvent );
|
||||
|
||||
if ( bReturnCode == -1 )
|
||||
{
|
||||
@@ -234,7 +234,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
|
||||
if ( gusSelectedSoldier != NOBODY )
|
||||
{
|
||||
if ( ( fResult = UIOKMoveDestination( MercPtrs[ gusSelectedSoldier ], sMapPos ) ) == 1 )
|
||||
if ( ( fResult = UIOKMoveDestination( MercPtrs[ gusSelectedSoldier ], usMapPos ) ) == 1 )
|
||||
{
|
||||
if ( gsCurrentActionPoints != 0 )
|
||||
{
|
||||
@@ -412,7 +412,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
{
|
||||
if ( pSoldier->bDoBurst )
|
||||
{
|
||||
pSoldier->sEndGridNo = sMapPos;
|
||||
pSoldier->sEndGridNo = usMapPos;
|
||||
|
||||
gfBeginBurstSpreadTracking = FALSE;
|
||||
|
||||
@@ -451,7 +451,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
{
|
||||
if ( gpItemPointer != NULL )
|
||||
{
|
||||
if ( HandleItemPointerClick( sMapPos ) )
|
||||
if ( HandleItemPointerClick( usMapPos ) )
|
||||
{
|
||||
// getout of mode
|
||||
EndItemPointer( );
|
||||
@@ -495,7 +495,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
|
||||
case HANDCURSOR_MODE:
|
||||
|
||||
HandleHandCursorClick( sMapPos, puiNewEvent );
|
||||
HandleHandCursorClick( usMapPos, puiNewEvent );
|
||||
break;
|
||||
|
||||
case ACTION_MODE:
|
||||
@@ -643,7 +643,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
{
|
||||
INT8 bReturnCode;
|
||||
|
||||
bReturnCode = HandleMoveModeInteractiveClick( sMapPos, puiNewEvent );
|
||||
bReturnCode = HandleMoveModeInteractiveClick( usMapPos, puiNewEvent );
|
||||
|
||||
if ( bReturnCode == -1 )
|
||||
{
|
||||
@@ -658,7 +658,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
//}/
|
||||
//else
|
||||
{
|
||||
INT16 sIntTileGridNo;
|
||||
INT32 sIntTileGridNo;
|
||||
|
||||
if( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
@@ -705,7 +705,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
|
||||
if ( gusSelectedSoldier != NOBODY )
|
||||
{
|
||||
if ( ( fResult = UIOKMoveDestination( MercPtrs[ gusSelectedSoldier ], sMapPos ) ) == 1 )
|
||||
if ( ( fResult = UIOKMoveDestination( MercPtrs[ gusSelectedSoldier ], usMapPos ) ) == 1 )
|
||||
{
|
||||
if ( gfUIAllMoveOn )
|
||||
{
|
||||
@@ -939,11 +939,11 @@ void QueryRTRightButton( UINT32 *puiNewEvent )
|
||||
static BOOLEAN fValidDoubleClickPossible = FALSE;
|
||||
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
|
||||
if ( gViewportRegion.uiFlags & MSYS_MOUSE_IN_AREA )
|
||||
{
|
||||
if (!GetMouseMapPos( &sMapPos ) )
|
||||
if (!GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -982,7 +982,7 @@ void QueryRTRightButton( UINT32 *puiNewEvent )
|
||||
if ( gfUICanBeginAllMoveCycle )
|
||||
{
|
||||
// ATE: Here, check if we can do this....
|
||||
if ( !UIOKMoveDestination( MercPtrs[ gusSelectedSoldier ], sMapPos ) )
|
||||
if ( !UIOKMoveDestination( MercPtrs[ gusSelectedSoldier ], usMapPos ) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ CANT_MOVE_THERE_STR ] );
|
||||
gfRTClickLeftHoldIntercepted = TRUE;
|
||||
@@ -1189,7 +1189,7 @@ void QueryRTRightButton( UINT32 *puiNewEvent )
|
||||
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
HandleRightClickAdjustCursor( pSoldier, sMapPos );
|
||||
HandleRightClickAdjustCursor( pSoldier, usMapPos );
|
||||
}
|
||||
fClickIntercepted = TRUE;
|
||||
break;
|
||||
@@ -1244,21 +1244,21 @@ void QueryRTRightButton( UINT32 *puiNewEvent )
|
||||
}
|
||||
|
||||
|
||||
extern BOOLEAN ConfirmActionCancel( INT16 sMapPos, UINT16 usOldMapPos );
|
||||
extern BOOLEAN ConfirmActionCancel( INT32 usMapPos, INT32 usOldMapPos );
|
||||
|
||||
extern BOOLEAN gUIActionModeChangeDueToMouseOver;
|
||||
|
||||
|
||||
void GetRTMousePositionInput( UINT32 *puiNewEvent )
|
||||
{
|
||||
INT16 sMapPos;
|
||||
static UINT16 usOldMapPos = 0;
|
||||
INT32 usMapPos;
|
||||
static INT32 usOldMapPos = 0;
|
||||
static UINT32 uiMoveTargetSoldierId = NOBODY;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
static BOOLEAN fOnValidGuy = FALSE;
|
||||
|
||||
|
||||
if (!GetMouseMapPos( &sMapPos ) )
|
||||
if (!GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -1294,7 +1294,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
|
||||
case JUMPOVER_MODE:
|
||||
|
||||
// ATE: Make sure!
|
||||
if ( gsJumpOverGridNo != sMapPos )
|
||||
if ( gsJumpOverGridNo != usMapPos )
|
||||
{
|
||||
*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
}
|
||||
@@ -1376,7 +1376,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
|
||||
|
||||
case MOVE_MODE:
|
||||
|
||||
if ( sMapPos != usOldMapPos )
|
||||
if ( usMapPos != usOldMapPos )
|
||||
{
|
||||
// Set off ALL move....
|
||||
gfUIAllMoveOn = FALSE;
|
||||
@@ -1397,10 +1397,10 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
|
||||
ubItemCursor = GetActionModeCursor( pSoldier );
|
||||
|
||||
//
|
||||
if ( IsValidJumpLocation( pSoldier, sMapPos, TRUE ) )
|
||||
if ( IsValidJumpLocation( pSoldier, usMapPos, TRUE ) )
|
||||
{
|
||||
*puiNewEvent = JP_ON_TERRAIN;
|
||||
gsJumpOverGridNo = sMapPos;
|
||||
gsJumpOverGridNo = usMapPos;
|
||||
return;
|
||||
}
|
||||
else
|
||||
@@ -1481,7 +1481,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
|
||||
|
||||
case CONFIRM_MOVE_MODE:
|
||||
|
||||
if ( sMapPos != usOldMapPos )
|
||||
if ( usMapPos != usOldMapPos )
|
||||
{
|
||||
// Switch event out of confirm mode
|
||||
// Set off ALL move....
|
||||
@@ -1498,7 +1498,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
|
||||
{
|
||||
if ( pSoldier->bDoBurst )
|
||||
{
|
||||
pSoldier->sEndGridNo = sMapPos;
|
||||
pSoldier->sEndGridNo = usMapPos;
|
||||
|
||||
|
||||
if ( pSoldier->sEndGridNo != pSoldier->sStartGridNo && fLeftButtonDown )
|
||||
@@ -1510,7 +1510,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
|
||||
if ( pSoldier->flags.fDoSpread )
|
||||
{
|
||||
// Accumulate gridno
|
||||
AccumulateBurstLocation( sMapPos );
|
||||
AccumulateBurstLocation( usMapPos );
|
||||
|
||||
*puiNewEvent = CA_ON_TERRAIN;
|
||||
break;
|
||||
@@ -1533,7 +1533,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ConfirmActionCancel( sMapPos, usOldMapPos ) )
|
||||
if ( ConfirmActionCancel( usMapPos, usOldMapPos ) )
|
||||
{
|
||||
// Switch event out of confirm mode
|
||||
*puiNewEvent = CA_END_CONFIRM_ACTION;
|
||||
@@ -1557,7 +1557,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
|
||||
// }
|
||||
//}
|
||||
|
||||
usOldMapPos = sMapPos;
|
||||
usOldMapPos = usMapPos;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -458,27 +458,27 @@ UINT16 GetCorpseStructIndex( ROTTING_CORPSE_DEFINITION *pCorpseDef, BOOLEAN fFor
|
||||
|
||||
INT32 AddRottingCorpse( ROTTING_CORPSE_DEFINITION *pCorpseDef )
|
||||
{
|
||||
INT32 iIndex;
|
||||
ROTTING_CORPSE *pCorpse;
|
||||
ANITILE_PARAMS AniParams;
|
||||
UINT8 ubLevelID;
|
||||
STRUCTURE_FILE_REF * pStructureFileRef = NULL;
|
||||
CHAR8 zFilename[150];
|
||||
DB_STRUCTURE_REF *pDBStructureRef;
|
||||
UINT8 ubLoop;
|
||||
INT16 sTileGridNo;
|
||||
DB_STRUCTURE_TILE ** ppTile;
|
||||
UINT16 usStructIndex;
|
||||
UINT32 uiDirectionUseFlag;
|
||||
|
||||
if ( pCorpseDef->sGridNo == NOWHERE )
|
||||
INT32 iIndex;
|
||||
ROTTING_CORPSE *pCorpse;
|
||||
ANITILE_PARAMS AniParams;
|
||||
UINT8 ubLevelID;
|
||||
STRUCTURE_FILE_REF *pStructureFileRef = NULL;
|
||||
CHAR8 zFilename[150];
|
||||
DB_STRUCTURE_REF *pDBStructureRef;
|
||||
UINT8 ubLoop;
|
||||
INT32 sTileGridNo;
|
||||
DB_STRUCTURE_TILE **ppTile;
|
||||
UINT16 usStructIndex;
|
||||
UINT32 uiDirectionUseFlag;
|
||||
|
||||
if (TileIsOutOfBounds(pCorpseDef->sGridNo))
|
||||
{
|
||||
return( -1 );
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
if ( pCorpseDef->ubType == NO_CORPSE )
|
||||
{
|
||||
return( -1 );
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
if( ( iIndex = GetFreeRottingCorpse() )==(-1) )
|
||||
@@ -782,8 +782,8 @@ BOOLEAN CreateCorpsePalette( ROTTING_CORPSE *pCorpse )
|
||||
|
||||
|
||||
BOOLEAN TurnSoldierIntoCorpse( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveMerc, BOOLEAN fCheckForLOS )
|
||||
{
|
||||
if ( pSoldier->sGridNo == NOWHERE )
|
||||
{
|
||||
if (TileIsOutOfBounds(pSoldier->sGridNo))
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -796,7 +796,7 @@ BOOLEAN TurnSoldierIntoCorpse( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveMerc, BOOLE
|
||||
INT8 bVisible = -1;
|
||||
OBJECTTYPE *pObj;
|
||||
UINT8 ubNumGoo;
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
// ATE: Change to fix crash when item in hand
|
||||
if ( gpItemPointer != NULL && gpItemPointerSoldier == pSoldier )
|
||||
{
|
||||
@@ -1032,7 +1032,7 @@ BOOLEAN TurnSoldierIntoCorpse( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveMerc, BOOLE
|
||||
INT16 FindNearestRottingCorpse( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
INT16 sLowestGridNo = NOWHERE;
|
||||
INT32 sLowestGridNo = NOWHERE;
|
||||
INT32 cnt;
|
||||
ROTTING_CORPSE *pCorpse;
|
||||
|
||||
@@ -1067,7 +1067,7 @@ void AddCrowToCorpse( ROTTING_CORPSE *pCorpse )
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
INT8 bBodyType = CROW;
|
||||
UINT8 iNewIndex;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT8 ubDirection;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT8 ubRoomNum;
|
||||
@@ -1094,8 +1094,8 @@ void AddCrowToCorpse( ROTTING_CORPSE *pCorpse )
|
||||
pSoldier = MercPtrs[ iNewIndex ];
|
||||
|
||||
sGridNo = FindRandomGridNoFromSweetSpot( pSoldier, pCorpse->def.sGridNo, 2, &ubDirection );
|
||||
|
||||
if ( sGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
pSoldier->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
|
||||
pSoldier->usStrategicInsertionData = sGridNo;
|
||||
@@ -1147,7 +1147,7 @@ void HandleCrowLeave( SOLDIERTYPE *pSoldier )
|
||||
void HandleCrowFlyAway( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
UINT8 ubDirection;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
|
||||
// Set desired height
|
||||
pSoldier->sDesiredHeight = 100;
|
||||
@@ -1260,7 +1260,7 @@ void AllMercsOnTeamLookForCorpse( ROTTING_CORPSE *pCorpse, INT8 bTeam )
|
||||
{
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
|
||||
// If this cump is already visible, return
|
||||
if ( pCorpse->def.bVisible == 1 )
|
||||
@@ -1281,8 +1281,8 @@ void AllMercsOnTeamLookForCorpse( ROTTING_CORPSE *pCorpse, INT8 bTeam )
|
||||
// look for all mercs on the same team,
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ bTeam ].bLastID; cnt++,pSoldier++ )
|
||||
{
|
||||
// ATE: Ok, lets check for some basic things here!
|
||||
if ( pSoldier->stats.bLife >= OKLIFE && pSoldier->sGridNo != NOWHERE && pSoldier->bActive && pSoldier->bInSector )
|
||||
// ATE: Ok, lets check for some basic things here!
|
||||
if ( pSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pSoldier->sGridNo) && pSoldier->bActive && pSoldier->bInSector )
|
||||
{
|
||||
// and we can trace a line of sight to his x,y coordinates?
|
||||
// (taking into account we are definitely aware of this guy now)
|
||||
@@ -1430,7 +1430,7 @@ BOOLEAN CreateCorpseShadedPalette( ROTTING_CORPSE *pCorpse, UINT32 uiBase, SGPPa
|
||||
}
|
||||
|
||||
|
||||
ROTTING_CORPSE *FindCorpseBasedOnStructure( INT16 sGridNo, STRUCTURE *pStructure )
|
||||
ROTTING_CORPSE *FindCorpseBasedOnStructure( INT32 sGridNo, STRUCTURE *pStructure )
|
||||
{
|
||||
LEVELNODE *pLevelNode;
|
||||
ROTTING_CORPSE *pCorpse = NULL;
|
||||
@@ -1455,12 +1455,12 @@ ROTTING_CORPSE *FindCorpseBasedOnStructure( INT16 sGridNo, STRUCTURE *pStructure
|
||||
}
|
||||
|
||||
|
||||
void CorpseHit( INT16 sGridNo, UINT16 usStructureID )
|
||||
void CorpseHit( INT32 sGridNo, UINT16 usStructureID )
|
||||
{
|
||||
#if 0
|
||||
STRUCTURE *pStructure, *pBaseStructure;
|
||||
ROTTING_CORPSE *pCorpse = NULL;
|
||||
INT16 sBaseGridNo;
|
||||
INT32 sBaseGridNo;
|
||||
|
||||
pStructure = FindStructureByID( sGridNo, usStructureID );
|
||||
|
||||
@@ -1506,11 +1506,11 @@ void CorpseHit( INT16 sGridNo, UINT16 usStructureID )
|
||||
}
|
||||
|
||||
|
||||
void VaporizeCorpse( INT16 sGridNo, UINT16 usStructureID )
|
||||
void VaporizeCorpse( INT32 sGridNo, UINT16 usStructureID )
|
||||
{
|
||||
STRUCTURE *pStructure, *pBaseStructure;
|
||||
ROTTING_CORPSE *pCorpse = NULL;
|
||||
INT16 sBaseGridNo;
|
||||
INT32 sBaseGridNo;
|
||||
ANITILE_PARAMS AniParams;
|
||||
|
||||
pStructure = FindStructureByID( sGridNo, usStructureID );
|
||||
@@ -1569,15 +1569,15 @@ void VaporizeCorpse( INT16 sGridNo, UINT16 usStructureID )
|
||||
|
||||
}
|
||||
|
||||
INT16 FindNearestAvailableGridNoForCorpse( ROTTING_CORPSE_DEFINITION *pDef, INT8 ubRadius )
|
||||
INT32 FindNearestAvailableGridNoForCorpse( ROTTING_CORPSE_DEFINITION *pDef, INT8 ubRadius )
|
||||
{
|
||||
INT16 sSweetGridNo;
|
||||
INT32 sSweetGridNo;
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2, cnt3;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
INT16 sLowestGridNo=0;
|
||||
INT32 sLowestGridNo=0;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
SOLDIERTYPE soldier;
|
||||
@@ -1632,7 +1632,7 @@ INT16 FindNearestAvailableGridNoForCorpse( ROTTING_CORPSE_DEFINITION *pDef, INT8
|
||||
|
||||
//Now, find out which of these gridnos are reachable
|
||||
//(use the fake soldier and the pathing settings)
|
||||
FindBestPath( &soldier, NOWHERE, 0, WALKING, COPYREACHABLE, 0 );
|
||||
FindBestPath( &soldier, GRIDSIZE, 0, WALKING, COPYREACHABLE, 0 );//dnl ch50 071009
|
||||
|
||||
uiLowestRange = 999999;
|
||||
|
||||
@@ -1661,7 +1661,7 @@ INT16 FindNearestAvailableGridNoForCorpse( ROTTING_CORPSE_DEFINITION *pDef, INT8
|
||||
{
|
||||
for( cnt3 = 0; cnt3 < 8; cnt3++ )
|
||||
{
|
||||
if ( OkayToAddStructureToWorld( (INT16)sGridNo, pDef->bLevel, &(pStructureFileRef->pDBStructureRef[gOneCDirection[ cnt3 ]]), INVALID_STRUCTURE_ID ) )
|
||||
if ( OkayToAddStructureToWorld( sGridNo, pDef->bLevel, &(pStructureFileRef->pDBStructureRef[gOneCDirection[ cnt3 ]]), INVALID_STRUCTURE_ID ) )
|
||||
{
|
||||
fDirectionFound = TRUE;
|
||||
fCanSetDirection = TRUE;
|
||||
@@ -1717,10 +1717,10 @@ BOOLEAN IsValidDecapitationCorpse( ROTTING_CORPSE *pCorpse )
|
||||
}
|
||||
|
||||
|
||||
ROTTING_CORPSE *GetCorpseAtGridNo( INT16 sGridNo, INT8 bLevel )
|
||||
ROTTING_CORPSE *GetCorpseAtGridNo( INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
STRUCTURE *pStructure, *pBaseStructure;
|
||||
INT16 sBaseGridNo;
|
||||
INT32 sBaseGridNo;
|
||||
|
||||
pStructure = FindStructure( sGridNo, STRUCTURE_CORPSE );
|
||||
|
||||
@@ -1742,7 +1742,7 @@ ROTTING_CORPSE *GetCorpseAtGridNo( INT16 sGridNo, INT8 bLevel )
|
||||
}
|
||||
|
||||
|
||||
void DecapitateCorpse( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel )
|
||||
void DecapitateCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
ROTTING_CORPSE *pCorpse;
|
||||
ROTTING_CORPSE_DEFINITION CorpseDef;
|
||||
@@ -1880,7 +1880,7 @@ void ReduceAmmoDroppedByNonPlayerSoldiers( SOLDIERTYPE *pSoldier, INT32 iInvSlot
|
||||
}
|
||||
|
||||
|
||||
void LookForAndMayCommentOnSeeingCorpse( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubLevel )
|
||||
void LookForAndMayCommentOnSeeingCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubLevel )
|
||||
{
|
||||
ROTTING_CORPSE *pCorpse;
|
||||
INT8 bToleranceThreshold = 0;
|
||||
@@ -1914,35 +1914,35 @@ void LookForAndMayCommentOnSeeingCorpse( SOLDIERTYPE *pSoldier, INT16 sGridNo, U
|
||||
// Check tolerance
|
||||
if ( pSoldier->bCorpseQuoteTolerance <= bToleranceThreshold )
|
||||
{
|
||||
// Say quote...
|
||||
// Say quote...
|
||||
TacticalCharacterDialogue( pSoldier, QUOTE_HEADSHOT );
|
||||
|
||||
BeginMultiPurposeLocator( sGridNo, ubLevel, FALSE );
|
||||
BeginMultiPurposeLocator( sGridNo, ubLevel, FALSE );
|
||||
|
||||
// Reset values....
|
||||
pSoldier->bCorpseQuoteTolerance = (INT8)( Random(3) + 1 );
|
||||
// Reset values....
|
||||
pSoldier->bCorpseQuoteTolerance = (INT8)( Random(3) + 1 );
|
||||
|
||||
// 50% chance of adding 1 to other mercs....
|
||||
if ( Random( 2 ) == 1 )
|
||||
{
|
||||
// IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED!
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
// 50% chance of adding 1 to other mercs....
|
||||
if ( Random( 2 ) == 1 )
|
||||
{
|
||||
// IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED!
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
|
||||
// look for all mercs on the same team,
|
||||
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ )
|
||||
{
|
||||
// ATE: Ok, lets check for some basic things here!
|
||||
if ( pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->sGridNo != NOWHERE && pTeamSoldier->bActive && pTeamSoldier->bInSector )
|
||||
// look for all mercs on the same team,
|
||||
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ )
|
||||
{
|
||||
pTeamSoldier->bCorpseQuoteTolerance++;
|
||||
// ATE: Ok, lets check for some basic things here!
|
||||
if ( pTeamSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pTeamSoldier->sGridNo) && pTeamSoldier->bActive && pTeamSoldier->bInSector )
|
||||
{
|
||||
pTeamSoldier->bCorpseQuoteTolerance++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INT16 GetGridNoOfCorpseGivenProfileID( UINT8 ubProfileID )
|
||||
INT32 GetGridNoOfCorpseGivenProfileID( UINT8 ubProfileID )
|
||||
{
|
||||
INT32 cnt;
|
||||
ROTTING_CORPSE *pCorpse;
|
||||
@@ -1981,7 +1981,7 @@ void DecayRottingCorpseAIWarnings( void )
|
||||
|
||||
}
|
||||
|
||||
UINT8 GetNearestRottingCorpseAIWarning( INT16 sGridNo )
|
||||
UINT8 GetNearestRottingCorpseAIWarning( INT32 sGridNo )
|
||||
{
|
||||
INT32 cnt;
|
||||
ROTTING_CORPSE * pCorpse;
|
||||
|
||||
@@ -89,7 +89,7 @@ typedef struct
|
||||
{
|
||||
UINT8 ubType;
|
||||
UINT8 ubBodyType;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
FLOAT dXPos;
|
||||
FLOAT dYPos;
|
||||
INT16 sHeightAdjustment;
|
||||
@@ -155,14 +155,14 @@ void RebuildAllCorpseShadeTables( );
|
||||
|
||||
UINT16 CreateCorpsePaletteTables( ROTTING_CORPSE *pCorpse );
|
||||
|
||||
INT16 FindNearestAvailableGridNoForCorpse( ROTTING_CORPSE_DEFINITION *pCorpseDef, INT8 ubRadius );
|
||||
INT32 FindNearestAvailableGridNoForCorpse( ROTTING_CORPSE_DEFINITION *pCorpseDef, INT8 ubRadius );
|
||||
|
||||
|
||||
void HandleRottingCorpses( );
|
||||
void AddCrowToCorpse( ROTTING_CORPSE *pCorpse );
|
||||
|
||||
void VaporizeCorpse( INT16 sGridNo, UINT16 usStructureID );
|
||||
void CorpseHit( INT16 sGridNo, UINT16 usStructureID );
|
||||
void VaporizeCorpse( INT32 sGridNo, UINT16 usStructureID );
|
||||
void CorpseHit( INT32 sGridNo, UINT16 usStructureID );
|
||||
|
||||
void HandleCrowLeave( SOLDIERTYPE *pSoldier );
|
||||
|
||||
@@ -177,19 +177,19 @@ extern std::vector<ROTTING_CORPSE> gRottingCorpse;
|
||||
extern INT32 giNumRottingCorpse;
|
||||
extern UINT8 gb4DirectionsFrom8[8];
|
||||
|
||||
ROTTING_CORPSE *GetCorpseAtGridNo( INT16 sGridNo , INT8 bLevel );
|
||||
ROTTING_CORPSE *GetCorpseAtGridNo( INT32 sGridNo , INT8 bLevel );
|
||||
BOOLEAN IsValidDecapitationCorpse( ROTTING_CORPSE *pCorpse );
|
||||
void DecapitateCorpse( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel );
|
||||
void DecapitateCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel );
|
||||
|
||||
void GetBloodFromCorpse( SOLDIERTYPE *pSoldier );
|
||||
|
||||
UINT16 GetCorpseStructIndex( ROTTING_CORPSE_DEFINITION *pCorpseDef, BOOLEAN fForImage );
|
||||
|
||||
void LookForAndMayCommentOnSeeingCorpse( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubLevel );
|
||||
void LookForAndMayCommentOnSeeingCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubLevel );
|
||||
|
||||
INT16 GetGridNoOfCorpseGivenProfileID( UINT8 ubProfileID );
|
||||
INT32 GetGridNoOfCorpseGivenProfileID( UINT8 ubProfileID );
|
||||
|
||||
void DecayRottingCorpseAIWarnings( void );
|
||||
UINT8 GetNearestRottingCorpseAIWarning( INT16 sGridNo );
|
||||
UINT8 GetNearestRottingCorpseAIWarning( INT32 sGridNo );
|
||||
|
||||
#endif
|
||||
@@ -53,6 +53,7 @@
|
||||
#include "Soldier Create.h"
|
||||
#include "PATHAI.h"
|
||||
#include "Points.h"
|
||||
#include "InterfaceItemImages.h"
|
||||
#endif
|
||||
|
||||
#include "BuildDefines.h"
|
||||
@@ -623,7 +624,7 @@ void InitShopKeeperItemDescBox( OBJECTTYPE *pObject, UINT8 ubPocket, UINT8 ubF
|
||||
void StartSKIDescriptionBox( void );
|
||||
|
||||
BOOLEAN ShopkeeperAutoPlaceObject( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fNewItem );
|
||||
void ShopkeeperAddItemToPool( INT16 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel );
|
||||
void ShopkeeperAddItemToPool( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel );
|
||||
|
||||
void IfMercOwnedCopyItemToMercInv( INVENTORY_IN_SLOT *pInv );
|
||||
void IfMercOwnedRemoveItemFromMercInv( INVENTORY_IN_SLOT *pInv );
|
||||
@@ -881,7 +882,7 @@ BOOLEAN EnterShopKeeperInterface()
|
||||
|
||||
// First get an adjacent gridno....
|
||||
UINT8 ubDirection;
|
||||
INT16 sActionGridNo = FindAdjacentGridEx( pSoldier, pShopkeeper->sGridNo, &ubDirection, NULL, FALSE, TRUE );
|
||||
INT32 sActionGridNo = FindAdjacentGridEx( pSoldier, pShopkeeper->sGridNo, &ubDirection, NULL, FALSE, TRUE );
|
||||
|
||||
if ( sActionGridNo == -1 )
|
||||
{
|
||||
@@ -889,7 +890,7 @@ BOOLEAN EnterShopKeeperInterface()
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
if ( UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, FALSE, TEMPORARY, (UINT16)pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints ) == 0 )
|
||||
if ( UIPlotPath( pSoldier, sActionGridNo, NO_COPYROUTE, FALSE, TEMPORARY, pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints ) == 0 )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ NO_PATH ] );
|
||||
return( FALSE );
|
||||
@@ -897,7 +898,7 @@ BOOLEAN EnterShopKeeperInterface()
|
||||
|
||||
// Walk up and talk to buddy....
|
||||
gfNPCCircularDistLimit = TRUE;
|
||||
INT16 sGoodGridNo = FindGridNoFromSweetSpotWithStructData( pSoldier, pSoldier->usUIMovementMode, pShopkeeper->sGridNo, (NPC_TALK_RADIUS-1), &ubDirection, TRUE );
|
||||
INT32 sGoodGridNo = FindGridNoFromSweetSpotWithStructData( pSoldier, pSoldier->usUIMovementMode, pShopkeeper->sGridNo, (NPC_TALK_RADIUS-1), &ubDirection, TRUE );
|
||||
gfNPCCircularDistLimit = FALSE;
|
||||
|
||||
// Now walkup to talk....
|
||||
@@ -2724,7 +2725,8 @@ UINT32 DisplayInvSlot( UINT8 ubSlotNum, UINT16 usItemIndex, UINT16 usPosX, UINT1
|
||||
//Display the item graphic, and price
|
||||
pItem = &Item[ usItemIndex ];
|
||||
GetVideoObject( &hVObject, GetInterfaceGraphicForItem( pItem ) );
|
||||
pTrav = &(hVObject->pETRLEObject[ pItem->ubGraphicNum ] );
|
||||
UINT16 usGraphicNum = g_bUsePngItemImages ? 0 : pItem->ubGraphicNum;
|
||||
pTrav = &(hVObject->pETRLEObject[ usGraphicNum ] );
|
||||
|
||||
usHeight = (UINT32)pTrav->usHeight;
|
||||
usWidth = (UINT32)pTrav->usWidth;
|
||||
@@ -2738,10 +2740,10 @@ UINT32 DisplayInvSlot( UINT8 ubSlotNum, UINT16 usItemIndex, UINT16 usPosX, UINT1
|
||||
|
||||
|
||||
//blt the shadow of the item
|
||||
if(gGameSettings.fOptions[ TOPTION_SHOW_ITEM_SHADOW ]) BltVideoObjectOutlineShadowFromIndex( FRAME_BUFFER, GetInterfaceGraphicForItem( pItem ), pItem->ubGraphicNum, sCenX-2, sCenY+2);
|
||||
if(gGameSettings.fOptions[ TOPTION_SHOW_ITEM_SHADOW ]) BltVideoObjectOutlineShadowFromIndex( FRAME_BUFFER, GetInterfaceGraphicForItem( pItem ), g_bUsePngItemImages ? 0 : pItem->ubGraphicNum, sCenX-2, sCenY+2);
|
||||
|
||||
//blt the item
|
||||
BltVideoObjectOutlineFromIndex( FRAME_BUFFER, GetInterfaceGraphicForItem( pItem ), pItem->ubGraphicNum, sCenX, sCenY, Get16BPPColor( FROMRGB( 255, 255, 255 ) ), fHighlighted );
|
||||
BltVideoObjectOutlineFromIndex( FRAME_BUFFER, GetInterfaceGraphicForItem( pItem ), g_bUsePngItemImages ? 0 : pItem->ubGraphicNum, sCenX, sCenY, Get16BPPColor( FROMRGB( 255, 255, 255 ) ), fHighlighted );
|
||||
|
||||
//Display the status of the item
|
||||
DrawItemUIBarEx( pItemObject, 0, (INT16)(usPosX+2), (INT16)(usPosY+2+20), 2, 20, Get16BPPColor( FROMRGB( 140, 136, 119 ) ), Get16BPPColor( FROMRGB( 140, 136, 119 ) ), TRUE, guiRENDERBUFFER );//guiSAVEBUFFER
|
||||
@@ -4304,7 +4306,7 @@ void SetSkiCursor( UINT16 usCursor )
|
||||
|
||||
// Set mouse
|
||||
guiExternVo = GetInterfaceGraphicForItem( &(Item[ gMoveingItem.sItemIndex ]) );
|
||||
gusExternVoSubIndex = Item[ gMoveingItem.sItemIndex ].ubGraphicNum;
|
||||
gusExternVoSubIndex = g_bUsePngItemImages ? 0 : Item[ gMoveingItem.sItemIndex ].ubGraphicNum;
|
||||
SetCurrentCursorFromDatabase( EXTERN_CURSOR );
|
||||
|
||||
MSYS_ChangeRegionCursor( &gSMPanelRegion, usCursor );
|
||||
@@ -6798,7 +6800,7 @@ BOOLEAN ShopkeeperAutoPlaceObject( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObject,
|
||||
|
||||
// The Shopkeeper interface *MUST* use this intermediary function instead of calling AddItemToPool() directly!
|
||||
// This is because the OBJECTTYPEs used within Shopkeeper may contain an illegal ubNumberOfObjects
|
||||
void ShopkeeperAddItemToPool( INT16 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel )
|
||||
void ShopkeeperAddItemToPool( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel )
|
||||
{
|
||||
// the entire pObj will get memset to 0 by RemoveObjs() if all the items are successfully placed,
|
||||
// so we have to keep a copy to retrieve with every iteration of the loop
|
||||
@@ -6963,7 +6965,7 @@ BOOLEAN SKITryToAddInvToMercsInventory( INVENTORY_IN_SLOT *pInv, SOLDIERTYPE *pS
|
||||
BOOLEAN CanMercInteractWithSelectedShopkeeper( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
SOLDIERTYPE *pShopkeeper;
|
||||
INT16 sDestGridNo;
|
||||
INT32 sDestGridNo;
|
||||
INT8 bDestLevel;
|
||||
UINT32 uiRange;
|
||||
|
||||
@@ -7007,7 +7009,7 @@ BOOLEAN CanMercInteractWithSelectedShopkeeper( SOLDIERTYPE *pSoldier )
|
||||
|
||||
#ifdef JA2TESTVERSION
|
||||
|
||||
void AddShopkeeperToGridNo( UINT8 ubProfile, INT16 sGridNo )
|
||||
void AddShopkeeperToGridNo( UINT8 ubProfile, INT32 sGridNo )
|
||||
{
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
INT16 sSectorX, sSectorY;
|
||||
|
||||
@@ -143,7 +143,7 @@ void DealerGetsBribed( UINT8 ubProfileId, UINT32 uiMoneyAmount );
|
||||
|
||||
|
||||
#ifdef JA2TESTVERSION
|
||||
void AddShopkeeperToGridNo( UINT8 ubProfile, INT16 sGridNo );
|
||||
void AddShopkeeperToGridNo( UINT8 ubProfile, INT32 sGridNo );
|
||||
#endif
|
||||
|
||||
void RestrictSkiMouseCursor();
|
||||
|
||||
+82
-81
@@ -34,9 +34,9 @@ class OBJECTTYPE;
|
||||
class SOLDIERTYPE;
|
||||
|
||||
// Adds a soldier to a world gridno and set's direction
|
||||
void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection, BOOLEAN fUseAnimation, UINT16 usAnimState, UINT16 usAnimCode );
|
||||
void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDirection, BOOLEAN fUseAnimation, UINT16 usAnimState, UINT16 usAnimCode );
|
||||
|
||||
INT16 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc );
|
||||
INT32 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc );
|
||||
|
||||
|
||||
// SO, STEPS IN CREATING A MERC!
|
||||
@@ -61,14 +61,14 @@ INT16 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAni
|
||||
|
||||
//Kris: modified to actually path from sweetspot to gridno. Previously, it only checked if the
|
||||
//destination was sittable (though it was possible that that location would be trapped.
|
||||
INT16 FindGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection )
|
||||
INT32 FindGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection )
|
||||
{
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2;
|
||||
INT16 sGridNo;
|
||||
INT32 sTop, sBottom;
|
||||
INT32 sLeft, sRight;
|
||||
INT32 cnt1, cnt2;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
INT16 sLowestGridNo=-1;
|
||||
INT32 sLowestGridNo = NOWHERE;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
SOLDIERTYPE soldier;
|
||||
@@ -112,7 +112,7 @@ INT16 FindGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 u
|
||||
|
||||
//Now, find out which of these gridnos are reachable
|
||||
//(use the fake soldier and the pathing settings)
|
||||
FindBestPath( &soldier, NOWHERE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );
|
||||
FindBestPath( &soldier, GRIDSIZE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );//dnl ch50 071009
|
||||
|
||||
uiLowestRange = 999999;
|
||||
|
||||
@@ -162,14 +162,14 @@ INT16 FindGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 u
|
||||
}
|
||||
}
|
||||
|
||||
INT16 FindGridNoFromSweetSpotThroughPeople( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection )
|
||||
INT32 FindGridNoFromSweetSpotThroughPeople( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection )
|
||||
{
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2;
|
||||
INT16 sGridNo;
|
||||
INT32 sTop, sBottom;
|
||||
INT32 sLeft, sRight;
|
||||
INT32 cnt1, cnt2;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
INT16 sLowestGridNo=-1;
|
||||
INT32 sLowestGridNo = NOWHERE;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
SOLDIERTYPE soldier;
|
||||
@@ -213,7 +213,7 @@ INT16 FindGridNoFromSweetSpotThroughPeople( SOLDIERTYPE *pSoldier, INT16 sSweetG
|
||||
|
||||
//Now, find out which of these gridnos are reachable
|
||||
//(use the fake soldier and the pathing settings)
|
||||
FindBestPath( &soldier, NOWHERE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );
|
||||
FindBestPath( &soldier, GRIDSIZE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );//dnl ch50 071009
|
||||
|
||||
uiLowestRange = 999999;
|
||||
|
||||
@@ -261,14 +261,14 @@ INT16 FindGridNoFromSweetSpotThroughPeople( SOLDIERTYPE *pSoldier, INT16 sSweetG
|
||||
|
||||
//Kris: modified to actually path from sweetspot to gridno. Previously, it only checked if the
|
||||
//destination was sittable (though it was possible that that location would be trapped.
|
||||
INT16 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc )
|
||||
INT32 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc )
|
||||
{
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2, cnt3;
|
||||
INT16 sGridNo;
|
||||
INT32 sTop, sBottom;
|
||||
INT32 sLeft, sRight;
|
||||
INT32 cnt1, cnt2, cnt3;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
INT16 sLowestGridNo=-1;
|
||||
INT32 sLowestGridNo = NOWHERE;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
SOLDIERTYPE soldier;
|
||||
@@ -320,7 +320,7 @@ INT16 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAni
|
||||
|
||||
//Now, find out which of these gridnos are reachable
|
||||
//(use the fake soldier and the pathing settings)
|
||||
FindBestPath( &soldier, NOWHERE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );
|
||||
FindBestPath( &soldier, GRIDSIZE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );//dnl ch50 071009
|
||||
|
||||
uiLowestRange = 999999;
|
||||
|
||||
@@ -371,7 +371,7 @@ INT16 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAni
|
||||
// Check each struct in each direction
|
||||
for( cnt3 = 0; cnt3 < 8; cnt3++ )
|
||||
{
|
||||
if (OkayToAddStructureToWorld( (INT16)sGridNo, pSoldier->pathing.bLevel, &(pStructureFileRef->pDBStructureRef[gOneCDirection[ cnt3 ]]), usOKToAddStructID ) )
|
||||
if (OkayToAddStructureToWorld( sGridNo, pSoldier->pathing.bLevel, &(pStructureFileRef->pDBStructureRef[gOneCDirection[ cnt3 ]]), usOKToAddStructID ) )
|
||||
{
|
||||
fDirectionFound = TRUE;
|
||||
break;
|
||||
@@ -423,14 +423,14 @@ INT16 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAni
|
||||
}
|
||||
|
||||
|
||||
INT16 FindGridNoFromSweetSpotWithStructDataUsingGivenDirectionFirst( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc, INT8 bGivenDirection )
|
||||
INT32 FindGridNoFromSweetSpotWithStructDataUsingGivenDirectionFirst( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc, INT8 bGivenDirection )
|
||||
{
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2, cnt3;
|
||||
INT16 sGridNo;
|
||||
INT32 sTop, sBottom;
|
||||
INT32 sLeft, sRight;
|
||||
INT32 cnt1, cnt2, cnt3;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
INT16 sLowestGridNo=-1;
|
||||
INT32 sLowestGridNo = NOWHERE;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
SOLDIERTYPE soldier;
|
||||
@@ -483,7 +483,7 @@ INT16 FindGridNoFromSweetSpotWithStructDataUsingGivenDirectionFirst( SOLDIERTYPE
|
||||
|
||||
//Now, find out which of these gridnos are reachable
|
||||
//(use the fake soldier and the pathing settings)
|
||||
FindBestPath( &soldier, NOWHERE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );
|
||||
FindBestPath( &soldier, GRIDSIZE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );//dnl ch50 071009
|
||||
|
||||
uiLowestRange = 999999;
|
||||
|
||||
@@ -532,7 +532,7 @@ INT16 FindGridNoFromSweetSpotWithStructDataUsingGivenDirectionFirst( SOLDIERTYPE
|
||||
}
|
||||
|
||||
// OK, check the perfered given direction first
|
||||
if (OkayToAddStructureToWorld( (INT16)sGridNo, pSoldier->pathing.bLevel, &(pStructureFileRef->pDBStructureRef[gOneCDirection[ bGivenDirection ]]), usOKToAddStructID ) )
|
||||
if (OkayToAddStructureToWorld( sGridNo, pSoldier->pathing.bLevel, &(pStructureFileRef->pDBStructureRef[gOneCDirection[ bGivenDirection ]]), usOKToAddStructID ) )
|
||||
{
|
||||
fDirectionFound = TRUE;
|
||||
cnt3 = bGivenDirection;
|
||||
@@ -544,7 +544,7 @@ INT16 FindGridNoFromSweetSpotWithStructDataUsingGivenDirectionFirst( SOLDIERTYPE
|
||||
{
|
||||
if ( cnt3 != bGivenDirection )
|
||||
{
|
||||
if (OkayToAddStructureToWorld( (INT16)sGridNo, pSoldier->pathing.bLevel, &(pStructureFileRef->pDBStructureRef[gOneCDirection[ cnt3 ]]), usOKToAddStructID ) )
|
||||
if (OkayToAddStructureToWorld( sGridNo, pSoldier->pathing.bLevel, &(pStructureFileRef->pDBStructureRef[gOneCDirection[ cnt3 ]]), usOKToAddStructID ) )
|
||||
{
|
||||
fDirectionFound = TRUE;
|
||||
break;
|
||||
@@ -597,20 +597,20 @@ INT16 FindGridNoFromSweetSpotWithStructDataUsingGivenDirectionFirst( SOLDIERTYPE
|
||||
}
|
||||
|
||||
|
||||
INT16 FindGridNoFromSweetSpotWithStructDataFromSoldier( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc, SOLDIERTYPE *pSrcSoldier )
|
||||
INT32 FindGridNoFromSweetSpotWithStructDataFromSoldier( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc, SOLDIERTYPE *pSrcSoldier )
|
||||
{
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2, cnt3;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
INT16 sLowestGridNo=-1;
|
||||
INT32 sLowestGridNo = NOWHERE;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
INT16 ubSaveNPCAPBudget;
|
||||
UINT8 ubSaveNPCDistLimit;
|
||||
UINT8 ubBestDirection=0;
|
||||
INT16 sSweetGridNo;
|
||||
INT32 sSweetGridNo = NOWHERE;
|
||||
SOLDIERTYPE soldier;
|
||||
|
||||
sSweetGridNo = pSrcSoldier->sGridNo;
|
||||
@@ -652,7 +652,7 @@ INT16 FindGridNoFromSweetSpotWithStructDataFromSoldier( SOLDIERTYPE *pSoldier, U
|
||||
}
|
||||
|
||||
//Now, find out which of these gridnos are reachable
|
||||
FindBestPath( &soldier, NOWHERE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );
|
||||
FindBestPath( &soldier, GRIDSIZE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );//dnl ch50 071009
|
||||
|
||||
uiLowestRange = 999999;
|
||||
|
||||
@@ -693,7 +693,7 @@ INT16 FindGridNoFromSweetSpotWithStructDataFromSoldier( SOLDIERTYPE *pSoldier, U
|
||||
// Check each struct in each direction
|
||||
for( cnt3 = 0; cnt3 < 8; cnt3++ )
|
||||
{
|
||||
if (OkayToAddStructureToWorld( (INT16)sGridNo, pSoldier->pathing.bLevel, &(pStructureFileRef->pDBStructureRef[gOneCDirection[ cnt3 ]]), usOKToAddStructID ) )
|
||||
if (OkayToAddStructureToWorld( sGridNo, pSoldier->pathing.bLevel, &(pStructureFileRef->pDBStructureRef[gOneCDirection[ cnt3 ]]), usOKToAddStructID ) )
|
||||
{
|
||||
fDirectionFound = TRUE;
|
||||
break;
|
||||
@@ -752,14 +752,14 @@ INT16 FindGridNoFromSweetSpotWithStructDataFromSoldier( SOLDIERTYPE *pSoldier, U
|
||||
}
|
||||
|
||||
|
||||
INT16 FindGridNoFromSweetSpotExcludingSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection )
|
||||
INT32 FindGridNoFromSweetSpotExcludingSweetSpot( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection )
|
||||
{
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
INT16 sLowestGridNo=-1;
|
||||
INT32 sLowestGridNo = NOWHERE;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
|
||||
@@ -820,14 +820,14 @@ INT16 FindGridNoFromSweetSpotExcludingSweetSpot( SOLDIERTYPE *pSoldier, INT16 sS
|
||||
}
|
||||
|
||||
|
||||
INT16 FindGridNoFromSweetSpotExcludingSweetSpotInQuardent( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, INT8 ubQuardentDir )
|
||||
INT32 FindGridNoFromSweetSpotExcludingSweetSpotInQuardent( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, INT8 ubQuardentDir )
|
||||
{
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
INT32 uiRange, uiLowestRange = 999999;
|
||||
INT16 sLowestGridNo=-1;
|
||||
INT32 sLowestGridNo = NOWHERE;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
|
||||
@@ -894,10 +894,10 @@ INT16 FindGridNoFromSweetSpotExcludingSweetSpotInQuardent( SOLDIERTYPE *pSoldier
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN CanSoldierReachGridNoInGivenTileLimit( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 sMaxTiles, INT8 bLevel )
|
||||
BOOLEAN CanSoldierReachGridNoInGivenTileLimit( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 sMaxTiles, INT8 bLevel )
|
||||
{
|
||||
INT32 iNumTiles;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo = NOWHERE;
|
||||
UINT8 ubDirection;
|
||||
|
||||
if ( pSoldier->pathing.bLevel != bLevel )
|
||||
@@ -930,19 +930,19 @@ BOOLEAN CanSoldierReachGridNoInGivenTileLimit( SOLDIERTYPE *pSoldier, INT16 sGri
|
||||
}
|
||||
|
||||
|
||||
INT16 FindRandomGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection )
|
||||
INT32 FindRandomGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection )
|
||||
{
|
||||
INT16 sX, sY;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
UINT32 cnt = 0;
|
||||
SOLDIERTYPE soldier;
|
||||
INT16 ubSaveNPCAPBudget;
|
||||
UINT8 ubSaveNPCDistLimit;
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2;
|
||||
INT32 sTop, sBottom;
|
||||
INT32 sLeft, sRight;
|
||||
INT32 cnt1, cnt2;
|
||||
UINT8 ubRoomNum;
|
||||
|
||||
//Save AI pathing vars. changing the distlimit restricts how
|
||||
@@ -980,7 +980,7 @@ INT16 FindRandomGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo,
|
||||
|
||||
//Now, find out which of these gridnos are reachable
|
||||
//(use the fake soldier and the pathing settings)
|
||||
FindBestPath( &soldier, NOWHERE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );
|
||||
FindBestPath( &soldier, GRIDSIZE, 0, WALKING, COPYREACHABLE, ( PATH_IGNORE_PERSON_AT_DEST | PATH_THROUGH_PEOPLE ) );//dnl ch50 071009
|
||||
|
||||
do
|
||||
{
|
||||
@@ -1032,10 +1032,10 @@ INT16 FindRandomGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo,
|
||||
|
||||
}
|
||||
|
||||
INT16 FindRandomGridNoFromSweetSpotExcludingSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection )
|
||||
INT32 FindRandomGridNoFromSweetSpotExcludingSweetSpot( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection )
|
||||
{
|
||||
INT16 sX, sY;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
INT32 leftmost;
|
||||
BOOLEAN fFound = FALSE;
|
||||
UINT32 cnt = 0;
|
||||
@@ -1086,8 +1086,8 @@ BOOLEAN InternalAddSoldierToSector( UINT8 ubID, BOOLEAN fCalculateDirection, BOO
|
||||
UINT8 ubDirection = 0;
|
||||
UINT8 ubCalculatedDirection = 0;
|
||||
SOLDIERTYPE *pSoldier = 0;
|
||||
INT16 sGridNo = 0;
|
||||
INT16 sExitGridNo = 0;
|
||||
INT32 sGridNo = NOWHERE;
|
||||
INT32 sExitGridNo = NOWHERE;
|
||||
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("InternalAddSoldierToSector"));
|
||||
|
||||
@@ -1145,8 +1145,8 @@ BOOLEAN InternalAddSoldierToSector( UINT8 ubID, BOOLEAN fCalculateDirection, BOO
|
||||
ubDirection = pSoldier->ubInsertionDirection;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( pSoldier->sInsertionGridNo == NOWHERE )
|
||||
{
|
||||
if(TileIsOutOfBounds(pSoldier->sInsertionGridNo))
|
||||
{ //Add the soldier to the respective entrypoint. This is an error condition.
|
||||
// So treat it like an error already then
|
||||
|
||||
@@ -1156,8 +1156,8 @@ BOOLEAN InternalAddSoldierToSector( UINT8 ubID, BOOLEAN fCalculateDirection, BOO
|
||||
if( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE )
|
||||
{
|
||||
sGridNo = FindGridNoFromSweetSpotWithStructDataUsingGivenDirectionFirst( pSoldier, STANDING, pSoldier->sInsertionGridNo, 12, &ubCalculatedDirection, FALSE, pSoldier->ubInsertionDirection );
|
||||
// ATE: Override insertion direction
|
||||
if (sGridNo == NOWHERE)
|
||||
// ATE: Override insertion direction
|
||||
if (TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
// Well, we gotta place this soldier/vehicle somewhere. Just use the first position for now
|
||||
sGridNo = pSoldier->sGridNo = pSoldier->sInsertionGridNo;
|
||||
@@ -1174,13 +1174,14 @@ BOOLEAN InternalAddSoldierToSector( UINT8 ubID, BOOLEAN fCalculateDirection, BOO
|
||||
sGridNo = pSoldier->sInsertionGridNo;
|
||||
ubCalculatedDirection = pSoldier->ubDirection;
|
||||
}
|
||||
else sGridNo = FindGridNoFromSweetSpot( pSoldier, pSoldier->sInsertionGridNo, 7, &ubCalculatedDirection );
|
||||
else
|
||||
sGridNo = FindGridNoFromSweetSpot( pSoldier, pSoldier->sInsertionGridNo, 7, &ubCalculatedDirection );
|
||||
//hayden
|
||||
// ATE: Error condition - if nowhere use insertion gridno!
|
||||
if ( sGridNo == NOWHERE )
|
||||
{
|
||||
sGridNo = pSoldier->sInsertionGridNo;
|
||||
}
|
||||
// ATE: Error condition - if nowhere use insertion gridno!
|
||||
if (TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
sGridNo = pSoldier->sInsertionGridNo;
|
||||
}
|
||||
}
|
||||
|
||||
// Override calculated direction if we were told to....
|
||||
@@ -1201,8 +1202,8 @@ BOOLEAN InternalAddSoldierToSector( UINT8 ubID, BOOLEAN fCalculateDirection, BOO
|
||||
|
||||
// OK, we know there must be an exit gridno SOMEWHERE close...
|
||||
sExitGridNo = FindClosestExitGrid( pSoldier, sGridNo, 10 );
|
||||
|
||||
if ( sExitGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sExitGridNo))
|
||||
{
|
||||
// We found one
|
||||
// Calculate direction...
|
||||
@@ -1250,11 +1251,11 @@ BOOLEAN AddSoldierToSectorNoCalculateDirectionUseAnimation( UINT8 ubID, UINT16 u
|
||||
}
|
||||
|
||||
|
||||
void InternalSoldierInSectorSleep( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fDoTransition )
|
||||
void InternalSoldierInSectorSleep( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fDoTransition )
|
||||
{
|
||||
INT16 sWorldX, sWorldY;
|
||||
UINT8 ubNewDirection;
|
||||
INT16 sGoodGridNo;
|
||||
INT32 sGoodGridNo = NOWHERE;
|
||||
UINT16 usAnim = SLEEPING;
|
||||
|
||||
if ( !pSoldier->bInSector )
|
||||
@@ -1297,11 +1298,11 @@ void InternalSoldierInSectorSleep( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN
|
||||
}
|
||||
}
|
||||
|
||||
void SoldierInSectorIncompaciated( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
void SoldierInSectorIncompaciated( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
INT16 sWorldX, sWorldY;
|
||||
UINT8 ubNewDirection;
|
||||
INT16 sGoodGridNo;
|
||||
INT32 sGoodGridNo = NOWHERE;
|
||||
|
||||
if ( !pSoldier->bInSector )
|
||||
{
|
||||
@@ -1333,11 +1334,11 @@ void SoldierInSectorSleep( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
*/
|
||||
|
||||
|
||||
void SoldierInSectorPatient( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
void SoldierInSectorPatient( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
INT16 sWorldX, sWorldY;
|
||||
UINT8 ubNewDirection;
|
||||
INT16 sGoodGridNo;
|
||||
INT32 sGoodGridNo = NOWHERE;
|
||||
|
||||
if ( !pSoldier->bInSector )
|
||||
{
|
||||
@@ -1368,11 +1369,11 @@ void SoldierInSectorPatient( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
void SoldierInSectorDoctor( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
void SoldierInSectorDoctor( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
INT16 sWorldX, sWorldY;
|
||||
UINT8 ubNewDirection;
|
||||
INT16 sGoodGridNo;
|
||||
INT32 sGoodGridNo = NOWHERE;
|
||||
|
||||
if ( !pSoldier->bInSector )
|
||||
{
|
||||
@@ -1403,11 +1404,11 @@ void SoldierInSectorDoctor( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
void SoldierInSectorRepair( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
void SoldierInSectorRepair( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
INT16 sWorldX, sWorldY;
|
||||
UINT8 ubNewDirection;
|
||||
INT16 sGoodGridNo;
|
||||
INT32 sGoodGridNo = NOWHERE;
|
||||
|
||||
if ( !pSoldier->bInSector )
|
||||
{
|
||||
@@ -1439,10 +1440,10 @@ void SoldierInSectorRepair( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
|
||||
extern void EVENT_SetSoldierPositionAndMaybeFinalDestAndMaybeNotDestination( SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNewYPos, BOOLEAN fUpdateDest, BOOLEAN fUpdateFinalDest );
|
||||
|
||||
void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection, BOOLEAN fUseAnimation, UINT16 usAnimState, UINT16 usAnimCode )
|
||||
void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDirection, BOOLEAN fUseAnimation, UINT16 usAnimState, UINT16 usAnimCode )
|
||||
{
|
||||
INT16 sWorldX, sWorldY;
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo = NOWHERE;
|
||||
UINT8 ubNewDirection;
|
||||
UINT8 ubInsertionCode;
|
||||
BOOLEAN fUpdateFinalPosition = TRUE;
|
||||
|
||||
+12
-12
@@ -6,21 +6,21 @@
|
||||
|
||||
// Finds a gridno given a sweet spot
|
||||
// Returns a good direction too!
|
||||
INT16 FindGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection );
|
||||
INT32 FindGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection );
|
||||
|
||||
// Ensures a good path.....
|
||||
INT16 FindGridNoFromSweetSpotThroughPeople( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection );
|
||||
INT32 FindGridNoFromSweetSpotThroughPeople( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection );
|
||||
|
||||
// Returns a good sweetspot but not the swetspot!
|
||||
INT16 FindGridNoFromSweetSpotExcludingSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection );
|
||||
INT32 FindGridNoFromSweetSpotExcludingSweetSpot( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection );
|
||||
|
||||
INT16 FindGridNoFromSweetSpotExcludingSweetSpotInQuardent( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, INT8 ubQuardentDir );
|
||||
INT32 FindGridNoFromSweetSpotExcludingSweetSpotInQuardent( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, INT8 ubQuardentDir );
|
||||
|
||||
// Finds a gridno near a sweetspot but a random one!
|
||||
INT16 FindRandomGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection );
|
||||
INT32 FindRandomGridNoFromSweetSpot( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection );
|
||||
|
||||
// Finds a sweetspot but excluding this one!
|
||||
INT16 FindRandomGridNoFromSweetSpotExcludingSweetSpot( SOLDIERTYPE *pSoldier, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection );
|
||||
INT32 FindRandomGridNoFromSweetSpotExcludingSweetSpot( SOLDIERTYPE *pSoldier, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection );
|
||||
|
||||
|
||||
// Adds a soldier ( already created in mercptrs[] array )!
|
||||
@@ -45,19 +45,19 @@ BOOLEAN IsMercOnTeamAndInOmertaAlreadyAndAlive(UINT8 ubMercID);
|
||||
// GetSoldierIDFromMercID() Gets the Soldier ID from the Merc Profile ID, else returns -1
|
||||
INT16 GetSoldierIDFromMercID(UINT8 ubMercID);
|
||||
|
||||
INT16 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT16 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc );
|
||||
INT32 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc );
|
||||
|
||||
/*
|
||||
void SoldierInSectorSleep( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
*/
|
||||
|
||||
INT16 FindGridNoFromSweetSpotWithStructDataFromSoldier( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc, SOLDIERTYPE *pSrcSoldier );
|
||||
INT32 FindGridNoFromSweetSpotWithStructDataFromSoldier( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc, SOLDIERTYPE *pSrcSoldier );
|
||||
|
||||
void SoldierInSectorPatient( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
void SoldierInSectorDoctor( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
void SoldierInSectorRepair( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
void SoldierInSectorPatient( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
void SoldierInSectorDoctor( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
void SoldierInSectorRepair( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
|
||||
BOOLEAN CanSoldierReachGridNoInGivenTileLimit( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 sMaxTiles, INT8 bLevel );
|
||||
BOOLEAN CanSoldierReachGridNoInGivenTileLimit( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 sMaxTiles, INT8 bLevel );
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
+44
-30
@@ -94,7 +94,7 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse );
|
||||
|
||||
void CheckForAndHandleSoldierIncompacitated( SOLDIERTYPE *pSoldier );
|
||||
BOOLEAN CheckForImproperFireGunEnd( SOLDIERTYPE *pSoldier );
|
||||
BOOLEAN OKHeightDest( SOLDIERTYPE *pSoldier, INT16 sNewGridNo );
|
||||
BOOLEAN OKHeightDest( SOLDIERTYPE *pSoldier, INT32 sNewGridNo );
|
||||
BOOLEAN HandleUnjamAnimation( SOLDIERTYPE *pSoldier );
|
||||
|
||||
extern void HandleSystemNewAISituation( SOLDIERTYPE *pSoldier, BOOLEAN fResetABC );
|
||||
@@ -124,7 +124,7 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
INT8 ubCurrentHeight;
|
||||
UINT16 usOldAnimState;
|
||||
static UINT32 uiJumpAddress = NO_JUMP;
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
INT16 sX, sY;
|
||||
BOOLEAN fStop;
|
||||
UINT32 cnt;
|
||||
@@ -498,7 +498,7 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
case 437:
|
||||
|
||||
// CHANGE DIRECTION AND GET-UP
|
||||
//sGridNo = NewGridNo( (INT16)pSoldier->sGridNo, (UINT16)(-1 * DirectionInc( pSoldier->ubDirection ) ) );
|
||||
//sGridNo = NewGridNo( pSoldier->sGridNo, (UINT16)(-1 * DirectionInc( pSoldier->ubDirection ) ) );
|
||||
//ConvertMapPosToWorldTileCenter( pSoldier->sGridNo, &sXPos, &sYPos );
|
||||
//SetSoldierPosition( pSoldier, (FLOAT)sXPos, (FLOAT)sYPos );
|
||||
|
||||
@@ -574,11 +574,11 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
LightSpritePower(pSoldier->iMuzFlash, TRUE);
|
||||
// Get one move forward
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 usNewGridNo;
|
||||
INT16 sXPos, sYPos;
|
||||
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( pSoldier->ubDirection ) );
|
||||
ConvertGridNoToCenterCellXY( sNewGridNo, &sXPos, &sYPos );
|
||||
usNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( pSoldier->ubDirection ) );
|
||||
ConvertGridNoToCenterCellXY( usNewGridNo, &sXPos, &sYPos );
|
||||
LightSpritePosition( pSoldier->iMuzFlash, (INT16)(sXPos/CELL_X_SIZE), (INT16)(sYPos/CELL_Y_SIZE));
|
||||
|
||||
// Start count
|
||||
@@ -702,12 +702,12 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
|
||||
// TRY FORWARDS...
|
||||
// FIRST GRIDNO
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, (UINT16)( DirectionInc( pSoldier->ubDirection ) ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( pSoldier->ubDirection ) );
|
||||
|
||||
if ( OKFallDirection( pSoldier, sNewGridNo, pSoldier->pathing.bLevel, pSoldier->ubDirection, FALLFORWARD_HITDEATH_STOP ) )
|
||||
{
|
||||
// SECOND GRIDNO
|
||||
// sNewGridNo = NewGridNo( (INT16)sNewGridNo, (UINT16)( DirectionInc( pSoldier->ubDirection ) ) );
|
||||
// sNewGridNo = NewGridNo( sNewGridNo, (UINT16)( DirectionInc( pSoldier->ubDirection ) ) );
|
||||
|
||||
// if ( OKFallDirection( pSoldier, sNewGridNo, pSoldier->pathing.bLevel, pSoldier->ubDirection, FALLFORWARD_HITDEATH_STOP ) )
|
||||
{
|
||||
@@ -887,8 +887,8 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
|
||||
//CODE: BEGINHOPFENCE
|
||||
// MOVE TWO FACGIN GRIDNOS
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, (UINT16)( DirectionInc( pSoldier->ubDirection ) ) );
|
||||
sNewGridNo = NewGridNo( (INT16)sNewGridNo, (UINT16)( DirectionInc( pSoldier->ubDirection ) ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( pSoldier->ubDirection ) );
|
||||
sNewGridNo = NewGridNo( sNewGridNo, DirectionInc( pSoldier->ubDirection ) );
|
||||
pSoldier->sForcastGridno = sNewGridNo;
|
||||
break;
|
||||
|
||||
@@ -1015,7 +1015,16 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
DeductPoints( pSoldier, APBPConstants[AP_TOSS_ITEM], 0 );
|
||||
}
|
||||
|
||||
CreatePhysicalObject( pSoldier->pTempObject, pSoldier->pThrowParams->dLifeSpan, pSoldier->pThrowParams->dX, pSoldier->pThrowParams->dY, pSoldier->pThrowParams->dZ, pSoldier->pThrowParams->dForceX, pSoldier->pThrowParams->dForceY, pSoldier->pThrowParams->dForceZ, pSoldier->ubID, pSoldier->pThrowParams->ubActionCode, pSoldier->pThrowParams->uiActionData, FALSE );
|
||||
INT32 iRealObjectID = CreatePhysicalObject( pSoldier->pTempObject, pSoldier->pThrowParams->dLifeSpan, pSoldier->pThrowParams->dX, pSoldier->pThrowParams->dY, pSoldier->pThrowParams->dZ, pSoldier->pThrowParams->dForceX, pSoldier->pThrowParams->dForceY, pSoldier->pThrowParams->dForceZ, pSoldier->ubID, pSoldier->pThrowParams->ubActionCode, pSoldier->pThrowParams->uiActionData, FALSE );
|
||||
|
||||
// OJW - 20091002 - Explosives
|
||||
if (is_networked && is_client)
|
||||
{
|
||||
if (pSoldier->bTeam == 0 || (pSoldier->bTeam == 1 && is_server))
|
||||
{
|
||||
send_grenade( pSoldier->pTempObject , pSoldier->pThrowParams->dLifeSpan, pSoldier->pThrowParams->dX, pSoldier->pThrowParams->dY, pSoldier->pThrowParams->dZ, pSoldier->pThrowParams->dForceX, pSoldier->pThrowParams->dForceY, pSoldier->pThrowParams->dForceZ, pSoldier->sTargetGridNo, pSoldier->ubID, pSoldier->pThrowParams->ubActionCode, pSoldier->pThrowParams->uiActionData, iRealObjectID , true);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove object
|
||||
//RemoveObjFrom( &(pSoldier->inv[ HANDPOS ] ), 0 );
|
||||
@@ -1054,10 +1063,11 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
|
||||
// Set new gridno
|
||||
{
|
||||
INT16 sTempGridNo, sNewX, sNewY;
|
||||
INT32 sTempGridNo;
|
||||
INT16 sNewX, sNewY;
|
||||
|
||||
//Get Next GridNo;
|
||||
sTempGridNo = NewGridNo( (INT16)pSoldier->sGridNo, (INT16)( DirectionInc(pSoldier->ubDirection ) ) );
|
||||
sTempGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc(pSoldier->ubDirection ) );
|
||||
|
||||
// Get center XY
|
||||
ConvertGridNoToCenterCellXY( sTempGridNo, &sNewX, &sNewY );
|
||||
@@ -1764,7 +1774,7 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
//if ( pSoldier->aiData.ubPendingAction == MERC_PICKUPITEM )
|
||||
//{
|
||||
// DROP ITEM
|
||||
HandleSoldierPickupItem( pSoldier, pSoldier->aiData.uiPendingActionData1, (INT16)(pSoldier->aiData.uiPendingActionData4 ), pSoldier->aiData.bPendingActionData3 );
|
||||
HandleSoldierPickupItem( pSoldier, pSoldier->aiData.uiPendingActionData1, pSoldier->aiData.uiPendingActionData4, pSoldier->aiData.bPendingActionData3 );
|
||||
// EVENT HAS BEEN HANDLED
|
||||
pSoldier->aiData.ubPendingAction = NO_PENDING_ACTION;
|
||||
|
||||
@@ -2103,8 +2113,8 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
pSoldier->EVENT_GetNewSoldierPath( pSoldier->pathing.sFinalDestination, pSoldier->usUIMovementMode );
|
||||
|
||||
if ( !( gAnimControl[ pSoldier->usAnimState ].uiFlags & ( ANIM_MOVING ) ) )
|
||||
{
|
||||
if ( pSoldier->sAbsoluteFinalDestination != NOWHERE )
|
||||
{
|
||||
if (!TileIsOutOfBounds(pSoldier->sAbsoluteFinalDestination))
|
||||
{
|
||||
CancelAIAction( pSoldier, FORCE );
|
||||
}
|
||||
@@ -2697,12 +2707,12 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
// Flyback hit - do blood!
|
||||
// PLace in existing tile and one back...
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
|
||||
InternalDropBlood( pSoldier->sGridNo, pSoldier->pathing.bLevel, 0, (UINT8)(MAXBLOODQUANTITY), 1 );
|
||||
|
||||
// Move forward one gridno....
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, (UINT16)( DirectionInc( gOppositeDirection[ pSoldier->ubDirection ] ) ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( gOppositeDirection[ pSoldier->ubDirection ] ) );
|
||||
|
||||
InternalDropBlood( sNewGridNo, pSoldier->pathing.bLevel, 0, (UINT8)(MAXBLOODQUANTITY), 1 );
|
||||
|
||||
@@ -2935,7 +2945,7 @@ BOOLEAN ShouldMercSayHappyWithGunQuote( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel )
|
||||
void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
// WDS - make number of mercenaries, etc. be configurable
|
||||
std::vector<UINT8> ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0);
|
||||
@@ -2957,8 +2967,8 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo,
|
||||
// run through list
|
||||
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ )
|
||||
{
|
||||
// Add guy if he's a candidate...
|
||||
if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep && pTeamSoldier->sGridNo != NOWHERE )
|
||||
// Add guy if he's a candidate...
|
||||
if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep && !TileIsOutOfBounds(pTeamSoldier->sGridNo))
|
||||
{
|
||||
// Are we a buddy of killer?
|
||||
bTempBuddyIndex = WhichBuddy( pTeamSoldier->ubProfile, pKillerSoldier->ubProfile );
|
||||
@@ -3042,7 +3052,7 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT16 sGridNo,
|
||||
}
|
||||
|
||||
|
||||
void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier, INT16 sGridNo, INT8 bLevel )
|
||||
void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
INT32 cnt;
|
||||
@@ -3488,7 +3498,7 @@ BOOLEAN CheckForAndHandleSoldierDeath( SOLDIERTYPE *pSoldier, BOOLEAN *pfMadeCor
|
||||
|
||||
void CheckForAndHandleSoldierIncompacitated( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
|
||||
if ( pSoldier->stats.bLife < OKLIFE )
|
||||
{
|
||||
@@ -3572,7 +3582,7 @@ void CheckForAndHandleSoldierIncompacitated( SOLDIERTYPE *pSoldier )
|
||||
fForceDirection = TRUE;
|
||||
}
|
||||
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( gOppositeDirection[ bTestDirection ] ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( gOppositeDirection[ bTestDirection ] ) );
|
||||
|
||||
if ( OKFallDirection( pSoldier, sNewGridNo, pSoldier->pathing.bLevel, bTestDirection, FLYBACK_HIT ) )
|
||||
{
|
||||
@@ -3811,7 +3821,7 @@ BOOLEAN CheckForImproperFireGunEnd( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN OKHeightDest( SOLDIERTYPE *pSoldier, INT16 sNewGridNo )
|
||||
BOOLEAN OKHeightDest( SOLDIERTYPE *pSoldier, INT32 sNewGridNo )
|
||||
{
|
||||
if ( pSoldier->pathing.bLevel == 0 )
|
||||
{
|
||||
@@ -3915,7 +3925,7 @@ if ( pSoldier->stats.bLife >= OKLIFE )
|
||||
fForceDirection = TRUE;
|
||||
}
|
||||
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, (UINT16)(-1 * DirectionInc( bTestDirection ) ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, (UINT16)(-1 * DirectionInc( bTestDirection ) ) );
|
||||
|
||||
if ( NewOKDestination( pSoldier, sNewGridNo, TRUE, pSoldier->pathing.bLevel ) && OKHeightDest( pSoldier, sNewGridNo ) )
|
||||
{
|
||||
@@ -3934,13 +3944,17 @@ if ( pSoldier->stats.bLife >= OKLIFE )
|
||||
|
||||
#endif
|
||||
|
||||
BOOLEAN OKFallDirection( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT8 ubTestDirection, UINT16 usAnimState )
|
||||
BOOLEAN OKFallDirection( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT8 ubTestDirection, UINT16 usAnimState )
|
||||
{
|
||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"OKFallDirection");
|
||||
STRUCTURE_FILE_REF * pStructureFileRef;
|
||||
UINT16 usAnimSurface;
|
||||
UINT8 bOverTerrainType;
|
||||
|
||||
// WANNE - MP: MP crashed here, so I added the prevention
|
||||
if (TileIsOutOfBounds(sGridNo))
|
||||
return ( FALSE );
|
||||
|
||||
// How are the movement costs?
|
||||
if ( gubWorldMovementCosts[ sGridNo ][ ubTestDirection ][ bLevel ] > TRAVELCOST_SHORE )
|
||||
{
|
||||
@@ -3966,7 +3980,7 @@ BOOLEAN OKFallDirection( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT
|
||||
if ( pStructureFileRef )
|
||||
{
|
||||
UINT16 usStructureID;
|
||||
INT16 sTestGridNo;
|
||||
INT32 sTestGridNo;
|
||||
|
||||
// must make sure that structure data can be added in the direction of the target
|
||||
|
||||
@@ -4122,10 +4136,10 @@ BOOLEAN HandleCheckForDeathCommonCode( SOLDIERTYPE *pSoldier )
|
||||
|
||||
void KickOutWheelchair( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
|
||||
// Move forward one gridno....
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, (UINT16)( DirectionInc( pSoldier->ubDirection ) ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( pSoldier->ubDirection ) );
|
||||
|
||||
// ATE: Make sure that the gridno is unoccupied!
|
||||
if ( !NewOKDestination( pSoldier, sNewGridNo, TRUE, pSoldier->pathing.bLevel ) )
|
||||
|
||||
@@ -9,7 +9,7 @@ BOOLEAN CheckForAndHandleSoldierDyingNotFromHit( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse );
|
||||
|
||||
BOOLEAN OKFallDirection( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bLevel, UINT8 ubTestDirection, UINT16 usAnimState );
|
||||
BOOLEAN OKFallDirection( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT8 ubTestDirection, UINT16 usAnimState );
|
||||
|
||||
BOOLEAN HandleCheckForDeathCommonCode( SOLDIERTYPE *pSoldier );
|
||||
|
||||
|
||||
+137
-133
@@ -95,6 +95,7 @@
|
||||
#include "Strategic Status.h"
|
||||
#include "civ quotes.h"
|
||||
#include "Strategic Pathing.h"
|
||||
#include "Debug Control.h"
|
||||
#endif
|
||||
|
||||
#include "fresh_header.h"
|
||||
@@ -402,7 +403,7 @@ void STRUCT_Flags::ConvertFrom_101_To_102(const OLDSOLDIERTYPE_101& src)
|
||||
this->fSoldierUpdatedFromNetwork = src.fSoldierUpdatedFromNetwork;
|
||||
this->fChangingStanceDueToSuppression = src.fChangingStanceDueToSuppression;
|
||||
this->fCheckForNewlyAddedItems = src.fCheckForNewlyAddedItems;
|
||||
this->fCheckForNewlyAddedItems = src.bEndDoorOpenCode;
|
||||
//this->fCheckForNewlyAddedItems = src.bEndDoorOpenCode;//dnl ch33 130909
|
||||
this->fMuzzleFlash = src.fMuzzleFlash;
|
||||
this->fSoldierWasMoving = src.fSoldierWasMoving;
|
||||
this->fSayAmmoQuotePending = src.fSayAmmoQuotePending;
|
||||
@@ -501,7 +502,7 @@ void STRUCT_Statistics::ConvertFrom_101_To_102(const OLDSOLDIERTYPE_101& src)
|
||||
void STRUCT_AIData::ConvertFrom_101_To_102(const OLDSOLDIERTYPE_101& src)
|
||||
{
|
||||
memcpy( &(this->bOppList), &(src.bOppList), sizeof(INT8) * MAX_NUM_SOLDIERS ); // AI knowledge database
|
||||
memcpy( &(this->sPatrolGrid), &(src.usPatrolGrid), sizeof(INT16) * MAXPATROLGRIDS );// AI list for ptr->orders==PATROL
|
||||
TranslateArrayFields(this->sPatrolGrid, src.usPatrolGrid, OLD_MAXPATROLGRIDS, INT16_INT32);//dnl ch27 200909 AI list for ptr->orders==PATROL
|
||||
this->bLastAction = src.bLastAction;
|
||||
this->bAction = src.bAction;
|
||||
this->usActionData = src.usActionData;
|
||||
@@ -523,7 +524,7 @@ void STRUCT_AIData::ConvertFrom_101_To_102(const OLDSOLDIERTYPE_101& src)
|
||||
this->bDominantDir = src.bDominantDir; // AI main direction to face...
|
||||
this->bPatrolCnt = src.bPatrolCnt; // number of patrol gridnos
|
||||
this->bNextPatrolPnt = src.bNextPatrolPnt; // index to next patrol gridno
|
||||
this->sNoiseGridno = src.sNoiseGridno;
|
||||
this->sNoiseGridno = src.sNoiseGridNo;
|
||||
this->ubNoiseVolume = src.ubNoiseVolume;
|
||||
this->bLastAttackHit = src.bLastAttackHit;
|
||||
this->ubXRayedBy = src.ubXRayedBy;
|
||||
@@ -800,7 +801,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src)
|
||||
|
||||
this->sStartGridNo = src.sStartGridNo;
|
||||
this->sEndGridNo = src.sEndGridNo;
|
||||
this->sForcastGridno = src.sForcastGridno;
|
||||
this->sForcastGridno = src.sForcastGridNo;
|
||||
this->sZLevelOverride = src.sZLevelOverride;
|
||||
this->bMovedPriorToInterrupt = src.bMovedPriorToInterrupt;
|
||||
this->iEndofContractTime = src.iEndofContractTime; // time, in global time(resolution, minutes) that merc will leave, or if its a M.E.R.C. merc it will be set to -1. -2 for NPC and player generated
|
||||
@@ -959,7 +960,6 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src)
|
||||
|
||||
this->snowCamo = src.snowCamo;
|
||||
this->wornSnowCamo = src.wornSnowCamo;
|
||||
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
@@ -1563,7 +1563,7 @@ BOOLEAN gfGetNewPathThroughPeople = FALSE;
|
||||
// LOCAL FUNCTIONS
|
||||
// DO NOT CALL UNLESS THROUGH EVENT_SetSoldierPosition
|
||||
UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady );
|
||||
BOOLEAN CheckForFullStruct( INT16 sGridNo, UINT16 *pusIndex );
|
||||
BOOLEAN CheckForFullStruct( INT32 sGridNo, UINT16 *pusIndex );
|
||||
void SetSoldierLocatorOffsets( SOLDIERTYPE *pSoldier );
|
||||
void CheckForFullStructures( SOLDIERTYPE *pSoldier );
|
||||
BOOLEAN InitNewSoldierState( SOLDIERTYPE *pSoldier, UINT8 ubNewState, UINT16 usStartingAniCode );
|
||||
@@ -1572,7 +1572,7 @@ void SetSoldierAniSpeed( SOLDIERTYPE *pSoldier );
|
||||
void AdjustForFastTurnAnimation( SOLDIERTYPE *pSoldier );
|
||||
UINT16 SelectFireAnimation( SOLDIERTYPE *pSoldier, UINT8 ubHeight );
|
||||
void SelectFallAnimation( SOLDIERTYPE *pSoldier );
|
||||
BOOLEAN FullStructAlone( INT16 sGridNo, UINT8 ubRadius );
|
||||
BOOLEAN FullStructAlone( INT32 sGridNo, UINT8 ubRadius );
|
||||
void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial , UINT8 ubHitLocation);
|
||||
void SoldierGotHitBlade( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation );
|
||||
void SoldierGotHitPunch( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation );
|
||||
@@ -1722,12 +1722,12 @@ void HandleCrowShadowNewGridNo( SOLDIERTYPE *pSoldier )
|
||||
DeleteAniTile( pSoldier->pAniTile );
|
||||
pSoldier->pAniTile = NULL;
|
||||
}
|
||||
|
||||
if ( pSoldier->sGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(pSoldier->sGridNo))
|
||||
{
|
||||
if ( pSoldier->usAnimState == CROW_FLY )
|
||||
{
|
||||
AniParams.sGridNo = (INT16)pSoldier->sGridNo;
|
||||
AniParams.sGridNo = pSoldier->sGridNo;
|
||||
AniParams.ubLevelID = ANI_SHADOW_LEVEL;
|
||||
AniParams.sDelay = pSoldier->sAniDelay;
|
||||
AniParams.sStartFrame = 0;
|
||||
@@ -1795,9 +1795,6 @@ void HandleCrowShadowNewPosition( SOLDIERTYPE *pSoldier )
|
||||
|
||||
extern INT16 DynamicAdjustAPConstants(INT16 iniReadValue, INT16 iniDefaultValue, BOOLEAN reverse);
|
||||
|
||||
// This function calculates how many APs are added to a character's pool at the start of the round. The normal maximum
|
||||
// amount that can be added is 80% of the Maximum AP value, with the remaining 20% coming from APs reserved in the
|
||||
// previous round. See also CalcNewActionPoints()
|
||||
INT16 SOLDIERTYPE::CalcActionPoints( void )
|
||||
{
|
||||
INT16 ubPoints,ubMaxAPs;
|
||||
@@ -2306,8 +2303,8 @@ BOOLEAN SOLDIERTYPE::DeleteSoldier( void )
|
||||
|
||||
//if(this->pZBackground!=NULL)
|
||||
//MemFree(this->pZBackground);
|
||||
|
||||
if( this->sGridNo != NOWHERE )
|
||||
|
||||
if(!TileIsOutOfBounds(this->sGridNo))
|
||||
{
|
||||
// Remove adjacency records
|
||||
for (bDir = 0; bDir < NUM_WORLD_DIRECTIONS; bDir++)
|
||||
@@ -2684,7 +2681,7 @@ void CheckForFreeupFromHit( SOLDIERTYPE *pSoldier, UINT32 uiOldAnimFlags, UINT32
|
||||
BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStartingAniCode, BOOLEAN fForce )
|
||||
{
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,"EVENT_InitNewSoldierAnim");
|
||||
INT16 sNewGridNo = 0;
|
||||
INT32 usNewGridNo = 0;
|
||||
INT16 sAPCost = 0;
|
||||
INT16 sBPCost = 0;
|
||||
UINT32 uiOldAnimFlags;
|
||||
@@ -3190,7 +3187,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
|
||||
uiOldAnimFlags = gAnimControl[ this->usAnimState ].uiFlags;
|
||||
uiNewAnimFlags = gAnimControl[ usNewState ].uiFlags;
|
||||
|
||||
sNewGridNo = NewGridNo( this->sGridNo, DirectionInc( (UINT8) this->pathing.usPathingData[ this->pathing.usPathIndex ] ) );
|
||||
usNewGridNo = NewGridNo( this->sGridNo, DirectionInc( (UINT8) this->pathing.usPathingData[ this->pathing.usPathIndex ] ) );
|
||||
|
||||
|
||||
// CHECKING IF WE HAVE A HIT FINISH BUT NO DEATH IS DONE WITH A SPECIAL ANI CODE
|
||||
@@ -3523,12 +3520,12 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
|
||||
|
||||
// Set path....
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 usNewGridNo;
|
||||
|
||||
DeductPoints( this, APBPConstants[AP_JUMP_OVER], APBPConstants[BP_JUMP_OVER] );
|
||||
|
||||
sNewGridNo = NewGridNo( (INT16)this->sGridNo, DirectionInc( this->ubDirection ) );
|
||||
sNewGridNo = NewGridNo( (INT16)sNewGridNo, DirectionInc( this->ubDirection ) );
|
||||
usNewGridNo = NewGridNo( this->sGridNo, DirectionInc( this->ubDirection ) );
|
||||
usNewGridNo = NewGridNo( usNewGridNo, DirectionInc( this->ubDirection ) );
|
||||
|
||||
this->sPlotSrcGrid = this->sGridNo;
|
||||
this->flags.fPastXDest = FALSE;
|
||||
@@ -3539,7 +3536,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
|
||||
this->pathing.usPathDataSize++;
|
||||
this->pathing.usPathingData[ this->pathing.usPathDataSize ] = this->ubDirection;
|
||||
this->pathing.usPathDataSize++;
|
||||
this->pathing.sFinalDestination = sNewGridNo;
|
||||
this->pathing.sFinalDestination = usNewGridNo;
|
||||
// Set direction
|
||||
this->EVENT_InternalSetSoldierDestination( (UINT8) this->pathing.usPathingData[ this->pathing.usPathIndex ], FALSE, JUMP_OVER_BLOCKING_PERSON );
|
||||
}
|
||||
@@ -3757,8 +3754,8 @@ void SOLDIERTYPE::InternalRemoveSoldierFromGridNo( BOOLEAN fForce )
|
||||
{
|
||||
INT8 bDir;
|
||||
INT32 iGridNo;
|
||||
|
||||
if((this->sGridNo!=NOWHERE) )
|
||||
|
||||
if(!TileIsOutOfBounds(this->sGridNo))
|
||||
{
|
||||
if ( this->bInSector || fForce )
|
||||
{
|
||||
@@ -3797,7 +3794,7 @@ void SOLDIERTYPE::RemoveSoldierFromGridNo( void )
|
||||
|
||||
void SOLDIERTYPE::EVENT_InternalSetSoldierPosition( FLOAT dNewXPos, FLOAT dNewYPos ,BOOLEAN fUpdateDest, BOOLEAN fUpdateFinalDest, BOOLEAN fForceRemove )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
|
||||
// Not if we're dead!
|
||||
if ( ( this->flags.uiStatusFlags & SOLDIER_DEAD ) )
|
||||
@@ -3927,7 +3924,7 @@ void SOLDIERTYPE::SetSoldierHeight( FLOAT dNewHeight )
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::SetSoldierGridNo( INT16 sNewGridNo, BOOLEAN fForceRemove )
|
||||
void SOLDIERTYPE::SetSoldierGridNo( INT32 sNewGridNo, BOOLEAN fForceRemove )
|
||||
{
|
||||
BOOLEAN fInWaterValue;
|
||||
INT8 bDir;
|
||||
@@ -4041,7 +4038,7 @@ void SOLDIERTYPE::SetSoldierGridNo( INT16 sNewGridNo, BOOLEAN fForceRemove )
|
||||
this->sZLevelOverride = -1;
|
||||
// If we are over a fence ( hopping ), make us higher!
|
||||
|
||||
if ( IsJumpableFencePresentAtGridno( sNewGridNo ) )
|
||||
if ( IsJumpableFencePresentAtGridNo( sNewGridNo ) )
|
||||
{
|
||||
//sX = MapX( sNewGridNo );
|
||||
//sY = MapY( sNewGridNo );
|
||||
@@ -4179,19 +4176,8 @@ void SOLDIERTYPE::SetSoldierGridNo( INT16 sNewGridNo, BOOLEAN fForceRemove )
|
||||
BOOLEAN fSetGassed = TRUE;
|
||||
|
||||
// If we have a functioning gas mask...
|
||||
if ( FindGasMask ( this ) != NO_SLOT && this->inv[ HEAD1POS ][0]->data.objectStatus >= GASMASK_MIN_STATUS )
|
||||
{
|
||||
if(DoesSoldierWearGasMask(this) && this->inv[FindGasMask(this)][0]->data.objectStatus >= GASMASK_MIN_STATUS)//dnl ch40 200909
|
||||
fSetGassed = FALSE;
|
||||
}
|
||||
// if ( this->inv[ HEAD1POS ].usItem == GASMASK && this->inv[ HEAD1POS ][0]->data.objectStatus >= GASMASK_MIN_STATUS )
|
||||
//{
|
||||
// fSetGassed = FALSE;
|
||||
//}
|
||||
// if ( this->inv[ HEAD2POS ].usItem == GASMASK && this->inv[ HEAD2POS ][0]->data.objectStatus >= GASMASK_MIN_STATUS )
|
||||
//{
|
||||
// fSetGassed = FALSE;
|
||||
//}
|
||||
|
||||
if ( fSetGassed )
|
||||
{
|
||||
this->flags.uiStatusFlags |= SOLDIER_GASSED;
|
||||
@@ -4241,7 +4227,7 @@ void SOLDIERTYPE::SetSoldierGridNo( INT16 sNewGridNo, BOOLEAN fForceRemove )
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_FireSoldierWeapon( INT16 sTargetGridNo )
|
||||
void SOLDIERTYPE::EVENT_FireSoldierWeapon( INT32 sTargetGridNo )
|
||||
{
|
||||
INT16 sTargetXPos, sTargetYPos;
|
||||
BOOLEAN fDoFireRightAway = FALSE;
|
||||
@@ -4901,7 +4887,7 @@ UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady )
|
||||
|
||||
|
||||
// ATE: THIS FUNCTION IS USED FOR ALL SOLDIER TAKE DAMAGE FUNCTIONS!
|
||||
void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT16 sLocationGrid )
|
||||
void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGrid )
|
||||
{
|
||||
UINT8 ubCombinedLoss, ubVolume, ubReason;
|
||||
// SOLDIERTYPE * pNewSoldier;
|
||||
@@ -5507,7 +5493,7 @@ void DoGenericHit( SOLDIERTYPE *pSoldier, UINT8 ubSpecial, INT16 bDirection )
|
||||
|
||||
void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 usNewGridNo;
|
||||
BOOLEAN fBlownAway = FALSE;
|
||||
BOOLEAN fHeadHit = FALSE;
|
||||
BOOLEAN fFallenOver = FALSE;
|
||||
@@ -5526,14 +5512,14 @@ void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sD
|
||||
//if (SpacesAway( pSoldier->sGridNo, Menptr[ubAttackerID].sGridNo ) <= Weapon[usWeaponIndex].maxdistformessydeath || (SpacesAway( pSoldier->sGridNo, Menptr[ubAttackerID].sGridNo ) <= MAX_BARRETT_DISTANCE_FOR_MESSY_DEATH && usWeaponIndex == BARRETT ))
|
||||
if (SpacesAway( pSoldier->sGridNo, Menptr[ubAttackerID].sGridNo ) <= Weapon[usWeaponIndex].maxdistformessydeath)
|
||||
{
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, (INT8)( DirectionInc( pSoldier->ubDirection ) ) );
|
||||
usNewGridNo = NewGridNo( pSoldier->sGridNo, (INT8)( DirectionInc( pSoldier->ubDirection ) ) );
|
||||
|
||||
// CHECK OK DESTINATION!
|
||||
if ( OKFallDirection( pSoldier, sNewGridNo, pSoldier->pathing.bLevel, pSoldier->ubDirection, JFK_HITDEATH ) )
|
||||
if ( OKFallDirection( pSoldier, usNewGridNo, pSoldier->pathing.bLevel, pSoldier->ubDirection, JFK_HITDEATH ) )
|
||||
{
|
||||
sNewGridNo = NewGridNo( (INT16)sNewGridNo, (INT8)( DirectionInc( pSoldier->ubDirection ) ) );
|
||||
usNewGridNo = NewGridNo( usNewGridNo, (INT8)( DirectionInc( pSoldier->ubDirection ) ) );
|
||||
|
||||
if ( OKFallDirection( pSoldier, sNewGridNo, pSoldier->pathing.bLevel, pSoldier->ubDirection, pSoldier->usAnimState ) )
|
||||
if ( OKFallDirection( pSoldier, usNewGridNo, pSoldier->pathing.bLevel, pSoldier->ubDirection, pSoldier->usAnimState ) )
|
||||
{
|
||||
fHeadHit = TRUE;
|
||||
}
|
||||
@@ -5553,13 +5539,13 @@ void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sD
|
||||
// possibly play torso explosion anim!
|
||||
if (pSoldier->ubDirection == bDirection)
|
||||
{
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( gOppositeDirection[ pSoldier->ubDirection ] ) );
|
||||
usNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( gOppositeDirection[ pSoldier->ubDirection ] ) );
|
||||
|
||||
if ( OKFallDirection( pSoldier, sNewGridNo, pSoldier->pathing.bLevel, gOppositeDirection[ bDirection ], FLYBACK_HIT ) )
|
||||
if ( OKFallDirection( pSoldier, usNewGridNo, pSoldier->pathing.bLevel, gOppositeDirection[ bDirection ], FLYBACK_HIT ) )
|
||||
{
|
||||
sNewGridNo = NewGridNo( (INT16)sNewGridNo, DirectionInc( gOppositeDirection[ bDirection ] ) );
|
||||
usNewGridNo = NewGridNo( usNewGridNo, DirectionInc( gOppositeDirection[ bDirection ] ) );
|
||||
|
||||
if ( OKFallDirection( pSoldier, sNewGridNo, pSoldier->pathing.bLevel, gOppositeDirection[ bDirection ], pSoldier->usAnimState ) )
|
||||
if ( OKFallDirection( pSoldier, usNewGridNo, pSoldier->pathing.bLevel, gOppositeDirection[ bDirection ], pSoldier->usAnimState ) )
|
||||
{
|
||||
fBlownAway = TRUE;
|
||||
}
|
||||
@@ -5631,7 +5617,7 @@ void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sD
|
||||
|
||||
void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
|
||||
// IF HERE AND GUY IS DEAD, RETURN!
|
||||
if ( pSoldier->flags.uiStatusFlags & SOLDIER_DEAD )
|
||||
@@ -5730,7 +5716,7 @@ void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16
|
||||
case 8:
|
||||
// 4 of 10 - fall backward (if possible) either forward
|
||||
// Check behind us!
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( gOppositeDirection[ bDirection ] ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( gOppositeDirection[ bDirection ] ) );
|
||||
if ( OKFallDirection( pSoldier, sNewGridNo, pSoldier->pathing.bLevel, gOppositeDirection[ bDirection ], FLYBACK_HIT ) )
|
||||
{
|
||||
pSoldier->EVENT_SetSoldierDirection( (INT8)bDirection );
|
||||
@@ -5768,7 +5754,7 @@ void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16
|
||||
pSoldier->EVENT_SetSoldierDesiredDirection( pSoldier->ubDirection );
|
||||
|
||||
// Check behind us!
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( gOppositeDirection[ bDirection ] ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( gOppositeDirection[ bDirection ] ) );
|
||||
|
||||
if ( OKFallDirection( pSoldier, sNewGridNo, pSoldier->pathing.bLevel, gOppositeDirection[ bDirection ], FLYBACK_HIT ) )
|
||||
{
|
||||
@@ -5872,15 +5858,15 @@ void SoldierGotHitPunch( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDam
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN SOLDIERTYPE::EVENT_InternalGetNewSoldierPath( INT16 sDestGridNo, UINT16 usMovementAnim, BOOLEAN fFromUI, BOOLEAN fForceRestartAnim )
|
||||
BOOLEAN SOLDIERTYPE::EVENT_InternalGetNewSoldierPath( INT32 sDestGridNo, UINT16 usMovementAnim, BOOLEAN fFromUI, BOOLEAN fForceRestartAnim )
|
||||
{
|
||||
INT32 iDest;
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
BOOLEAN fContinue;
|
||||
UINT32 uiDist;
|
||||
UINT16 usAnimState;
|
||||
UINT16 usMoveAnimState = usMovementAnim;
|
||||
INT16 sMercGridNo;
|
||||
INT32 sMercGridNo;
|
||||
UINT16 usPathingData[ MAX_PATH_LIST_SIZE ];
|
||||
UINT8 ubPathingMaxDirection;
|
||||
BOOLEAN fAdvancePath = TRUE;
|
||||
@@ -6028,7 +6014,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InternalGetNewSoldierPath( INT16 sDestGridNo, UINT16
|
||||
|
||||
|
||||
// CHECK IF FIRST TILE IS FREE
|
||||
sNewGridNo = NewGridNo( (INT16)this->sGridNo, DirectionInc( (UINT8)this->pathing.usPathingData[ this->pathing.usPathIndex ] ) );
|
||||
sNewGridNo = NewGridNo( this->sGridNo, DirectionInc( (UINT8)this->pathing.usPathingData[ this->pathing.usPathIndex ] ) );
|
||||
|
||||
// If true, we're OK, if not, WAIT for a guy to pass!
|
||||
// If we are in deep water, we can only swim!
|
||||
@@ -6072,7 +6058,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InternalGetNewSoldierPath( INT16 sDestGridNo, UINT16
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
void SOLDIERTYPE::EVENT_GetNewSoldierPath( INT16 sDestGridNo, UINT16 usMovementAnim )
|
||||
void SOLDIERTYPE::EVENT_GetNewSoldierPath( INT32 sDestGridNo, UINT16 usMovementAnim )
|
||||
{
|
||||
// ATE: Default restart of animation to TRUE
|
||||
this->EVENT_InternalGetNewSoldierPath( sDestGridNo, usMovementAnim, FALSE, TRUE );
|
||||
@@ -6218,11 +6204,11 @@ void SOLDIERTYPE::ChangeSoldierStance( UINT8 ubDesiredStance )
|
||||
|
||||
void SOLDIERTYPE::EVENT_InternalSetSoldierDestination( UINT16 usNewDirection, BOOLEAN fFromMove, UINT16 usAnimState )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
INT16 sXPos, sYPos;
|
||||
|
||||
// Get dest gridno, convert to center coords
|
||||
sNewGridNo = NewGridNo( (INT16)this->sGridNo, DirectionInc( (UINT8)usNewDirection ) );
|
||||
sNewGridNo = NewGridNo( this->sGridNo, DirectionInc( (UINT8)usNewDirection ) );
|
||||
|
||||
ConvertMapPosToWorldTileCenter( sNewGridNo, &sXPos, &sYPos );
|
||||
|
||||
@@ -6574,12 +6560,8 @@ void SOLDIERTYPE::EVENT_BeginMercTurn( BOOLEAN fFromRealTime, INT32 iRealTimeCou
|
||||
if ( this->flags.uiStatusFlags & SOLDIER_GASSED )
|
||||
{
|
||||
// then must get a gas mask or leave the gassed area to get over it
|
||||
// if ( ( this->inv[ HEAD1POS ].usItem == GASMASK || this->inv[ HEAD2POS ].usItem == GASMASK ) || !( GetSmokeEffectOnTile( this->sGridNo, this->pathing.bLevel ) ) )
|
||||
if ( FindGasMask( this ) != NO_SLOT || !( GetSmokeEffectOnTile( this->sGridNo, this->pathing.bLevel ) ) )
|
||||
{
|
||||
// Turn off gassed flag....
|
||||
this->flags.uiStatusFlags &= (~SOLDIER_GASSED );
|
||||
}
|
||||
if(DoesSoldierWearGasMask(this) && this->inv[FindGasMask(this)][0]->data.objectStatus >= GASMASK_MIN_STATUS || !(GetSmokeEffectOnTile(this->sGridNo, this->pathing.bLevel)))//dnl ch40 200909
|
||||
this->flags.uiStatusFlags &= (~SOLDIER_GASSED);
|
||||
}
|
||||
|
||||
if ( this->bBlindedCounter > 0 )
|
||||
@@ -6633,24 +6615,25 @@ void SOLDIERTYPE::EVENT_BeginMercTurn( BOOLEAN fFromRealTime, INT32 iRealTimeCou
|
||||
this->CalcNewActionPoints( );
|
||||
|
||||
// HEADROCK HAM 3.6: If this soldier is in a "moving" animation, but has not moved any tiles
|
||||
// in the previous turn, then the player has apparently forgotten that he was moving.
|
||||
// In this case, abort the character's action.
|
||||
|
||||
// in the previous turn, then the player has apparently forgotten that he was moving.
|
||||
// In this case, abort the character's action.
|
||||
|
||||
// If hasn't moved since the start of last round
|
||||
// AND this function is being executed in Turn Based mode
|
||||
// AND character is a player-controlled merc
|
||||
if (!fFromRealTime && !this->bTilesMoved && this->bTeam == OUR_TEAM )
|
||||
{
|
||||
// but is doing a movement animation
|
||||
if ( !( gAnimControl[ this->usAnimState ].uiFlags & ANIM_STATIONARY ) )
|
||||
{
|
||||
// Stop the merc
|
||||
this->EVENT_StopMerc( this->sGridNo, this->ubDirection );
|
||||
// Reset destination
|
||||
//this->pathing.sFinalDestination = this->sGridNo;
|
||||
// AND this function is being executed in Turn Based mode
|
||||
// AND character is a player-controlled merc
|
||||
if (!fFromRealTime && !this->bTilesMoved && this->bTeam == OUR_TEAM )
|
||||
{
|
||||
// but are doing a movement animation
|
||||
if ( !( gAnimControl[ this->usAnimState ].uiFlags & ANIM_STATIONARY ) )
|
||||
{
|
||||
// Stop the merc
|
||||
this->EVENT_StopMerc( this->sGridNo, this->ubDirection );
|
||||
this->pathing.sFinalDestination = NOWHERE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Reset destination
|
||||
//this->pathing.sFinalDestination = this->sGridNo;
|
||||
}
|
||||
|
||||
this->bTilesMoved = 0;
|
||||
|
||||
@@ -8011,7 +7994,7 @@ void SOLDIERTYPE::BeginSoldierClimbUpRoof( void )
|
||||
if ( EnoughPoints( this, GetAPsToClimbRoof( this, FALSE ), 0, TRUE ) )
|
||||
{
|
||||
//Kaiden: Helps if we look where we are going before we try to climb on top of someone
|
||||
ubWhoIsThere = WhoIsThere2( NewGridNo( (INT16)this->sGridNo, (UINT16)DirectionInc(bNewDirection ) ), 1 );
|
||||
ubWhoIsThere = WhoIsThere2( NewGridNo( this->sGridNo, (UINT16)DirectionInc(bNewDirection ) ), 1 );
|
||||
if ( ubWhoIsThere != NOBODY && ubWhoIsThere != this->ubID )
|
||||
{
|
||||
return;
|
||||
@@ -8025,7 +8008,7 @@ void SOLDIERTYPE::BeginSoldierClimbUpRoof( void )
|
||||
SetUIBusy( this->ubID );
|
||||
}
|
||||
|
||||
this->sTempNewGridNo = NewGridNo( (INT16)this->sGridNo, (UINT16)DirectionInc(bNewDirection ) );
|
||||
this->sTempNewGridNo = NewGridNo( this->sGridNo, (UINT16)DirectionInc(bNewDirection ) );
|
||||
|
||||
this->ubPendingDirection = bNewDirection;
|
||||
//this->usPendingAnimation = CLIMBUPROOF;
|
||||
@@ -8061,7 +8044,7 @@ void SOLDIERTYPE::BeginSoldierClimbFence( void )
|
||||
|
||||
if ( FindFenceJumpDirection( this, this->sGridNo, bDirection, &bDirection ) )
|
||||
{
|
||||
this->sTempNewGridNo = NewGridNo( (INT16)this->sGridNo, (UINT16)DirectionInc(bDirection ) );
|
||||
this->sTempNewGridNo = NewGridNo( this->sGridNo, (UINT16)DirectionInc(bDirection ) );
|
||||
this->flags.fDontChargeTurningAPs = TRUE;
|
||||
EVENT_InternalSetSoldierDesiredDirection( this, bDirection, FALSE, this->usAnimState );
|
||||
this->flags.fTurningUntilDone = TRUE;
|
||||
@@ -8269,8 +8252,16 @@ void HandleTakeDamageDeath( SOLDIERTYPE *pSoldier, UINT8 bOldLife, UINT8 ubReaso
|
||||
}
|
||||
|
||||
|
||||
UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathLoss, UINT8 ubReason, UINT8 ubAttacker, INT16 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage )
|
||||
UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathLoss, UINT8 ubReason, UINT8 ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage )
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
if (is_networked) {
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"SoldierTakeDamage ( bHeight : %i , sLifeDeduct : %i , sBreathLoss : %i , ubReason : %i , ubAttacker : %i , sSourceGrid : %i , sSubsequent : %i , fShowDamage : %i )\n", bHeight , sLifeDeduct , sBreathLoss , ubReason , ubAttacker , sSourceGrid , sSubsequent , fShowDamage );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
}
|
||||
#endif
|
||||
|
||||
INT8 bOldLife;
|
||||
UINT8 ubCombinedLoss;
|
||||
INT8 bBandage;
|
||||
@@ -9195,7 +9186,7 @@ BOOLEAN SOLDIERTYPE::CheckSoldierHitRoof( void )
|
||||
// Check if we are near a lower level
|
||||
INT8 bNewDirection;
|
||||
BOOLEAN fReturnVal = FALSE;
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
// Default to true
|
||||
BOOLEAN fDoForwards = TRUE;
|
||||
|
||||
@@ -9214,12 +9205,12 @@ BOOLEAN SOLDIERTYPE::CheckSoldierHitRoof( void )
|
||||
bNewDirection = gOppositeDirection[ bNewDirection ];
|
||||
|
||||
// Alrighty, let's not blindly change here, look at whether the dest gridno is good!
|
||||
sNewGridNo = NewGridNo( (INT16)this->sGridNo, DirectionInc( gOppositeDirection[ bNewDirection ] ) );
|
||||
sNewGridNo = NewGridNo( this->sGridNo, DirectionInc( gOppositeDirection[ bNewDirection ] ) );
|
||||
if ( !NewOKDestination( this, sNewGridNo, TRUE, 0 ) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
sNewGridNo = NewGridNo( (INT16)sNewGridNo, DirectionInc( gOppositeDirection[ bNewDirection ] ) );
|
||||
sNewGridNo = NewGridNo( sNewGridNo, DirectionInc( gOppositeDirection[ bNewDirection ] ) );
|
||||
if ( !NewOKDestination( this, sNewGridNo, TRUE, 0 ) )
|
||||
{
|
||||
return( FALSE );
|
||||
@@ -9240,8 +9231,8 @@ BOOLEAN SOLDIERTYPE::CheckSoldierHitRoof( void )
|
||||
// ATE: Make this more usefull...
|
||||
if ( fDoForwards )
|
||||
{
|
||||
this->sTempNewGridNo = NewGridNo( (INT16)this->sGridNo, (INT16)( -1 * DirectionInc(bNewDirection ) ) );
|
||||
this->sTempNewGridNo = NewGridNo( (INT16)this->sTempNewGridNo, (INT16)( -1 * DirectionInc( bNewDirection ) ) );
|
||||
this->sTempNewGridNo = NewGridNo( this->sGridNo, (INT16)( -1 * DirectionInc(bNewDirection ) ) );
|
||||
this->sTempNewGridNo = NewGridNo( this->sTempNewGridNo, (INT16)( -1 * DirectionInc( bNewDirection ) ) );
|
||||
this->EVENT_SetSoldierDesiredDirection( gOppositeDirection[ bNewDirection ] );
|
||||
this->flags.fTurningUntilDone = TRUE;
|
||||
this->usPendingAnimation = FALLFORWARD_ROOF;
|
||||
@@ -9256,8 +9247,8 @@ BOOLEAN SOLDIERTYPE::CheckSoldierHitRoof( void )
|
||||
else
|
||||
{
|
||||
|
||||
this->sTempNewGridNo = NewGridNo( (INT16)this->sGridNo, (INT16)( -1 * DirectionInc( bNewDirection ) ) );
|
||||
this->sTempNewGridNo = NewGridNo( (INT16)this->sTempNewGridNo, (INT16)( -1 * DirectionInc( bNewDirection ) ) );
|
||||
this->sTempNewGridNo = NewGridNo( this->sGridNo, (INT16)( -1 * DirectionInc( bNewDirection ) ) );
|
||||
this->sTempNewGridNo = NewGridNo( this->sTempNewGridNo, (INT16)( -1 * DirectionInc( bNewDirection ) ) );
|
||||
this->EVENT_SetSoldierDesiredDirection( bNewDirection );
|
||||
this->flags.fTurningUntilDone = TRUE;
|
||||
this->usPendingAnimation = FALLOFF;
|
||||
@@ -9284,7 +9275,7 @@ void SOLDIERTYPE::BeginSoldierClimbDownRoof( void )
|
||||
if ( EnoughPoints( this, GetAPsToClimbRoof( this, TRUE ), 0, TRUE ) )
|
||||
{
|
||||
//Kaiden: Helps if we look where we are going before we try to climb on top of someone
|
||||
ubWhoIsThere = WhoIsThere2( NewGridNo( (INT16)this->sGridNo, (UINT16)DirectionInc(bNewDirection ) ), 0 );
|
||||
ubWhoIsThere = WhoIsThere2( NewGridNo( this->sGridNo, (UINT16)DirectionInc(bNewDirection ) ), 0 );
|
||||
if ( ubWhoIsThere != NOBODY && ubWhoIsThere != this->ubID )
|
||||
{
|
||||
return;
|
||||
@@ -9301,7 +9292,7 @@ void SOLDIERTYPE::BeginSoldierClimbDownRoof( void )
|
||||
|
||||
|
||||
|
||||
this->sTempNewGridNo = NewGridNo( (INT16)this->sGridNo, (UINT16)DirectionInc(bNewDirection ) );
|
||||
this->sTempNewGridNo = NewGridNo( this->sGridNo, (UINT16)DirectionInc(bNewDirection ) );
|
||||
|
||||
bNewDirection = gTwoCDirection[ bNewDirection ];
|
||||
|
||||
@@ -9476,7 +9467,7 @@ void SOLDIERTYPE::MoveMerc( FLOAT dMovementChange, FLOAT dAngle, BOOLEAN fCheckR
|
||||
|
||||
}
|
||||
|
||||
BOOLEAN GetDirectionChangeAmount( INT16 sGridNo, SOLDIERTYPE *pSoldier, UINT8 uiTurnAmount)
|
||||
BOOLEAN GetDirectionChangeAmount( INT32 sGridNo, SOLDIERTYPE *pSoldier, UINT8 uiTurnAmount)
|
||||
{
|
||||
//CHRISL: This function should return TRUE if the difference between our current facing and the facing needed to put
|
||||
// the indicated sGrinNo into our facing is greater then uiTurnAmount
|
||||
@@ -9511,7 +9502,7 @@ BOOLEAN GetDirectionChangeAmount( INT16 sGridNo, SOLDIERTYPE *pSoldier, UINT8 ui
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
UINT8 GetDirectionFromGridNo( INT16 sGridNo, SOLDIERTYPE *pSoldier )
|
||||
UINT8 GetDirectionFromGridNo( INT32 sGridNo, SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
INT16 sXPos, sYPos;
|
||||
|
||||
@@ -9520,7 +9511,7 @@ UINT8 GetDirectionFromGridNo( INT16 sGridNo, SOLDIERTYPE *pSoldier )
|
||||
return( GetDirectionFromXY( sXPos, sYPos, pSoldier ) );
|
||||
}
|
||||
|
||||
INT16 GetDirectionToGridNoFromGridNo( INT16 sGridNoDest, INT16 sGridNoSrc )
|
||||
INT16 GetDirectionToGridNoFromGridNo( INT32 sGridNoDest, INT32 sGridNoSrc )
|
||||
{
|
||||
INT16 sXPos2, sYPos2;
|
||||
INT16 sXPos, sYPos;
|
||||
@@ -9699,7 +9690,7 @@ void CheckForFullStructures( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
// This function checks to see if we are near a specific structure type which requires us to blit a
|
||||
// small obscuring peice
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT16 usFullTileIndex;
|
||||
INT32 cnt;
|
||||
|
||||
@@ -9730,7 +9721,7 @@ void CheckForFullStructures( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN CheckForFullStruct( INT16 sGridNo, UINT16 *pusIndex )
|
||||
BOOLEAN CheckForFullStruct( INT32 sGridNo, UINT16 *pusIndex )
|
||||
{
|
||||
LEVELNODE *pStruct = NULL;
|
||||
LEVELNODE *pOldStruct = NULL;
|
||||
@@ -9785,12 +9776,12 @@ BOOLEAN CheckForFullStruct( INT16 sGridNo, UINT16 *pusIndex )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN FullStructAlone( INT16 sGridNo, UINT8 ubRadius )
|
||||
BOOLEAN FullStructAlone( INT32 sGridNo, UINT8 ubRadius )
|
||||
{
|
||||
INT16 sTop, sBottom;
|
||||
INT16 sLeft, sRight;
|
||||
INT16 cnt1, cnt2;
|
||||
INT16 iNewIndex;
|
||||
INT32 sTop, sBottom;
|
||||
INT32 sLeft, sRight;
|
||||
INT32 cnt1, cnt2;
|
||||
INT32 iNewIndex;
|
||||
INT32 leftmost;
|
||||
|
||||
|
||||
@@ -9874,7 +9865,7 @@ void SendSoldierPositionEvent( SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNew
|
||||
|
||||
}
|
||||
|
||||
void SendSoldierDestinationEvent( SOLDIERTYPE *pSoldier, UINT16 usNewDestination )
|
||||
void SendSoldierDestinationEvent( SOLDIERTYPE *pSoldier, UINT32 usNewDestination )
|
||||
{
|
||||
// Sent event for position update
|
||||
EV_S_CHANGEDEST SChangeDest;
|
||||
@@ -9914,7 +9905,7 @@ void SendSoldierSetDesiredDirectionEvent( SOLDIERTYPE *pSoldier, UINT16 usDesire
|
||||
|
||||
}
|
||||
|
||||
void SendGetNewSoldierPathEvent( SOLDIERTYPE *pSoldier, INT16 sDestGridNo, UINT16 usMovementAnim )
|
||||
void SendGetNewSoldierPathEvent( SOLDIERTYPE *pSoldier, INT32 sDestGridNo, UINT16 usMovementAnim )
|
||||
{
|
||||
EV_S_GETNEWPATH SGetNewPath;
|
||||
|
||||
@@ -9953,7 +9944,7 @@ void SendChangeSoldierStanceEvent( SOLDIERTYPE *pSoldier, UINT8 ubNewStance )
|
||||
}
|
||||
|
||||
|
||||
void SendBeginFireWeaponEvent( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
|
||||
void SendBeginFireWeaponEvent( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
|
||||
{
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("SendBeginFireWeaponEvent"));
|
||||
EV_S_BEGINFIREWEAPON SBeginFireWeapon;
|
||||
@@ -10133,7 +10124,7 @@ void SOLDIERTYPE::HandleAnimationProfile( UINT16 usAnimState, BOOLEAN fRemove )
|
||||
ANIM_PROF_TILE *pProfileTile;
|
||||
INT8 bProfileID;
|
||||
UINT32 iTileCount;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT16 usAnimSurface;
|
||||
|
||||
// ATE
|
||||
@@ -10189,7 +10180,7 @@ void SOLDIERTYPE::HandleAnimationProfile( UINT16 usAnimState, BOOLEAN fRemove )
|
||||
}
|
||||
|
||||
|
||||
LEVELNODE *GetAnimProfileFlags( INT16 sGridNo, UINT16 *usFlags, SOLDIERTYPE **ppTargSoldier, LEVELNODE *pGivenNode )
|
||||
LEVELNODE *GetAnimProfileFlags( INT32 sGridNo, UINT16 *usFlags, SOLDIERTYPE **ppTargSoldier, LEVELNODE *pGivenNode )
|
||||
{
|
||||
LEVELNODE *pNode;
|
||||
|
||||
@@ -10223,14 +10214,14 @@ LEVELNODE *GetAnimProfileFlags( INT16 sGridNo, UINT16 *usFlags, SOLDIERTYPE **pp
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN SOLDIERTYPE::GetProfileFlagsFromGridno( UINT16 usAnimState, UINT16 sTestGridNo, UINT16 *usFlags )
|
||||
BOOLEAN SOLDIERTYPE::GetProfileFlagsFromGridno( UINT16 usAnimState, INT32 sTestGridNo, UINT16 *usFlags )
|
||||
{
|
||||
ANIM_PROF *pProfile;
|
||||
ANIM_PROF_DIR *pProfileDir;
|
||||
ANIM_PROF_TILE *pProfileTile;
|
||||
INT8 bProfileID;
|
||||
UINT32 iTileCount;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT16 usAnimSurface;
|
||||
|
||||
// Get Surface Index
|
||||
@@ -10298,7 +10289,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginGiveItem( void )
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginBladeAttack( INT16 sGridNo, UINT8 ubDirection )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginBladeAttack( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
SOLDIERTYPE *pTSoldier;
|
||||
//UINT32 uiMercFlags;
|
||||
@@ -10468,7 +10459,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginBladeAttack( INT16 sGridNo, UINT8 ubDirectio
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginPunchAttack( INT16 sGridNo, UINT8 ubDirection )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginPunchAttack( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
BOOLEAN fMartialArtist = FALSE;
|
||||
SOLDIERTYPE *pTSoldier;
|
||||
@@ -10603,7 +10594,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginPunchAttack( INT16 sGridNo, UINT8 ubDirectio
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginKnifeThrowAttack( INT16 sGridNo, UINT8 ubDirection )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginKnifeThrowAttack( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
// Increment the number of people busy doing stuff because of an attack
|
||||
//if ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT) )
|
||||
@@ -10623,7 +10614,11 @@ void SOLDIERTYPE::EVENT_SoldierBeginKnifeThrowAttack( INT16 sGridNo, UINT8 ubDir
|
||||
|
||||
// SET TARGET GRIDNO
|
||||
this->sTargetGridNo = sGridNo;
|
||||
this->sLastTarget = sGridNo;
|
||||
|
||||
// WANNE: Fix a vanilla bug: Throwing a knife costed one point less than it should.
|
||||
// Fixed by Tron (Stracciatella): Revision: 5787
|
||||
//this->sLastTarget = sGridNo;
|
||||
|
||||
this->flags.bTurningFromPronePosition = 0;
|
||||
// NB target level must be set by functions outside of here... but I think it
|
||||
// is already set in HandleItem or in the AI code - CJC
|
||||
@@ -10670,7 +10665,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginUseDetonator( void )
|
||||
}
|
||||
}
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginFirstAid( INT16 sGridNo, UINT8 ubDirection )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginFirstAid( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
SOLDIERTYPE *pTSoldier;
|
||||
//UINT32 uiMercFlags;
|
||||
@@ -10756,7 +10751,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginFirstAid( INT16 sGridNo, UINT8 ubDirection )
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierEnterVehicle( INT16 sGridNo, UINT8 ubDirection )
|
||||
void SOLDIERTYPE::EVENT_SoldierEnterVehicle( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
SOLDIERTYPE *pTSoldier;
|
||||
UINT32 uiMercFlags;
|
||||
@@ -11208,7 +11203,7 @@ void SOLDIERTYPE::HaultSoldierFromSighting( BOOLEAN fFromSightingEnemy )
|
||||
|
||||
|
||||
// HUALT EVENT IS USED TO STOP A MERC - NETWORKING SHOULD CHECK / ADJUST TO GRIDNO?
|
||||
void SOLDIERTYPE::EVENT_StopMerc( INT16 sGridNo, INT8 bDirection )
|
||||
void SOLDIERTYPE::EVENT_StopMerc( INT32 sGridNo, INT8 bDirection )
|
||||
{
|
||||
INT16 sX, sY;
|
||||
|
||||
@@ -11480,7 +11475,7 @@ UINT16 *CreateEnemyGreyGlow16BPPPalette( SGPPaletteEntry *pPalette, UINT32 rscal
|
||||
void ContinueMercMovement( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
INT16 sAPCost;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
|
||||
sGridNo = pSoldier->pathing.sFinalDestination;
|
||||
|
||||
@@ -12116,7 +12111,7 @@ FLOAT CalcSoldierNextUnmovingBleed( SOLDIERTYPE *pSoldier )
|
||||
return( (FLOAT)1 + (FLOAT)( (pSoldier->stats.bLife + bBandaged / 2) / 10 ) ); // min = 1
|
||||
}
|
||||
|
||||
void HandlePlacingRoofMarker( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fSet, BOOLEAN fForce )
|
||||
void HandlePlacingRoofMarker( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fSet, BOOLEAN fForce )
|
||||
{
|
||||
LEVELNODE *pRoofNode;
|
||||
LEVELNODE *pNode;
|
||||
@@ -12235,7 +12230,7 @@ void SOLDIERTYPE::SetCheckSoldierLightFlag( )
|
||||
}
|
||||
|
||||
|
||||
void PickPickupAnimation( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo, INT8 bZLevel )
|
||||
void PickPickupAnimation( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel )
|
||||
{
|
||||
INT8 bDirection;
|
||||
STRUCTURE *pStructure;
|
||||
@@ -12288,7 +12283,7 @@ void PickPickupAnimation( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo
|
||||
{
|
||||
//#if 0
|
||||
// Get direction to face....
|
||||
if ( ( pStructure = FindStructure( (INT16)sGridNo, ( STRUCTURE_HASITEMONTOP | STRUCTURE_OPENABLE ) ) ) != NULL )
|
||||
if ( ( pStructure = FindStructure( sGridNo, ( STRUCTURE_HASITEMONTOP | STRUCTURE_OPENABLE ) ) ) != NULL )
|
||||
{
|
||||
fDoNormalPickup = FALSE;
|
||||
|
||||
@@ -12374,7 +12369,7 @@ void SOLDIERTYPE::PickDropItemAnimation( void )
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginCutFence( INT16 sGridNo, UINT8 ubDirection )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginCutFence( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
// Make sure we have a structure here....
|
||||
if ( IsCuttableWireFenceAtGridNo( sGridNo ) )
|
||||
@@ -12397,7 +12392,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginCutFence( INT16 sGridNo, UINT8 ubDirection )
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginRepair( INT16 sGridNo, UINT8 ubDirection )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginRepair( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
INT8 bRepairItem;
|
||||
UINT8 ubID;
|
||||
@@ -12433,7 +12428,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginRepair( INT16 sGridNo, UINT8 ubDirection )
|
||||
}
|
||||
}
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginRefuel( INT16 sGridNo, UINT8 ubDirection )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginRefuel( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
INT8 bRefuelItem;
|
||||
UINT8 ubID;
|
||||
@@ -12459,7 +12454,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginRefuel( INT16 sGridNo, UINT8 ubDirection )
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginTakeBlood( INT16 sGridNo, UINT8 ubDirection )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginTakeBlood( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
ROTTING_CORPSE *pCorpse;
|
||||
|
||||
@@ -12485,7 +12480,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginTakeBlood( INT16 sGridNo, UINT8 ubDirection
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginAttachCan( INT16 sGridNo, UINT8 ubDirection )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginAttachCan( INT32 sGridNo, UINT8 ubDirection )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
DOOR_STATUS * pDoorStatus;
|
||||
@@ -12540,7 +12535,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginAttachCan( INT16 sGridNo, UINT8 ubDirection
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginReloadRobot( INT16 sGridNo, UINT8 ubDirection, UINT8 ubMercSlot )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginReloadRobot( INT32 sGridNo, UINT8 ubDirection, UINT8 ubMercSlot )
|
||||
{
|
||||
UINT8 ubPerson;
|
||||
|
||||
@@ -12582,9 +12577,9 @@ void SOLDIERTYPE::ResetSoldierChangeStatTimer( void )
|
||||
|
||||
void SOLDIERTYPE::ChangeToFlybackAnimation( UINT8 flyBackDirection )
|
||||
{
|
||||
INT32 sNewGridNo;
|
||||
UINT8 ubOppositeDir;
|
||||
INT16 sDirectionInc;
|
||||
INT16 sNewGridNo;
|
||||
|
||||
ubOppositeDir = gOppositeDirection[ flyBackDirection ];
|
||||
sDirectionInc = DirectionInc( ubOppositeDir);
|
||||
@@ -12634,7 +12629,7 @@ void SOLDIERTYPE::ChangeToFlybackAnimation( UINT8 flyBackDirection )
|
||||
|
||||
void SOLDIERTYPE::ChangeToFallbackAnimation( UINT8 fallBackDirection )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
UINT8 ubOppositeDir;
|
||||
INT16 sDirection;
|
||||
|
||||
@@ -12714,7 +12709,7 @@ void SOLDIERTYPE::SetSoldierCowerState( BOOLEAN fOn )
|
||||
|
||||
void MercStealFromMerc( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pTarget )
|
||||
{
|
||||
INT16 sActionGridNo, sGridNo, sAdjustedGridNo;
|
||||
INT32 sActionGridNo, sGridNo, sAdjustedGridNo;
|
||||
UINT8 ubDirection;
|
||||
|
||||
|
||||
@@ -13450,8 +13445,8 @@ void SetSoldierPersonalLightLevel( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( pSoldier->sGridNo == NOWHERE )
|
||||
|
||||
if(TileIsOutOfBounds(pSoldier->sGridNo))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -13462,3 +13457,12 @@ void SetSoldierPersonalLightLevel( SOLDIERTYPE *pSoldier )
|
||||
gpWorldLevelData[pSoldier->sGridNo].pMercHead->ubMaxLights = 5;
|
||||
gpWorldLevelData[pSoldier->sGridNo].pMercHead->ubNaturalShadeLevel = 5;
|
||||
}
|
||||
|
||||
BOOLEAN DoesSoldierWearGasMask(SOLDIERTYPE *pSoldier)//dnl ch40 200909
|
||||
{
|
||||
INT8 bPosOfMask = FindGasMask(pSoldier);
|
||||
|
||||
if((bPosOfMask == HEAD1POS || bPosOfMask == HEAD2POS) && pSoldier->inv[bPosOfMask][0]->data.objectStatus >= USABLE)
|
||||
return(TRUE);
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
+106
-104
@@ -1,10 +1,10 @@
|
||||
#ifndef __SOLDER_CONTROL_H
|
||||
#define __SOLDER_CONTROL_H
|
||||
|
||||
|
||||
//Kris: November 10, 1997
|
||||
//Please don't change this value from 10. It will invalidate all of the maps and soldiers.
|
||||
#define MAXPATROLGRIDS 10 // *** THIS IS A DUPLICATION - MUST BE MOVED !
|
||||
//dnl ch33 200909
|
||||
// In the future MAXPATROLDGRIDS could be externalized but his value must always be >= OLD_MAXPATROLGRIDS
|
||||
#define OLD_MAXPATROLGRIDS 10
|
||||
#define MAXPATROLGRIDS OLD_MAXPATROLGRIDS
|
||||
|
||||
#include "Animation Cache.h"
|
||||
#include "Timer Control.h"
|
||||
@@ -340,6 +340,7 @@ enum
|
||||
HIT_BY_MUSTARDGAS = 0x02,
|
||||
HIT_BY_CREATUREGAS = 0x04,
|
||||
HIT_BY_BURNABLEGAS = 0x08,
|
||||
HIT_BY_SMOKEGAS = 0x10,//dnl ch40 200909
|
||||
};
|
||||
|
||||
|
||||
@@ -398,9 +399,9 @@ public:
|
||||
INT8 bOppList[MAX_NUM_SOLDIERS]; // AI knowledge database
|
||||
INT8 bLastAction;
|
||||
INT8 bAction;
|
||||
UINT16 usActionData;
|
||||
INT32 usActionData;
|
||||
INT8 bNextAction;
|
||||
UINT16 usNextActionData;
|
||||
INT32 usNextActionData;
|
||||
INT8 bActionInProgress;
|
||||
INT8 bAlertStatus;
|
||||
INT8 bOppCnt;
|
||||
@@ -417,8 +418,8 @@ public:
|
||||
INT8 bDominantDir; // AI main direction to face...
|
||||
INT8 bPatrolCnt; // number of patrol gridnos
|
||||
INT8 bNextPatrolPnt; // index to next patrol gridno
|
||||
INT16 sPatrolGrid[MAXPATROLGRIDS];// AI list for ptr->orders==PATROL
|
||||
INT16 sNoiseGridno;
|
||||
INT32 sPatrolGrid[MAXPATROLGRIDS];// AI list for ptr->orders==PATROL
|
||||
INT32 sNoiseGridno;
|
||||
UINT8 ubNoiseVolume;
|
||||
INT8 bLastAttackHit;
|
||||
UINT8 ubXRayedBy;
|
||||
@@ -430,11 +431,11 @@ public:
|
||||
INT8 bAIMorale;
|
||||
UINT8 ubPendingAction;
|
||||
UINT8 ubPendingActionAnimCount;
|
||||
UINT32 uiPendingActionData1;
|
||||
INT16 sPendingActionData2;
|
||||
UINT32 uiPendingActionData1;
|
||||
INT32 sPendingActionData2;
|
||||
INT8 bPendingActionData3;
|
||||
INT8 ubDoorHandleCode;
|
||||
UINT32 uiPendingActionData4;
|
||||
UINT32 uiPendingActionData4;
|
||||
INT8 bInterruptDuelPts;
|
||||
INT8 bPassedLastInterrupt;
|
||||
INT16 bIntStartAPs; //100AP
|
||||
@@ -442,7 +443,7 @@ public:
|
||||
INT8 bHunting;
|
||||
UINT8 ubLastCall;
|
||||
UINT8 ubCaller;
|
||||
INT16 sCallerGridNo;
|
||||
INT32 sCallerGridNo;
|
||||
UINT8 bCallPriority;
|
||||
INT8 bCallActedUpon;
|
||||
INT8 bFrenzied;
|
||||
@@ -626,9 +627,9 @@ public:
|
||||
INT8 bDesiredDirection;
|
||||
INT16 sDestXPos;
|
||||
INT16 sDestYPos;
|
||||
//INT16 sDesiredDest;//apparently not used
|
||||
INT16 sDestination;
|
||||
INT16 sFinalDestination;
|
||||
//INT32 sDesiredDest;//apparently not used
|
||||
INT32 sDestination;
|
||||
INT32 sFinalDestination;
|
||||
INT8 bLevel;
|
||||
INT8 bStopped;
|
||||
INT8 bNeedToLook;
|
||||
@@ -636,7 +637,7 @@ public:
|
||||
UINT16 usPathingData[ MAX_PATH_LIST_SIZE ];
|
||||
UINT16 usPathDataSize;
|
||||
UINT16 usPathIndex;
|
||||
INT16 sBlackList;
|
||||
INT32 sBlackList;
|
||||
INT8 bPathStored; // good for AI to reduct redundancy
|
||||
};
|
||||
|
||||
@@ -674,7 +675,7 @@ public:
|
||||
UINT8 bReserved1;
|
||||
CHAR16 name[ 10 ];
|
||||
|
||||
INT16 GetMaxDistanceVisible(INT16 sGridNo = -1, INT8 bLevel = -1, int calcAsType = -1);
|
||||
INT16 GetMaxDistanceVisible(INT32 sGridNo = -1, INT8 bLevel = -1, int calcAsType = -1);
|
||||
|
||||
// DESCRIPTION / STATS, ETC
|
||||
UINT8 ubBodyType;
|
||||
@@ -721,12 +722,12 @@ public:
|
||||
FLOAT dYPos;
|
||||
FLOAT dOldXPos;
|
||||
FLOAT dOldYPos;
|
||||
INT16 sInitialGridNo;
|
||||
INT16 sGridNo;
|
||||
INT32 sInitialGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT8 ubDirection;
|
||||
INT16 sHeightAdjustment;
|
||||
INT16 sDesiredHeight;
|
||||
INT16 sTempNewGridNo; // New grid no for advanced animations
|
||||
INT32 sTempNewGridNo; // New grid no for advanced animations
|
||||
INT16 sRoomNo;
|
||||
INT8 bOverTerrainType;
|
||||
INT8 bOldOverTerrainType;
|
||||
@@ -748,7 +749,7 @@ public:
|
||||
UINT8 ubAttackerID;
|
||||
UINT8 ubPreviousAttackerID;
|
||||
|
||||
INT16 sInsertionGridNo;
|
||||
INT32 sInsertionGridNo;
|
||||
|
||||
|
||||
AnimationSurfaceCacheType AnimCache; // will be 9 bytes once changed to pointers
|
||||
@@ -764,15 +765,15 @@ public:
|
||||
|
||||
// MOVEMENT TO NEXT TILE HANDLING STUFF
|
||||
UINT8 ubDelayedMovementCauseMerc;
|
||||
INT16 sDelayedMovementCauseGridNo;
|
||||
INT16 sReservedMovementGridNo;
|
||||
INT32 sDelayedMovementCauseGridNo;
|
||||
INT32 sReservedMovementGridNo;
|
||||
|
||||
|
||||
// Weapon Stuff
|
||||
INT16 sTargetGridNo;
|
||||
INT32 sTargetGridNo;
|
||||
INT8 bTargetLevel;
|
||||
INT8 bTargetCubeLevel;
|
||||
INT16 sLastTarget;
|
||||
INT32 sLastTarget;
|
||||
INT8 bTilesMoved;
|
||||
FLOAT dNextBleed;
|
||||
|
||||
@@ -785,7 +786,7 @@ public:
|
||||
|
||||
// FULL 3-d TILE STUFF ( keep records of three tiles infront )
|
||||
UINT16 usFrontArcFullTileList[ MAX_FULLTILE_DIRECTIONS ];
|
||||
INT16 usFrontArcFullTileGridNos[ MAX_FULLTILE_DIRECTIONS ];
|
||||
INT32 usFrontArcFullTileGridNos[ MAX_FULLTILE_DIRECTIONS ];
|
||||
|
||||
|
||||
// PALETTE MANAGEMENT STUFF
|
||||
@@ -822,7 +823,7 @@ public:
|
||||
UINT16 usUnblitWidth, usUnblitHeight;
|
||||
|
||||
UINT8 ubStrategicInsertionCode;
|
||||
UINT16 usStrategicInsertionData;
|
||||
INT32 usStrategicInsertionData;
|
||||
|
||||
|
||||
INT32 iLight;
|
||||
@@ -848,7 +849,7 @@ public:
|
||||
UINT16 usAnimSurface;
|
||||
UINT16 sZLevel;
|
||||
|
||||
INT16 sWalkToAttackGridNo;
|
||||
INT32 sWalkToAttackGridNo;
|
||||
INT16 sWalkToAttackWalkToCost;
|
||||
|
||||
|
||||
@@ -899,10 +900,10 @@ public:
|
||||
INT16 sPlannedTargetX;
|
||||
INT16 sPlannedTargetY;
|
||||
|
||||
INT16 sSpreadLocations[ MAX_BURST_SPREAD_TARGETS ];
|
||||
INT16 sStartGridNo;
|
||||
INT16 sEndGridNo;
|
||||
INT16 sForcastGridno;
|
||||
INT32 sSpreadLocations[ MAX_BURST_SPREAD_TARGETS ];
|
||||
INT32 sStartGridNo;
|
||||
INT32 sEndGridNo;
|
||||
INT32 sForcastGridno;
|
||||
INT16 sZLevelOverride;
|
||||
INT8 bMovedPriorToInterrupt;
|
||||
INT32 iEndofContractTime; // time, in global time(resolution, minutes) that merc will leave, or if its a M.E.R.C. merc it will be set to -1. -2 for NPC and player generated
|
||||
@@ -929,7 +930,7 @@ public:
|
||||
|
||||
UINT32 uiSoldierUpdateNumber;
|
||||
BYTE ubSoldierUpdateType;
|
||||
UINT16 sScheduledStop; //hayden, used for scheduling a grid to stop
|
||||
INT32 sScheduledStop; //hayden, used for scheduling a grid to stop
|
||||
//END
|
||||
|
||||
INT32 iStartOfInsuranceContract;
|
||||
@@ -953,22 +954,22 @@ public:
|
||||
INT8 bEndDoorOpenCode;
|
||||
|
||||
UINT8 ubScheduleID;
|
||||
INT16 sEndDoorOpenCodeData;
|
||||
INT32 sEndDoorOpenCodeData;//dnl ch53 121009
|
||||
INT8 bBlockedByAnotherMercDirection;
|
||||
UINT16 usAttackingWeapon;
|
||||
INT8 bWeaponMode;
|
||||
UINT8 ubTargetID;
|
||||
INT8 bAIScheduleProgress;
|
||||
INT16 sOffWorldGridNo;
|
||||
INT32 sOffWorldGridNo;
|
||||
struct TAG_anitile *pAniTile;
|
||||
INT8 bCamo;
|
||||
INT16 sAbsoluteFinalDestination;
|
||||
INT32 sAbsoluteFinalDestination;
|
||||
UINT8 ubHiResDirection;
|
||||
UINT8 ubHiResDesiredDirection;
|
||||
UINT8 ubLastFootPrintSound;
|
||||
INT8 bVehicleID;
|
||||
INT8 bMovementDirection;
|
||||
INT16 sOldGridNo;
|
||||
INT32 sOldGridNo;
|
||||
UINT16 usDontUpdateNewGridNoOnMoveAnimChange;
|
||||
INT16 sBoundingBoxWidth;
|
||||
INT16 sBoundingBoxHeight;
|
||||
@@ -996,14 +997,14 @@ public:
|
||||
UINT8 ubTurnsUntilCanSayHeardNoise;
|
||||
UINT16 usQuoteSaidExtFlags;
|
||||
|
||||
UINT16 sContPathLocation;
|
||||
INT32 sContPathLocation;//dnl ch53 was UINT16
|
||||
INT8 bGoodContPath;
|
||||
UINT8 ubPendingActionInterrupted;
|
||||
INT8 bNoiseLevel;
|
||||
INT8 bRegenerationCounter;
|
||||
INT8 bRegenBoostersUsedToday;
|
||||
INT8 bNumPelletsHitBy;
|
||||
INT16 sSkillCheckGridNo;
|
||||
INT32 sSkillCheckGridNo;
|
||||
UINT8 ubLastEnemyCycledID;
|
||||
|
||||
UINT8 ubPrevSectorID;
|
||||
@@ -1024,12 +1025,12 @@ public:
|
||||
UINT8 ubMiscSoldierFlags;
|
||||
UINT8 ubReasonCantFinishMove;
|
||||
|
||||
INT16 sLocationOfFadeStart;
|
||||
INT32 sLocationOfFadeStart;
|
||||
UINT8 bUseExitGridForReentryDirection;
|
||||
|
||||
UINT32 uiTimeSinceLastSpoke;
|
||||
UINT8 ubContractRenewalQuoteCode;
|
||||
INT16 sPreTraversalGridNo;
|
||||
INT32 sPreTraversalGridNo;
|
||||
UINT32 uiXRayActivatedTime;
|
||||
INT8 bTurningFromUI;
|
||||
INT8 bPendingActionData5;
|
||||
@@ -1043,6 +1044,7 @@ public:
|
||||
|
||||
UINT32 uiTimeSoldierWillArrive;
|
||||
|
||||
|
||||
INT8 bVehicleUnderRepairID;
|
||||
INT32 iTimeCanSignElsewhere;
|
||||
INT8 bHospitalPriceModifier;
|
||||
@@ -1052,12 +1054,12 @@ public:
|
||||
INT32 iPositionSndID;
|
||||
INT32 iTuringSoundID;
|
||||
UINT8 ubLastDamageReason;
|
||||
INT16 sLastTwoLocations[2];
|
||||
INT32 sLastTwoLocations[2];
|
||||
INT32 uiTimeSinceLastBleedGrunt;
|
||||
UINT8 ubNextToPreviousAttackerID;
|
||||
UINT8 bDoAutofire;
|
||||
INT8 numFlanks;
|
||||
INT16 lastFlankSpot;
|
||||
INT32 lastFlankSpot;
|
||||
INT8 sniper;
|
||||
INT16 origDir;
|
||||
INT8 wornCamo;
|
||||
@@ -1096,7 +1098,7 @@ public:
|
||||
STRUCT_Pathing pathing;
|
||||
|
||||
// Debugging data - not saved
|
||||
INT16 sPlotSrcGrid;
|
||||
INT32 sPlotSrcGrid;
|
||||
|
||||
|
||||
public:
|
||||
@@ -1114,32 +1116,32 @@ public:
|
||||
BOOLEAN ChangeSoldierState( UINT16 usNewState, UINT16 usStartingAniCode, BOOLEAN fForce );
|
||||
void EVENT_SetSoldierPosition( FLOAT dNewXPos, FLOAT dNewYPos );
|
||||
void EVENT_SetSoldierDestination( UINT8 ubNewDirection );
|
||||
void EVENT_GetNewSoldierPath( INT16 sDestGridNo, UINT16 usMovementAnim );
|
||||
void EVENT_GetNewSoldierPath( INT32 sDestGridNo, UINT16 usMovementAnim );
|
||||
|
||||
void EVENT_SetSoldierDirection( UINT16 usNewDirection );
|
||||
void EVENT_SetSoldierDesiredDirection( UINT16 usNewDirection );
|
||||
void EVENT_FireSoldierWeapon( INT16 sTargetGridNo );
|
||||
void EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 ubDamage, INT16 sBreathLoss, UINT16 bDirection , UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT16 sLocationGridNo );
|
||||
void EVENT_SoldierBeginBladeAttack( INT16 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginPunchAttack( INT16 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginFirstAid( INT16 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_StopMerc( INT16 sGridNo, INT8 bDirection );
|
||||
void EVENT_SoldierBeginCutFence( INT16 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginRepair( INT16 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginRefuel( INT16 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginKnifeThrowAttack( INT16 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_FireSoldierWeapon( INT32 sTargetGridNo );
|
||||
void EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 ubDamage, INT16 sBreathLoss, UINT16 bDirection , UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGridNo );
|
||||
void EVENT_SoldierBeginBladeAttack( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginPunchAttack( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginFirstAid( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_StopMerc( INT32 sGridNo, INT8 bDirection );
|
||||
void EVENT_SoldierBeginCutFence( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginRepair( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginRefuel( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginKnifeThrowAttack( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginUseDetonator( void );
|
||||
void EVENT_SoldierBeginDropBomb( void );
|
||||
void EVENT_SoldierEnterVehicle( INT16 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierEnterVehicle( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginGiveItem( void );
|
||||
void EVENT_SetSoldierPositionAndMaybeFinalDest( FLOAT dNewXPos, FLOAT dNewYPos, BOOLEAN fUpdateFinalDest );
|
||||
void EVENT_SetSoldierPositionForceDelete( FLOAT dNewXPos, FLOAT dNewYPos );
|
||||
void EVENT_SoldierBeginReloadRobot( INT16 sGridNo, UINT8 ubDirection, UINT8 ubMercSlot );
|
||||
void EVENT_SoldierBeginTakeBlood( INT16 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginAttachCan( INT16 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginReloadRobot( INT32 sGridNo, UINT8 ubDirection, UINT8 ubMercSlot );
|
||||
void EVENT_SoldierBeginTakeBlood( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginAttachCan( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_BeginMercTurn( BOOLEAN fFromRealTime, INT32 iRealTimeCounter );
|
||||
|
||||
BOOLEAN EVENT_InternalGetNewSoldierPath( INT16 sDestGridNo, UINT16 usMovementAnim, BOOLEAN fFromUI, BOOLEAN fForceRestart );
|
||||
BOOLEAN EVENT_InternalGetNewSoldierPath( INT32 sDestGridNo, UINT16 usMovementAnim, BOOLEAN fFromUI, BOOLEAN fForceRestart );
|
||||
void EVENT_InternalSetSoldierDestination( UINT16 usNewDirection, BOOLEAN fFromMove, UINT16 usAnimState );
|
||||
void EVENT_InternalSetSoldierPosition( FLOAT dNewXPos, FLOAT dNewYPos ,BOOLEAN fUpdateDest, BOOLEAN fUpdateFinalDest, BOOLEAN fForceDelete );
|
||||
|
||||
@@ -1150,7 +1152,7 @@ public:
|
||||
void ChangeSoldierStance( UINT8 ubDesiredStance );
|
||||
void StopSoldier( void );
|
||||
void ReviveSoldier( void );
|
||||
UINT8 SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathDeduct, UINT8 ubReason, UINT8 ubAttacker, INT16 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage );
|
||||
UINT8 SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathDeduct, UINT8 ubReason, UINT8 ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage );
|
||||
|
||||
|
||||
// Palette functions for soldiers
|
||||
@@ -1192,14 +1194,14 @@ public:
|
||||
void SetSoldierCowerState( BOOLEAN fOn );
|
||||
void SetSoldierAsUnderAiControl( void );
|
||||
void ResetSoldierChangeStatTimer( void );
|
||||
void SetSoldierGridNo( INT16 sNewGridNo, BOOLEAN fForceRemove );
|
||||
void SetSoldierGridNo( INT32 sNewGridNo, BOOLEAN fForceRemove );
|
||||
void SetSoldierHeight( FLOAT dNewHeight );
|
||||
void InternalSetSoldierHeight( FLOAT dNewHeight, BOOLEAN fUpdateLevel );//this function did not have a forward declaration
|
||||
|
||||
|
||||
BOOLEAN DoMercBattleSound( UINT8 ubBattleSoundID );
|
||||
BOOLEAN InternalDoMercBattleSound( UINT8 ubBattleSoundID, INT8 bSpecialCode );
|
||||
BOOLEAN GetProfileFlagsFromGridno( UINT16 usAnimState, UINT16 sTestGridNo, UINT16 *usFlags );
|
||||
BOOLEAN GetProfileFlagsFromGridno( UINT16 usAnimState, INT32 sTestGridNo, UINT16 *usFlags );
|
||||
void HaultSoldierFromSighting( BOOLEAN fFromSightingEnemy );
|
||||
void ReLoadSoldierAnimationDueToHandItemChange( UINT16 usOldItem, UINT16 usNewItem );
|
||||
void DoNinjaAttack( void );
|
||||
@@ -1327,11 +1329,11 @@ BOOLEAN DeletePaletteData( );
|
||||
// UTILITY FUNCTUIONS
|
||||
void MoveMercFacingDirection( SOLDIERTYPE *pSoldier, BOOLEAN fReverse, FLOAT dMovementDist );
|
||||
UINT8 GetDirectionFromXY( INT16 sXPos, INT16 sYPos, SOLDIERTYPE *pSoldier );
|
||||
BOOLEAN GetDirectionChangeAmount( INT16 sGridNo, SOLDIERTYPE *pSoldier, UINT8 uiTurnAmount);
|
||||
UINT8 GetDirectionFromGridNo( INT16 sGridNo, SOLDIERTYPE *pSoldier );
|
||||
BOOLEAN GetDirectionChangeAmount( INT32 sGridNo, SOLDIERTYPE *pSoldier, UINT8 uiTurnAmount);
|
||||
UINT8 GetDirectionFromGridNo( INT32 sGridNo, SOLDIERTYPE *pSoldier );
|
||||
UINT8 atan8( INT16 sXPos, INT16 sYPos, INT16 sXPos2, INT16 sYPos2 );
|
||||
UINT8 atan8FromAngle( DOUBLE dAngle );
|
||||
INT16 GetDirectionToGridNoFromGridNo( INT16 sGridNoDest, INT16 sGridNoSrc );
|
||||
INT16 GetDirectionToGridNoFromGridNo( INT32 sGridNoDest, INT32 sGridNoSrc );
|
||||
// This function is now obsolete. Call ReduceAttackBusyCount instead.
|
||||
// void ReleaseSoldiersAttacker( SOLDIERTYPE *pSoldier );
|
||||
|
||||
@@ -1340,16 +1342,16 @@ INT16 GetDirectionToGridNoFromGridNo( INT16 sGridNoDest, INT16 sGridNoSrc );
|
||||
// WRAPPERS FOR SOLDIER EVENTS
|
||||
void SendSoldierPositionEvent( SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNewYPos );
|
||||
void SendSoldierDestinationEvent( SOLDIERTYPE *pSoldier, UINT16 usNewDestination );
|
||||
void SendGetNewSoldierPathEvent( SOLDIERTYPE *pSoldier, INT16 sDestGridNo, UINT16 usMovementAnim );
|
||||
void SendGetNewSoldierPathEvent( SOLDIERTYPE *pSoldier, INT32 sDestGridNo, UINT16 usMovementAnim );
|
||||
void SendSoldierSetDirectionEvent( SOLDIERTYPE *pSoldier, UINT16 usNewDirection );
|
||||
void SendSoldierSetDesiredDirectionEvent( SOLDIERTYPE *pSoldier, UINT16 usDesiredDirection );
|
||||
void SendChangeSoldierStanceEvent( SOLDIERTYPE *pSoldier, UINT8 ubNewStance );
|
||||
void SendBeginFireWeaponEvent( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo );
|
||||
void SendBeginFireWeaponEvent( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo );
|
||||
|
||||
|
||||
|
||||
void HandleAnimationProfile( SOLDIERTYPE *pSoldier, UINT16 usAnimState, BOOLEAN fRemove );
|
||||
BOOLEAN GetProfileFlagsFromGridno( SOLDIERTYPE *pSoldier, UINT16 usAnimState, UINT16 sTestGridNo, UINT16 *usFlags );
|
||||
BOOLEAN GetProfileFlagsFromGridno( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT32 sTestGridNo, UINT16 *usFlags );
|
||||
BOOLEAN PreloadSoldierBattleSounds( SOLDIERTYPE *pSoldier, BOOLEAN fRemove );
|
||||
void CrowsFlyAway( UINT8 ubTeam );
|
||||
void DebugValidateSoldierData( );
|
||||
@@ -1477,12 +1479,12 @@ public:
|
||||
FLOAT dYPos;
|
||||
FLOAT dOldXPos;
|
||||
FLOAT dOldYPos;
|
||||
INT16 sInitialGridNo;
|
||||
INT16 sGridNo;
|
||||
INT32 sInitialGridNo;
|
||||
INT32 sGridNo;
|
||||
UINT8 ubDirection;
|
||||
INT16 sHeightAdjustment;
|
||||
INT16 sDesiredHeight;
|
||||
INT16 sTempNewGridNo; // New grid no for advanced animations
|
||||
INT32 sTempNewGridNo; // New grid no for advanced animations
|
||||
INT16 sRoomNo;
|
||||
INT8 bOverTerrainType;
|
||||
INT8 bOldOverTerrainType;
|
||||
@@ -1528,7 +1530,7 @@ public:
|
||||
BOOLEAN fPauseAllAnimation;
|
||||
|
||||
INT8 bExpLevel; // general experience level
|
||||
INT16 sInsertionGridNo;
|
||||
INT32 sInsertionGridNo;
|
||||
|
||||
BOOLEAN fContinueMoveAfterStanceChange;
|
||||
|
||||
@@ -1548,17 +1550,17 @@ public:
|
||||
// MOVEMENT TO NEXT TILE HANDLING STUFF
|
||||
INT8 bAgility; // agility (speed) value
|
||||
UINT8 ubDelayedMovementCauseMerc;
|
||||
INT16 sDelayedMovementCauseGridNo;
|
||||
INT16 sReservedMovementGridNo;
|
||||
INT32 sDelayedMovementCauseGridNo;
|
||||
INT32 sReservedMovementGridNo;
|
||||
|
||||
INT8 bStrength;
|
||||
|
||||
// Weapon Stuff
|
||||
BOOLEAN fHoldAttackerUntilDone;
|
||||
INT16 sTargetGridNo;
|
||||
INT32 sTargetGridNo;
|
||||
INT8 bTargetLevel;
|
||||
INT8 bTargetCubeLevel;
|
||||
INT16 sLastTarget;
|
||||
INT32 sLastTarget;
|
||||
INT8 bTilesMoved;
|
||||
INT8 bLeadership;
|
||||
FLOAT dNextBleed;
|
||||
@@ -1593,7 +1595,7 @@ public:
|
||||
|
||||
// FULL 3-d TILE STUFF ( keep records of three tiles infront )
|
||||
UINT16 usFrontArcFullTileList[ MAX_FULLTILE_DIRECTIONS ];
|
||||
INT16 usFrontArcFullTileGridNos[ MAX_FULLTILE_DIRECTIONS ];
|
||||
INT32 usFrontArcFullTileGridNos[ MAX_FULLTILE_DIRECTIONS ];
|
||||
|
||||
|
||||
SGPPaletteEntry *p8BPPPalette; // 4
|
||||
@@ -1619,9 +1621,9 @@ public:
|
||||
INT8 bDesiredDirection;
|
||||
INT16 sDestXPos;
|
||||
INT16 sDestYPos;
|
||||
INT16 sDesiredDest;
|
||||
INT16 sDestination;
|
||||
INT16 sFinalDestination;
|
||||
INT32 sDesiredDest;
|
||||
INT32 sDestination;
|
||||
INT32 sFinalDestination;
|
||||
INT8 bLevel;
|
||||
INT8 bStopped;
|
||||
INT8 bNeedToLook;
|
||||
@@ -1633,7 +1635,7 @@ public:
|
||||
UINT16 usPathingData[ MAX_PATH_LIST_SIZE ];
|
||||
UINT16 usPathDataSize;
|
||||
UINT16 usPathIndex;
|
||||
INT16 sBlackList;
|
||||
INT32 sBlackList;
|
||||
INT8 bAimTime;
|
||||
INT8 bShownAimTime;
|
||||
INT8 bPathStored; // good for AI to reduct redundancy
|
||||
@@ -1647,7 +1649,7 @@ public:
|
||||
UINT16 usUnblitWidth, usUnblitHeight;
|
||||
|
||||
UINT8 ubStrategicInsertionCode;
|
||||
UINT16 usStrategicInsertionData;
|
||||
INT32 usStrategicInsertionData;
|
||||
|
||||
|
||||
INT32 iLight;
|
||||
@@ -1673,9 +1675,9 @@ public:
|
||||
INT8 bOppList[MAX_NUM_SOLDIERS]; // AI knowledge database
|
||||
INT8 bLastAction;
|
||||
INT8 bAction;
|
||||
UINT16 usActionData;
|
||||
INT32 usActionData;
|
||||
INT8 bNextAction;
|
||||
UINT16 usNextActionData;
|
||||
INT32 usNextActionData;
|
||||
INT8 bActionInProgress;
|
||||
INT8 bAlertStatus;
|
||||
INT8 bOppCnt;
|
||||
@@ -1692,8 +1694,8 @@ public:
|
||||
INT8 bDominantDir; // AI main direction to face...
|
||||
INT8 bPatrolCnt; // number of patrol gridnos
|
||||
INT8 bNextPatrolPnt; // index to next patrol gridno
|
||||
INT16 usPatrolGrid[MAXPATROLGRIDS];// AI list for ptr->orders==PATROL
|
||||
INT16 sNoiseGridno;
|
||||
INT16 usPatrolGrid[OLD_MAXPATROLGRIDS];//dnl ch27 230909
|
||||
INT16 sNoiseGridNo;
|
||||
UINT8 ubNoiseVolume;
|
||||
INT8 bLastAttackHit;
|
||||
UINT8 ubXRayedBy;
|
||||
@@ -1706,7 +1708,7 @@ public:
|
||||
UINT8 ubPendingAction;
|
||||
UINT8 ubPendingActionAnimCount;
|
||||
UINT32 uiPendingActionData1;
|
||||
INT16 sPendingActionData2;
|
||||
INT32 sPendingActionData2;
|
||||
INT8 bPendingActionData3;
|
||||
INT8 ubDoorHandleCode;
|
||||
UINT32 uiPendingActionData4;
|
||||
@@ -1717,7 +1719,7 @@ public:
|
||||
INT8 bHunting;
|
||||
UINT8 ubLastCall;
|
||||
UINT8 ubCaller;
|
||||
INT16 sCallerGridNo;
|
||||
INT32 sCallerGridNo;
|
||||
UINT8 bCallPriority;
|
||||
INT8 bCallActedUpon;
|
||||
INT8 bFrenzied;
|
||||
@@ -1733,7 +1735,7 @@ public:
|
||||
BOOLEAN fPrevInWater;
|
||||
BOOLEAN fGoBackToAimAfterHit;
|
||||
|
||||
INT16 sWalkToAttackGridNo;
|
||||
INT32 sWalkToAttackGridNo;
|
||||
INT16 sWalkToAttackWalkToCost;
|
||||
|
||||
BOOLEAN fForceRenderColor;
|
||||
@@ -1800,11 +1802,11 @@ public:
|
||||
INT16 sPlannedTargetX;
|
||||
INT16 sPlannedTargetY;
|
||||
|
||||
INT16 sSpreadLocations[ MAX_BURST_SPREAD_TARGETS ];
|
||||
INT32 sSpreadLocations[ MAX_BURST_SPREAD_TARGETS ];
|
||||
BOOLEAN fDoSpread;
|
||||
INT16 sStartGridNo;
|
||||
INT16 sEndGridNo;
|
||||
INT16 sForcastGridno;
|
||||
INT32 sStartGridNo;
|
||||
INT32 sEndGridNo;
|
||||
INT32 sForcastGridNo;
|
||||
INT16 sZLevelOverride;
|
||||
INT8 bMovedPriorToInterrupt;
|
||||
INT32 iEndofContractTime; // time, in global time(resolution, minutes) that merc will leave, or if its a M.E.R.C. merc it will be set to -1. -2 for NPC and player generated
|
||||
@@ -1886,10 +1888,10 @@ public:
|
||||
INT8 bWeaponMode;
|
||||
UINT8 ubTargetID;
|
||||
INT8 bAIScheduleProgress;
|
||||
INT16 sOffWorldGridNo;
|
||||
INT32 sOffWorldGridNo;
|
||||
struct TAG_anitile *pAniTile;
|
||||
INT8 bCamo;
|
||||
INT16 sAbsoluteFinalDestination;
|
||||
INT32 sAbsoluteFinalDestination;
|
||||
UINT8 ubHiResDirection;
|
||||
UINT8 ubHiResDesiredDirection;
|
||||
UINT8 ubLastFootPrintSound;
|
||||
@@ -1897,7 +1899,7 @@ public:
|
||||
INT8 fPastXDest;
|
||||
INT8 fPastYDest;
|
||||
INT8 bMovementDirection;
|
||||
INT16 sOldGridNo;
|
||||
INT32 sOldGridNo;
|
||||
UINT16 usDontUpdateNewGridNoOnMoveAnimChange;
|
||||
INT16 sBoundingBoxWidth;
|
||||
INT16 sBoundingBoxHeight;
|
||||
@@ -1941,14 +1943,14 @@ public:
|
||||
UINT8 ubTurnsUntilCanSayHeardNoise;
|
||||
UINT16 usQuoteSaidExtFlags;
|
||||
|
||||
UINT16 sContPathLocation;
|
||||
UINT32 sContPathLocation;
|
||||
INT8 bGoodContPath;
|
||||
UINT8 ubPendingActionInterrupted;
|
||||
INT8 bNoiseLevel;
|
||||
INT8 bRegenerationCounter;
|
||||
INT8 bRegenBoostersUsedToday;
|
||||
INT8 bNumPelletsHitBy;
|
||||
INT16 sSkillCheckGridNo;
|
||||
INT32 sSkillCheckGridNo;
|
||||
UINT8 ubLastEnemyCycledID;
|
||||
|
||||
UINT8 ubPrevSectorID;
|
||||
@@ -1973,12 +1975,12 @@ public:
|
||||
UINT8 ubMiscSoldierFlags;
|
||||
UINT8 ubReasonCantFinishMove;
|
||||
|
||||
INT16 sLocationOfFadeStart;
|
||||
INT32 sLocationOfFadeStart;
|
||||
UINT8 bUseExitGridForReentryDirection;
|
||||
|
||||
UINT32 uiTimeSinceLastSpoke;
|
||||
UINT8 ubContractRenewalQuoteCode;
|
||||
INT16 sPreTraversalGridNo;
|
||||
INT32 sPreTraversalGridNo;
|
||||
UINT32 uiXRayActivatedTime;
|
||||
INT8 bTurningFromUI;
|
||||
INT8 bPendingActionData5;
|
||||
@@ -2009,14 +2011,14 @@ public:
|
||||
INT32 iTuringSoundID;
|
||||
UINT8 ubLastDamageReason;
|
||||
BOOLEAN fComplainedThatTired;
|
||||
INT16 sLastTwoLocations[2];
|
||||
INT32 sLastTwoLocations[2];
|
||||
INT16 bFillerDude;
|
||||
INT32 uiTimeSinceLastBleedGrunt;
|
||||
UINT8 ubNextToPreviousAttackerID;
|
||||
UINT8 bDoAutofire;
|
||||
BOOLEAN autofireLastStep;
|
||||
INT8 numFlanks;
|
||||
INT16 lastFlankSpot;
|
||||
INT32 lastFlankSpot;
|
||||
BOOLEAN lastFlankLeft;
|
||||
INT8 sniper;
|
||||
INT16 origDir;
|
||||
@@ -2046,7 +2048,7 @@ public:
|
||||
std::vector<int> bNewItemCycleCount;
|
||||
|
||||
// Debugging data - not saved
|
||||
INT16 sPlotSrcGrid;
|
||||
INT32 sPlotSrcGrid;
|
||||
}; // OLDSOLDIERTYPE_101;
|
||||
|
||||
#endif
|
||||
|
||||
+200
-23
@@ -88,6 +88,85 @@ OLD_SOLDIERCREATE_STRUCT_101& OLD_SOLDIERCREATE_STRUCT_101::operator=(const OLD_
|
||||
return *this;
|
||||
}
|
||||
|
||||
//dnl ch33 130909
|
||||
OLD_SOLDIERCREATE_STRUCT_101& OLD_SOLDIERCREATE_STRUCT_101::operator=(SOLDIERCREATE_STRUCT& src)
|
||||
{
|
||||
if((void*)this != (void*)&src)
|
||||
{
|
||||
this->Inv = src.Inv;//had no meaning for 1.12 but let it be
|
||||
|
||||
this->DO_NOT_USE_Inv[OldInventory::HELMETPOS] = src.Inv[HELMETPOS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::VESTPOS] = src.Inv[VESTPOS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::LEGPOS] = src.Inv[LEGPOS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::HEAD1POS] = src.Inv[HEAD1POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::HEAD2POS] = src.Inv[HEAD2POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::HANDPOS] = src.Inv[HANDPOS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::SECONDHANDPOS] = src.Inv[SECONDHANDPOS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::BIGPOCK1POS] = src.Inv[BIGPOCK1POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::BIGPOCK2POS] = src.Inv[BIGPOCK2POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::BIGPOCK3POS] = src.Inv[BIGPOCK3POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::BIGPOCK4POS] = src.Inv[BIGPOCK4POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::SMALLPOCK1POS] = src.Inv[SMALLPOCK1POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::SMALLPOCK2POS] = src.Inv[SMALLPOCK2POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::SMALLPOCK3POS] = src.Inv[SMALLPOCK3POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::SMALLPOCK4POS] = src.Inv[SMALLPOCK4POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::SMALLPOCK5POS] = src.Inv[SMALLPOCK5POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::SMALLPOCK6POS] = src.Inv[SMALLPOCK6POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::SMALLPOCK7POS] = src.Inv[SMALLPOCK7POS];
|
||||
this->DO_NOT_USE_Inv[OldInventory::SMALLPOCK8POS] = src.Inv[SMALLPOCK8POS];
|
||||
|
||||
memcpy(&(this->name), &(src.name), sizeof(CHAR16)*10);
|
||||
memcpy(&(this->HeadPal), &(src.HeadPal), sizeof(PaletteRepID));
|
||||
memcpy(&(this->PantsPal), &(src.PantsPal), sizeof(PaletteRepID));
|
||||
memcpy(&(this->VestPal), &(src.VestPal), sizeof(PaletteRepID));
|
||||
memcpy(&(this->SkinPal), &(src.SkinPal), sizeof(PaletteRepID));
|
||||
memcpy(&(this->MiscPal), &(src.MiscPal), sizeof(PaletteRepID));
|
||||
TranslateArrayFields(this->sPatrolGrid, src.sPatrolGrid, OLD_MAXPATROLGRIDS, INT32_INT16);
|
||||
|
||||
this->bAgility = src.bAgility;
|
||||
this->bAIMorale = src.bAIMorale;
|
||||
this->bAttitude = src.bAttitude;
|
||||
this->bBodyType = src.bBodyType;
|
||||
this->bDexterity = src.bDexterity;
|
||||
this->ubDirection = src.ubDirection;
|
||||
this->bExpLevel = src.bExpLevel;
|
||||
this->bExplosive = src.bExplosive;
|
||||
this->bLeadership = src.bLeadership;
|
||||
this->bLife = src.bLife;
|
||||
this->bLifeMax = src.bLifeMax;
|
||||
this->bMarksmanship = src.bMarksmanship;
|
||||
this->bMechanical = src.bMechanical;
|
||||
this->bMedical = src.bMedical;
|
||||
this->bMorale = src.bMorale;
|
||||
this->bOrders = src.bOrders;
|
||||
this->bPatrolCnt = src.bPatrolCnt;
|
||||
this->bSectorZ = src.bSectorZ;
|
||||
this->bStrength = src.bStrength;
|
||||
this->bTeam = src.bTeam;
|
||||
this->bUseGivenVehicleID = src.bUseGivenVehicleID;
|
||||
this->bWisdom = src.bWisdom;
|
||||
this->fCopyProfileItemsOver = src.fCopyProfileItemsOver;
|
||||
this->fHasKeys = src.fHasKeys;
|
||||
this->fKillSlotIfOwnerDies = src.fKillSlotIfOwnerDies;
|
||||
this->fOnRoof = src.fOnRoof;
|
||||
this->fPlayerMerc = src.fPlayerMerc;
|
||||
this->fPlayerPlan = src.fPlayerPlan;
|
||||
this->fStatic = src.fStatic;
|
||||
this->fUseExistingSoldier = src.fUseExistingSoldier;
|
||||
this->fUseGivenVehicle = src.fUseGivenVehicle;
|
||||
this->fVisible = src.fVisible;
|
||||
this->pExistingSoldier = src.pExistingSoldier;
|
||||
this->sInsertionGridNo = src.sInsertionGridNo;
|
||||
this->sSectorX = src.sSectorX;
|
||||
this->sSectorY = src.sSectorY;
|
||||
this->ubCivilianGroup = src.ubCivilianGroup;
|
||||
this->ubProfile = src.ubProfile;
|
||||
this->ubScheduleID = src.ubScheduleID;
|
||||
this->ubSoldierClass = src.ubSoldierClass;
|
||||
}
|
||||
return(*this);
|
||||
}
|
||||
|
||||
// Destructor
|
||||
OLD_SOLDIERCREATE_STRUCT_101::~OLD_SOLDIERCREATE_STRUCT_101() {
|
||||
}
|
||||
@@ -116,8 +195,7 @@ SOLDIERCREATE_STRUCT& SOLDIERCREATE_STRUCT::operator=(const OLD_SOLDIERCREATE_ST
|
||||
memcpy( &(this->VestPal), &(src.VestPal), sizeof(PaletteRepID) ); // 30
|
||||
memcpy( &(this->SkinPal), &(src.SkinPal), sizeof(PaletteRepID) ); // 30
|
||||
memcpy( &(this->MiscPal), &(src.MiscPal), sizeof(PaletteRepID) ); // 30
|
||||
memcpy( &(this->sPatrolGrid), &(src.sPatrolGrid), sizeof(INT16) * MAXPATROLGRIDS );
|
||||
|
||||
TranslateArrayFields(this->sPatrolGrid, src.sPatrolGrid, OLD_MAXPATROLGRIDS, INT16_INT32);//dnl ch27 230909
|
||||
this->bAgility = src.bAgility;
|
||||
this->bAIMorale = src.bAIMorale;
|
||||
this->bAttitude = src.bAttitude;
|
||||
@@ -203,7 +281,7 @@ SOLDIERCREATE_STRUCT& SOLDIERCREATE_STRUCT::operator=(const SOLDIERTYPE& Soldier
|
||||
|
||||
//Copy patrol points
|
||||
this->bPatrolCnt = Soldier.aiData.bPatrolCnt;
|
||||
memcpy( this->sPatrolGrid, Soldier.aiData.sPatrolGrid, sizeof( INT16 ) * MAXPATROLGRIDS );
|
||||
memcpy( this->sPatrolGrid, Soldier.aiData.sPatrolGrid, sizeof( INT32 ) * MAXPATROLGRIDS );
|
||||
|
||||
//copy colors for soldier based on the body type.
|
||||
sprintf( this->HeadPal, Soldier.HeadPal );
|
||||
@@ -266,6 +344,63 @@ SOLDIERCREATE_STRUCT& SOLDIERCREATE_STRUCT::operator=(const SOLDIERCREATE_STRUCT
|
||||
return *this;
|
||||
}
|
||||
|
||||
//dnl ch42 290909
|
||||
SOLDIERCREATE_STRUCT& SOLDIERCREATE_STRUCT::operator=(const _OLD_SOLDIERCREATE_STRUCT& src)
|
||||
{
|
||||
if((void*)this != (void*)&src)
|
||||
{
|
||||
Inv = src.Inv;
|
||||
memcpy(name, src.name, sizeof(CHAR16)*10);
|
||||
memcpy(&HeadPal, &src.HeadPal, sizeof(PaletteRepID));
|
||||
memcpy(&PantsPal, &src.PantsPal, sizeof(PaletteRepID));
|
||||
memcpy(&VestPal, &src.VestPal, sizeof(PaletteRepID));
|
||||
memcpy(&SkinPal, &src.SkinPal, sizeof(PaletteRepID));
|
||||
memcpy(&MiscPal, &src.MiscPal, sizeof(PaletteRepID));
|
||||
TranslateArrayFields(sPatrolGrid, src.sPatrolGrid, OLD_MAXPATROLGRIDS, INT16_INT32);
|
||||
bAgility = src.bAgility;
|
||||
bAIMorale = src.bAIMorale;
|
||||
bAttitude = src.bAttitude;
|
||||
bBodyType = src.bBodyType;
|
||||
bDexterity = src.bDexterity;
|
||||
ubDirection = src.ubDirection;
|
||||
bExpLevel = src.bExpLevel;
|
||||
bExplosive = src.bExplosive;
|
||||
bLeadership = src.bLeadership;
|
||||
bLife = src.bLife;
|
||||
bLifeMax = src.bLifeMax;
|
||||
bMarksmanship = src.bMarksmanship;
|
||||
bMechanical = src.bMechanical;
|
||||
bMedical = src.bMedical;
|
||||
bMorale = src.bMorale;
|
||||
bOrders = src.bOrders;
|
||||
bPatrolCnt = src.bPatrolCnt;
|
||||
bSectorZ = src.bSectorZ;
|
||||
bStrength = src.bStrength;
|
||||
bTeam = src.bTeam;
|
||||
bUseGivenVehicleID = src.bUseGivenVehicleID;
|
||||
bWisdom = src.bWisdom;
|
||||
fCopyProfileItemsOver = src.fCopyProfileItemsOver;
|
||||
fHasKeys = src.fHasKeys;
|
||||
fKillSlotIfOwnerDies = src.fKillSlotIfOwnerDies;
|
||||
fOnRoof = src.fOnRoof;
|
||||
fPlayerMerc = src.fPlayerMerc;
|
||||
fPlayerPlan = src.fPlayerPlan;
|
||||
fStatic = src.fStatic;
|
||||
fUseExistingSoldier = src.fUseExistingSoldier;
|
||||
fUseGivenVehicle = src.fUseGivenVehicle;
|
||||
fVisible = src.fVisible;
|
||||
pExistingSoldier = src.pExistingSoldier;
|
||||
sInsertionGridNo = src.sInsertionGridNo;
|
||||
sSectorX = src.sSectorX;
|
||||
sSectorY = src.sSectorY;
|
||||
ubCivilianGroup = src.ubCivilianGroup;
|
||||
ubProfile = src.ubProfile;
|
||||
ubScheduleID = src.ubScheduleID;
|
||||
ubSoldierClass = src.ubSoldierClass;
|
||||
}
|
||||
return(*this);
|
||||
}
|
||||
|
||||
// Destructor
|
||||
SOLDIERCREATE_STRUCT::~SOLDIERCREATE_STRUCT() {
|
||||
}
|
||||
@@ -1053,7 +1188,7 @@ BOOLEAN TacticalCopySoldierFromProfile( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STR
|
||||
pSoldier->aiData.bAttitude = pCreateStruct->bAttitude;
|
||||
pSoldier->ubDirection = pCreateStruct->ubDirection;
|
||||
pSoldier->aiData.bPatrolCnt = pCreateStruct->bPatrolCnt;
|
||||
memcpy( pSoldier->aiData.sPatrolGrid, pCreateStruct->sPatrolGrid, sizeof( INT16 ) * MAXPATROLGRIDS );
|
||||
memcpy( pSoldier->aiData.sPatrolGrid, pCreateStruct->sPatrolGrid, sizeof( INT32 ) * MAXPATROLGRIDS );
|
||||
|
||||
if ( HAS_SKILL_TRAIT( pSoldier, CAMOUFLAGED ) )
|
||||
{
|
||||
@@ -1487,7 +1622,7 @@ BOOLEAN TacticalCopySoldierFromCreateStruct( SOLDIERTYPE *pSoldier, SOLDIERCREAT
|
||||
//Adding patrol points
|
||||
//CAUTION: CONVERTING SIGNED TO UNSIGNED though the values should never be negative.
|
||||
pSoldier->aiData.bPatrolCnt = pCreateStruct->bPatrolCnt;
|
||||
memcpy( pSoldier->aiData.sPatrolGrid, pCreateStruct->sPatrolGrid, sizeof( INT16 ) * MAXPATROLGRIDS );
|
||||
memcpy( pSoldier->aiData.sPatrolGrid, pCreateStruct->sPatrolGrid, sizeof( INT32 ) * MAXPATROLGRIDS );
|
||||
|
||||
//Kris: November 10, 1997
|
||||
//Expanded the default names based on team.
|
||||
@@ -1811,7 +1946,7 @@ void CreateDetailedPlacementGivenBasicPlacementInfo( SOLDIERCREATE_STRUCT *pp, B
|
||||
return;
|
||||
pp->fStatic = FALSE;
|
||||
pp->ubProfile = NO_PROFILE;
|
||||
pp->sInsertionGridNo = bp->sStartingGridNo;
|
||||
pp->sInsertionGridNo = bp->usStartingGridNo;
|
||||
pp->fPlayerMerc = FALSE;
|
||||
pp->fPlayerPlan = FALSE;
|
||||
pp->fCopyProfileItemsOver = FALSE;
|
||||
@@ -2065,7 +2200,7 @@ void CreateDetailedPlacementGivenBasicPlacementInfo( SOLDIERCREATE_STRUCT *pp, B
|
||||
|
||||
//Transfer over the patrol points.
|
||||
pp->bPatrolCnt = bp->bPatrolCnt;
|
||||
memcpy( pp->sPatrolGrid, bp->sPatrolGrid, sizeof( INT16 ) * MAXPATROLGRIDS );
|
||||
memcpy( pp->sPatrolGrid, bp->sPatrolGrid, sizeof( INT32 ) * MAXPATROLGRIDS );
|
||||
|
||||
//If it is a detailed placement, don't do this yet, as detailed placements may have their
|
||||
//own equipment.
|
||||
@@ -2094,7 +2229,7 @@ void CreateStaticDetailedPlacementGivenBasicPlacementInfo( SOLDIERCREATE_STRUCT
|
||||
spp->initialize();
|
||||
spp->fStatic = TRUE;
|
||||
spp->ubProfile = NO_PROFILE;
|
||||
spp->sInsertionGridNo = bp->sStartingGridNo;
|
||||
spp->sInsertionGridNo = bp->usStartingGridNo;
|
||||
spp->fPlayerMerc = FALSE;
|
||||
spp->fPlayerPlan = FALSE;
|
||||
spp->fCopyProfileItemsOver = FALSE;
|
||||
@@ -2141,7 +2276,7 @@ void CreateStaticDetailedPlacementGivenBasicPlacementInfo( SOLDIERCREATE_STRUCT
|
||||
|
||||
//Transfer over the patrol points.
|
||||
spp->bPatrolCnt = bp->bPatrolCnt;
|
||||
memcpy( spp->sPatrolGrid, bp->sPatrolGrid, sizeof( INT16 ) * MAXPATROLGRIDS );
|
||||
memcpy( spp->sPatrolGrid, bp->sPatrolGrid, sizeof( INT32 ) * MAXPATROLGRIDS );
|
||||
|
||||
//Starts with nothing
|
||||
for( i = 0; i < spp->Inv.size(); i++ )
|
||||
@@ -2176,7 +2311,7 @@ void CreateDetailedPlacementGivenStaticDetailedPlacementAndBasicPlacementInfo(
|
||||
pp->bTeam = bp->bTeam;
|
||||
|
||||
pp->ubDirection = bp->ubDirection;
|
||||
pp->sInsertionGridNo = bp->sStartingGridNo;
|
||||
pp->sInsertionGridNo = bp->usStartingGridNo;
|
||||
|
||||
//ATE: Copy over sector coordinates from profile to create struct
|
||||
pp->sSectorX = gMercProfiles[ pp->ubProfile ].sSectorX;
|
||||
@@ -2189,7 +2324,7 @@ void CreateDetailedPlacementGivenStaticDetailedPlacementAndBasicPlacementInfo(
|
||||
pp->bAttitude = bp->bAttitude;
|
||||
pp->ubDirection = bp->ubDirection;
|
||||
pp->bPatrolCnt = bp->bPatrolCnt;
|
||||
memcpy( pp->sPatrolGrid, bp->sPatrolGrid, sizeof( INT16 ) * MAXPATROLGRIDS );
|
||||
memcpy( pp->sPatrolGrid, bp->sPatrolGrid, sizeof( INT32 ) * MAXPATROLGRIDS );
|
||||
pp->fHasKeys = bp->fHasKeys;
|
||||
pp->ubCivilianGroup = bp->ubCivilianGroup;
|
||||
|
||||
@@ -2414,8 +2549,9 @@ void ForceSoldierProfileID( SOLDIERTYPE *pSoldier, UINT8 ubProfileID )
|
||||
|
||||
}
|
||||
|
||||
#define CENTRAL_GRIDNO 13202
|
||||
#define CENTRAL_RADIUS 30
|
||||
//dnl ch56 141009
|
||||
//#define CENTRAL_GRIDNO 13202
|
||||
//#define CENTRAL_RADIUS 30
|
||||
|
||||
SOLDIERTYPE* ReserveTacticalSoldierForAutoresolve( UINT8 ubSoldierClass )
|
||||
{
|
||||
@@ -2436,8 +2572,8 @@ SOLDIERTYPE* ReserveTacticalSoldierForAutoresolve( UINT8 ubSoldierClass )
|
||||
iEnd = gTacticalStatus.Team[ CREATURE_TEAM ].bLastID;
|
||||
}
|
||||
for( i = iStart; i <= iEnd; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife && MercPtrs[ i ]->sGridNo != NOWHERE )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife && !TileIsOutOfBounds(MercPtrs[ i ]->sGridNo))
|
||||
{
|
||||
if( MercPtrs[ i ]->ubSoldierClass == ubSoldierClass )
|
||||
{
|
||||
@@ -2485,7 +2621,7 @@ SOLDIERTYPE* TacticalCreateAdministrator()
|
||||
if ( pSoldier )
|
||||
{
|
||||
// send soldier to centre of map, roughly
|
||||
pSoldier->aiData.sNoiseGridno = (INT16) (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.sNoiseGridno = (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.ubNoiseVolume = MAX_MISC_NOISE_DURATION;
|
||||
}
|
||||
return( pSoldier );
|
||||
@@ -2518,7 +2654,7 @@ SOLDIERTYPE* TacticalCreateArmyTroop()
|
||||
if ( pSoldier )
|
||||
{
|
||||
// send soldier to centre of map, roughly
|
||||
pSoldier->aiData.sNoiseGridno = (INT16) (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.sNoiseGridno = (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.ubNoiseVolume = MAX_MISC_NOISE_DURATION;
|
||||
}
|
||||
|
||||
@@ -2560,7 +2696,7 @@ SOLDIERTYPE* TacticalCreateEliteEnemy()
|
||||
if ( pSoldier )
|
||||
{
|
||||
// send soldier to centre of map, roughly
|
||||
pSoldier->aiData.sNoiseGridno = (INT16)(CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.sNoiseGridno = (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.ubNoiseVolume = MAX_MISC_NOISE_DURATION;
|
||||
}
|
||||
|
||||
@@ -2578,8 +2714,8 @@ SOLDIERTYPE* ReserveTacticalMilitiaSoldierForAutoresolve( UINT8 ubSoldierClass )
|
||||
iEnd = gTacticalStatus.Team[ MILITIA_TEAM ].bLastID;
|
||||
|
||||
for( i = iStart; i <= iEnd; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife && MercPtrs[ i ]->sGridNo != NOWHERE )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife && !TileIsOutOfBounds(MercPtrs[ i ]->sGridNo))
|
||||
{
|
||||
if( MercPtrs[ i ]->ubSoldierClass == ubSoldierClass )
|
||||
{
|
||||
@@ -2763,11 +2899,11 @@ void QuickCreateProfileMerc( INT8 bTeam, UINT8 ubProfileID )
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
INT16 sWorldX, sWorldY, sSectorX, sSectorY, sGridX, sGridY;
|
||||
UINT8 ubID;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
|
||||
if ( GetMouseXY( &sGridX, &sGridY ) )
|
||||
{
|
||||
sMapPos = MAPROWCOLTOPOS( sGridY, sGridX );
|
||||
usMapPos = MAPROWCOLTOPOS( sGridY, sGridX );
|
||||
// Get Grid Coordinates of mouse
|
||||
if ( GetMouseWorldCoordsInCenter( &sWorldX, &sWorldY ) )
|
||||
{
|
||||
@@ -2780,7 +2916,7 @@ void QuickCreateProfileMerc( INT8 bTeam, UINT8 ubProfileID )
|
||||
MercCreateStruct.sSectorX = sSectorX;
|
||||
MercCreateStruct.sSectorY = sSectorY;
|
||||
MercCreateStruct.bSectorZ = gbWorldSectorZ;
|
||||
MercCreateStruct.sInsertionGridNo = sMapPos;
|
||||
MercCreateStruct.sInsertionGridNo = usMapPos;
|
||||
|
||||
RandomizeNewSoldierStats( &MercCreateStruct );
|
||||
|
||||
@@ -3162,3 +3298,44 @@ void ReduceHighExpLevels( INT8 *pbExpLevel )
|
||||
// else leave it alone
|
||||
|
||||
}
|
||||
|
||||
BOOLEAN TranslateArrayFields(void* out, const void* inp, int len, int cmd)//dnl ch27 240909
|
||||
{
|
||||
switch(cmd)
|
||||
{
|
||||
case UINT8_UINT8:
|
||||
memcpy(out, inp, len);
|
||||
//for(int i=0; i<len; i++)
|
||||
// ((UINT8*)out)[i] = ((UINT8*)inp)[i];
|
||||
break;
|
||||
case UINT16_UINT16:
|
||||
memcpy(out, inp, sizeof(UINT16)*len);
|
||||
//for(int i=0; i<len; i++)
|
||||
// ((UINT16*)out)[i] = ((UINT16*)inp)[i];
|
||||
break;
|
||||
case UINT32_UINT32:
|
||||
memcpy(out, inp, sizeof(UINT32)*len);
|
||||
//for(int i=0; i<len; i++)
|
||||
// ((UINT32*)out)[i] = ((UINT32*)inp)[i];
|
||||
break;
|
||||
case UINT8_UINT16:
|
||||
for(int i=0; i<len; i++)
|
||||
((UINT16*)out)[i] = ((UINT8*)inp)[i];
|
||||
break;
|
||||
case UINT16_UINT8:
|
||||
for(int i=0; i<len; i++)
|
||||
((UINT8*)out)[i] = (UINT8)((UINT16*)inp)[i];
|
||||
break;
|
||||
case INT16_INT32:
|
||||
for(int i=0; i<len; i++)
|
||||
((INT32*)out)[i] = ((INT16*)inp)[i];
|
||||
break;
|
||||
case INT32_INT16:
|
||||
for(int i=0; i<len; i++)
|
||||
((INT16*)out)[i] = ((INT32*)inp)[i];
|
||||
break;
|
||||
default:
|
||||
return(FALSE);
|
||||
}
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
+143
-8
@@ -14,7 +14,8 @@
|
||||
//forward declarations of common classes to eliminate includes
|
||||
class OBJECTTYPE;
|
||||
class SOLDIERTYPE;
|
||||
|
||||
class SOLDIERCREATE_STRUCT;//dnl ch33 130909
|
||||
class _OLD_SOLDIERCREATE_STRUCT;//dnl ch42 250909
|
||||
|
||||
#define SOLDIER_CREATE_AUTO_TEAM -1
|
||||
|
||||
@@ -39,6 +40,8 @@ class SOLDIERTYPE;
|
||||
//These are the placement slots used by the editor to define where characters are in a map, what
|
||||
//they are, what team they are on, personality traits, etc. The Merc section of the editor is
|
||||
//what is used to define these values.
|
||||
//dnl ch42 250909
|
||||
// WANNE - BMP: DONE!
|
||||
typedef struct
|
||||
{
|
||||
BOOLEAN fDetailedPlacement; //Specialized information. Has a counterpart containing all info.
|
||||
@@ -50,7 +53,7 @@ typedef struct
|
||||
INT8 bOrders;
|
||||
INT8 bAttitude;
|
||||
INT8 bBodyType; //up to 128 body types, -1 means random
|
||||
INT16 sPatrolGrid[ MAXPATROLGRIDS ]; //possible locations to visit, patrol, etc.
|
||||
INT16 sPatrolGrid[OLD_MAXPATROLGRIDS];//dnl ch27 230909 Possible locations to visit, patrol, etc.
|
||||
INT8 bPatrolCnt;
|
||||
BOOLEAN fOnRoof;
|
||||
UINT8 ubSoldierClass; //army, administrator, elite
|
||||
@@ -58,7 +61,32 @@ typedef struct
|
||||
BOOLEAN fPriorityExistance; //These slots are used first
|
||||
BOOLEAN fHasKeys;
|
||||
INT8 PADDINGSLOTS[ 14 ];
|
||||
} BASIC_SOLDIERCREATE_STRUCT; //50 bytes
|
||||
} _OLD_BASIC_SOLDIERCREATE_STRUCT; //50 bytes
|
||||
|
||||
class BASIC_SOLDIERCREATE_STRUCT
|
||||
{
|
||||
public:
|
||||
BOOLEAN fDetailedPlacement; // Specialized information, has a counterpart containing all info
|
||||
INT32 usStartingGridNo; // Where the placement position is
|
||||
INT8 bTeam; // The team this individual is part of
|
||||
INT8 bRelativeAttributeLevel;
|
||||
INT8 bRelativeEquipmentLevel;
|
||||
UINT8 ubDirection; // 1 of 8 values (always mandatory)
|
||||
INT8 bOrders;
|
||||
INT8 bAttitude;
|
||||
INT8 bBodyType; // Up to 128 body types, -1 means random
|
||||
INT32 sPatrolGrid[MAXPATROLGRIDS]; // Possible locations to visit, patrol, etc.
|
||||
INT8 bPatrolCnt;
|
||||
BOOLEAN fOnRoof;
|
||||
UINT8 ubSoldierClass; // Army, administrator, elite
|
||||
UINT8 ubCivilianGroup;
|
||||
BOOLEAN fPriorityExistance; // These slots are used first
|
||||
BOOLEAN fHasKeys;
|
||||
public:
|
||||
BASIC_SOLDIERCREATE_STRUCT& operator=(const _OLD_BASIC_SOLDIERCREATE_STRUCT& src);
|
||||
BOOLEAN Load(INT8** hBuffer, FLOAT dMajorMapVersion);
|
||||
BOOLEAN Save(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion);
|
||||
};
|
||||
|
||||
class OLD_SOLDIERCREATE_STRUCT_101
|
||||
{
|
||||
@@ -69,6 +97,7 @@ public:
|
||||
OLD_SOLDIERCREATE_STRUCT_101(const OLD_SOLDIERCREATE_STRUCT_101&);
|
||||
// Assignment operator
|
||||
OLD_SOLDIERCREATE_STRUCT_101& operator=(const OLD_SOLDIERCREATE_STRUCT_101&);
|
||||
OLD_SOLDIERCREATE_STRUCT_101& operator=(SOLDIERCREATE_STRUCT&);//dnl ch33 130909
|
||||
// Destructor
|
||||
~OLD_SOLDIERCREATE_STRUCT_101();
|
||||
|
||||
@@ -135,7 +164,7 @@ public:
|
||||
PaletteRepID MiscPal;
|
||||
|
||||
//Waypoint information for patrolling
|
||||
INT16 sPatrolGrid[ MAXPATROLGRIDS ];
|
||||
INT16 sPatrolGrid[OLD_MAXPATROLGRIDS];//dnl ch33 200909
|
||||
INT8 bPatrolCnt;
|
||||
|
||||
//Kris: Additions November 16, 1997 (padding down to 129 from 150)
|
||||
@@ -171,7 +200,7 @@ public:
|
||||
Inventory Inv;
|
||||
}; // OLD_SOLDIERCREATE_STRUCT_101;
|
||||
|
||||
|
||||
// WANNE - BMP: DONE!
|
||||
class SOLDIERCREATE_STRUCT
|
||||
{
|
||||
public:
|
||||
@@ -190,6 +219,8 @@ public:
|
||||
|
||||
UINT16 GetChecksum();
|
||||
|
||||
SOLDIERCREATE_STRUCT& SOLDIERCREATE_STRUCT::operator=(const _OLD_SOLDIERCREATE_STRUCT& src);//dnl ch42 250909
|
||||
|
||||
// Initialize the soldier.
|
||||
// Use this instead of the old method of calling memset!
|
||||
// Note that the constructor does this automatically.
|
||||
@@ -197,8 +228,94 @@ public:
|
||||
|
||||
BOOLEAN Load(HWFILE hFile, int versionToLoad, bool loadChecksum);
|
||||
BOOLEAN Load(INT8 **hBuffer, float dMajorMapVersion, UINT8 ubMinorMapVersion);
|
||||
BOOLEAN Save(HWFILE hFile, bool fSavingMap);
|
||||
BOOLEAN Save(HWFILE hFile, bool fSavingMap, FLOAT dMajorMapVersion=MAJOR_MAP_VERSION, UINT8 ubMinorMapVersion=MINOR_MAP_VERSION);//dnl ch42 250909
|
||||
|
||||
public:
|
||||
//Bulletproofing so static detailed placements aren't used to tactically create soldiers.
|
||||
//Used by editor for validation purposes.
|
||||
BOOLEAN fStatic;
|
||||
|
||||
//Profile information used for special NPCs and player mercs.
|
||||
UINT8 ubProfile;
|
||||
BOOLEAN fPlayerMerc;
|
||||
BOOLEAN fPlayerPlan;
|
||||
BOOLEAN fCopyProfileItemsOver;
|
||||
|
||||
//Location information
|
||||
INT16 sSectorX;
|
||||
INT16 sSectorY;
|
||||
UINT8 ubDirection;
|
||||
INT32 sInsertionGridNo;//dnl ch42 290909
|
||||
|
||||
// Can force a team, but needs flag set
|
||||
INT8 bTeam;
|
||||
INT8 bBodyType;
|
||||
|
||||
//Orders and attitude settings
|
||||
INT8 bAttitude;
|
||||
INT8 bOrders;
|
||||
|
||||
//Attributes
|
||||
INT8 bLifeMax;
|
||||
INT8 bLife;
|
||||
INT8 bAgility;
|
||||
INT8 bDexterity;
|
||||
INT8 bExpLevel;
|
||||
INT8 bMarksmanship;
|
||||
INT8 bMedical;
|
||||
INT8 bMechanical;
|
||||
INT8 bExplosive;
|
||||
INT8 bLeadership;
|
||||
INT8 bStrength;
|
||||
INT8 bWisdom;
|
||||
INT8 bMorale;
|
||||
INT8 bAIMorale;
|
||||
|
||||
public:
|
||||
|
||||
//Palette information for soldiers.
|
||||
PaletteRepID HeadPal;
|
||||
PaletteRepID PantsPal;
|
||||
PaletteRepID VestPal;
|
||||
PaletteRepID SkinPal;
|
||||
PaletteRepID MiscPal;
|
||||
|
||||
//Waypoint information for patrolling
|
||||
INT32 sPatrolGrid[MAXPATROLGRIDS];//dnl ch42 290909
|
||||
INT8 bPatrolCnt;
|
||||
|
||||
//Kris: Additions November 16, 1997 (padding down to 129 from 150)
|
||||
BOOLEAN fVisible;
|
||||
CHAR16 name[ 10 ];
|
||||
|
||||
UINT8 ubSoldierClass; //army, administrator, elite
|
||||
|
||||
BOOLEAN fOnRoof;
|
||||
|
||||
INT8 bSectorZ;
|
||||
|
||||
SOLDIERTYPE *pExistingSoldier;
|
||||
BOOLEAN fUseExistingSoldier;
|
||||
UINT8 ubCivilianGroup;
|
||||
|
||||
BOOLEAN fKillSlotIfOwnerDies;
|
||||
UINT8 ubScheduleID;
|
||||
|
||||
BOOLEAN fUseGivenVehicle;
|
||||
INT8 bUseGivenVehicleID;
|
||||
BOOLEAN fHasKeys;
|
||||
|
||||
//
|
||||
// New and OO stuff goes after here. Above this point any changes will goof up reading from files.
|
||||
//
|
||||
char endOfPOD; // marker for end of POD (plain old data)
|
||||
|
||||
Inventory Inv;
|
||||
}; // SOLDIERCREATE_STRUCT;
|
||||
|
||||
// WANNE - BMP: DONE!
|
||||
class _OLD_SOLDIERCREATE_STRUCT
|
||||
{
|
||||
public:
|
||||
//Bulletproofing so static detailed placements aren't used to tactically create soldiers.
|
||||
//Used by editor for validation purposes.
|
||||
@@ -250,7 +367,7 @@ public:
|
||||
PaletteRepID MiscPal;
|
||||
|
||||
//Waypoint information for patrolling
|
||||
INT16 sPatrolGrid[ MAXPATROLGRIDS ];
|
||||
INT16 sPatrolGrid[OLD_MAXPATROLGRIDS];//dnl ch27 230909
|
||||
INT8 bPatrolCnt;
|
||||
|
||||
//Kris: Additions November 16, 1997 (padding down to 129 from 150)
|
||||
@@ -280,10 +397,11 @@ public:
|
||||
char endOfPOD; // marker for end of POD (plain old data)
|
||||
|
||||
Inventory Inv;
|
||||
}; // SOLDIERCREATE_STRUCT;
|
||||
}; // _OLD_SOLDIERCREATE_STRUCT;
|
||||
|
||||
#define SIZEOF_OLD_SOLDIERCREATE_STRUCT_101_POD offsetof( OLD_SOLDIERCREATE_STRUCT_101, endOfPOD )
|
||||
#define SIZEOF_SOLDIERCREATE_STRUCT_POD offsetof( SOLDIERCREATE_STRUCT, endOfPOD )
|
||||
#define _OLD_SIZEOF_SOLDIERCREATE_STRUCT_POD offsetof( _OLD_SOLDIERCREATE_STRUCT, endOfPOD )
|
||||
|
||||
|
||||
//Original functions currently used throughout the game.
|
||||
@@ -382,4 +500,21 @@ BOOLEAN InternalTacticalRemoveSoldier( UINT16 usSoldierIndex, BOOLEAN fRemoveVeh
|
||||
void OkayToUpgradeEliteToSpecialProfiledEnemy( SOLDIERCREATE_STRUCT *pp );
|
||||
extern BOOLEAN gfProfiledEnemyAdded; //needs to be saved (used by the above function)
|
||||
|
||||
//dnl ch27 240909
|
||||
typedef enum
|
||||
{
|
||||
UINT8_UINT8,
|
||||
UINT16_UINT16,
|
||||
UINT32_UINT32,
|
||||
UINT8_UINT16,
|
||||
UINT16_UINT8,
|
||||
INT16_INT32,
|
||||
INT32_INT16,
|
||||
}TranslateArrayFieldsCommands;
|
||||
BOOLEAN TranslateArrayFields(void* out, const void* inp, int len, int cmd);
|
||||
|
||||
//dnl ch56 141009
|
||||
#define CENTRAL_GRIDNO (MAPROWCOLTOPOS(WORLD_ROWS/2,WORLD_COLS/2))
|
||||
#define CENTRAL_RADIUS (min(WORLD_ROWS,WORLD_COLS)/5)
|
||||
|
||||
#endif
|
||||
+19
-19
@@ -56,7 +56,7 @@
|
||||
#endif
|
||||
|
||||
|
||||
BOOLEAN IsGridNoInScreenRect( INT16 sGridNo, SGPRect *pRect );
|
||||
BOOLEAN IsGridNoInScreenRect( INT32 sGridNo, SGPRect *pRect );
|
||||
BOOLEAN IsPointInScreenRect( INT16 sXPos, INT16 sYPos, SGPRect *pRect );
|
||||
void GetSoldierScreenRect( SOLDIERTYPE *pSoldier, SGPRect *pRect );
|
||||
|
||||
@@ -83,7 +83,7 @@ typedef struct
|
||||
UINT8 ubIDs[ MAX_STACKED_MERCS ];
|
||||
INT8 bCur;
|
||||
BOOLEAN fUseGridNo;
|
||||
INT16 sUseGridNoGridNo;
|
||||
INT32 sUseGridNoGridNo;
|
||||
|
||||
} SOLDIER_STACK_TYPE;
|
||||
|
||||
@@ -96,13 +96,13 @@ extern UINT32 guiUITargetSoldierId;
|
||||
|
||||
BOOLEAN FindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFlags )
|
||||
{
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
|
||||
*pMercFlags = 0;
|
||||
|
||||
if ( GetMouseMapPos( &sMapPos ) )
|
||||
if ( GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
if ( FindSoldier( sMapPos, pusSoldierIndex, pMercFlags ,FINDSOLDIERSAMELEVEL( gsInterfaceLevel ) ) )
|
||||
if ( FindSoldier( usMapPos, pusSoldierIndex, pMercFlags ,FINDSOLDIERSAMELEVEL( gsInterfaceLevel ) ) )
|
||||
{
|
||||
return( TRUE );
|
||||
}
|
||||
@@ -113,13 +113,13 @@ BOOLEAN FindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFlags )
|
||||
|
||||
BOOLEAN SelectiveFindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFlags )
|
||||
{
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
|
||||
*pMercFlags = 0;
|
||||
|
||||
if ( GetMouseMapPos( &sMapPos ) )
|
||||
if ( GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
if ( FindSoldier( sMapPos, pusSoldierIndex, pMercFlags , FINDSOLDIERSAMELEVEL( gsInterfaceLevel ) ) )
|
||||
if ( FindSoldier( usMapPos, pusSoldierIndex, pMercFlags , FINDSOLDIERSAMELEVEL( gsInterfaceLevel ) ) )
|
||||
{
|
||||
return( TRUE );
|
||||
}
|
||||
@@ -202,7 +202,7 @@ extern BOOLEAN CheckVideoObjectScreenCoordinateInData( HVOBJECT hSrcVObject, UIN
|
||||
|
||||
|
||||
// THIS FUNCTION IS CALLED FAIRLY REGULARLY
|
||||
BOOLEAN FindSoldier( INT16 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags, UINT32 uiFlags )
|
||||
BOOLEAN FindSoldier( INT32 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags, UINT32 uiFlags )
|
||||
{
|
||||
UINT32 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
@@ -469,7 +469,7 @@ BOOLEAN FindSoldier( INT16 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags,
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN CycleSoldierFindStack( INT16 sMapPos )
|
||||
BOOLEAN CycleSoldierFindStack( INT32 usMapPos )
|
||||
{
|
||||
UINT16 usSoldierIndex;
|
||||
UINT32 uiMercFlags;
|
||||
@@ -477,7 +477,7 @@ BOOLEAN CycleSoldierFindStack( INT16 sMapPos )
|
||||
// Have we initalized for this yet?
|
||||
if ( !gfHandleStack )
|
||||
{
|
||||
if ( FindSoldier( sMapPos, &usSoldierIndex, &uiMercFlags , FINDSOLDIERSAMELEVEL( gsInterfaceLevel ) | FIND_SOLDIER_BEGINSTACK ) )
|
||||
if ( FindSoldier( usMapPos, &usSoldierIndex, &uiMercFlags , FINDSOLDIERSAMELEVEL( gsInterfaceLevel ) | FIND_SOLDIER_BEGINSTACK ) )
|
||||
{
|
||||
gfHandleStack = TRUE;
|
||||
}
|
||||
@@ -500,7 +500,7 @@ BOOLEAN CycleSoldierFindStack( INT16 sMapPos )
|
||||
{
|
||||
gSoldierStack.fUseGridNo = TRUE;
|
||||
gUIActionModeChangeDueToMouseOver = FALSE;
|
||||
gSoldierStack.sUseGridNoGridNo = sMapPos;
|
||||
gSoldierStack.sUseGridNoGridNo = usMapPos;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -530,7 +530,7 @@ BOOLEAN CycleSoldierFindStack( INT16 sMapPos )
|
||||
}
|
||||
|
||||
|
||||
SOLDIERTYPE * SimpleFindSoldier( INT16 sGridNo, INT8 bLevel )
|
||||
SOLDIERTYPE * SimpleFindSoldier( INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
UINT8 ubID;
|
||||
|
||||
@@ -575,10 +575,10 @@ BOOLEAN IsValidTargetMerc( UINT8 ubSoldierID )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN IsGridNoInScreenRect( INT16 sGridNo, SGPRect *pRect )
|
||||
BOOLEAN IsGridNoInScreenRect( INT32 sGridNo, SGPRect *pRect )
|
||||
{
|
||||
INT32 iXTrav, iYTrav;
|
||||
INT16 sMapPos;
|
||||
INT32 sMapPos;
|
||||
|
||||
// Start with top left corner
|
||||
iXTrav = pRect->iLeft;
|
||||
@@ -769,7 +769,7 @@ void GetSoldierTRUEScreenPos( SOLDIERTYPE *pSoldier, INT16 *psScreenX, INT16 *ps
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN GridNoOnScreen( INT16 sGridNo )
|
||||
BOOLEAN GridNoOnScreen( INT32 sGridNo )
|
||||
{
|
||||
INT16 sNewCenterWorldX, sNewCenterWorldY;
|
||||
INT16 sWorldX;
|
||||
@@ -814,7 +814,7 @@ BOOLEAN SoldierOnVisibleWorldTile( SOLDIERTYPE *pSoldier )
|
||||
|
||||
|
||||
|
||||
BOOLEAN SoldierLocationRelativeToScreen( INT16 sGridNo, UINT16 usReasonID, INT8 *pbDirection, UINT32 *puiScrollFlags )
|
||||
BOOLEAN SoldierLocationRelativeToScreen( INT32 sGridNo, UINT16 usReasonID, INT8 *pbDirection, UINT32 *puiScrollFlags )
|
||||
{
|
||||
INT16 sWorldX;
|
||||
INT16 sWorldY;
|
||||
@@ -966,7 +966,7 @@ BOOLEAN FindRelativeSoldierPosition( SOLDIERTYPE *pSoldier, UINT16 *usFlags, INT
|
||||
}
|
||||
|
||||
// VERY quickly finds a soldier at gridno , ( that is visible )
|
||||
UINT8 QuickFindSoldier( INT16 sGridNo )
|
||||
UINT8 QuickFindSoldier( INT32 sGridNo )
|
||||
{
|
||||
UINT32 cnt;
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
@@ -990,7 +990,7 @@ UINT8 QuickFindSoldier( INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
void GetGridNoScreenPos( INT16 sGridNo, UINT8 ubLevel, INT16 *psScreenX, INT16 *psScreenY )
|
||||
void GetGridNoScreenPos( INT32 sGridNo, UINT8 ubLevel, INT16 *psScreenX, INT16 *psScreenY )
|
||||
{
|
||||
INT16 sScreenX, sScreenY;
|
||||
FLOAT dOffsetX, dOffsetY;
|
||||
|
||||
@@ -32,15 +32,15 @@ class SOLDIERTYPE;
|
||||
|
||||
BOOLEAN FindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFlags );
|
||||
BOOLEAN SelectiveFindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFlags );
|
||||
BOOLEAN FindSoldier( INT16 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags , UINT32 uiFlags );
|
||||
SOLDIERTYPE * SimpleFindSoldier( INT16 sGridNo, INT8 bLevel );
|
||||
BOOLEAN FindSoldier( INT32 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags , UINT32 uiFlags );
|
||||
SOLDIERTYPE * SimpleFindSoldier( INT32 sGridNo, INT8 bLevel );
|
||||
|
||||
BOOLEAN CycleSoldierFindStack( INT16 sMapPos );
|
||||
BOOLEAN CycleSoldierFindStack( INT32 usMapPos );
|
||||
|
||||
BOOLEAN GridNoOnScreen( INT16 sGridNo );
|
||||
BOOLEAN GridNoOnScreen( INT32 sGridNo );
|
||||
|
||||
BOOLEAN SoldierOnScreen( UINT16 usID );
|
||||
BOOLEAN SoldierLocationRelativeToScreen( INT16 sGridNo, UINT16 usReasonID, INT8 *pbDirection, UINT32 *puiScrollFlags );
|
||||
BOOLEAN SoldierLocationRelativeToScreen( INT32 sGridNo, UINT16 usReasonID, INT8 *pbDirection, UINT32 *puiScrollFlags );
|
||||
void GetSoldierScreenPos( SOLDIERTYPE *pSoldier, INT16 *psScreenX, INT16 *psScreenY );
|
||||
void GetSoldierAnimDims( SOLDIERTYPE *pSoldier, INT16 *psHeight, INT16 *psWidth );
|
||||
void GetSoldierAnimOffsets( SOLDIERTYPE *pSoldier, INT16 *sOffsetX, INT16 *sOffsetY );
|
||||
@@ -48,8 +48,8 @@ void GetSoldierTRUEScreenPos( SOLDIERTYPE *pSoldier, INT16 *psScreenX, INT16 *ps
|
||||
BOOLEAN IsPointInSoldierBoundingBox( SOLDIERTYPE *pSoldier, INT16 sX, INT16 sY );
|
||||
BOOLEAN FindRelativeSoldierPosition( SOLDIERTYPE *pSoldier, UINT16 *usFlags, INT16 sX, INT16 sY );
|
||||
|
||||
UINT8 QuickFindSoldier( INT16 sGridNo );
|
||||
void GetGridNoScreenPos( INT16 sGridNo, UINT8 ubLevel, INT16 *psScreenX, INT16 *psScreenY );
|
||||
UINT8 QuickFindSoldier( INT32 sGridNo );
|
||||
void GetGridNoScreenPos( INT32 sGridNo, UINT8 ubLevel, INT16 *psScreenX, INT16 *psScreenY );
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -15,13 +15,14 @@ void SoldierCollapse( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN ReevaluateEnemyStance( SOLDIERTYPE *pSoldier, UINT16 usAnimState );
|
||||
|
||||
void HandlePlacingRoofMarker( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fSet, BOOLEAN fForce );
|
||||
void HandlePlacingRoofMarker( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fSet, BOOLEAN fForce );
|
||||
|
||||
void PickPickupAnimation( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT16 sGridNo, INT8 bZLevel );
|
||||
void PickPickupAnimation( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel );
|
||||
|
||||
void MercStealFromMerc( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pTarget );
|
||||
|
||||
void HandleCrowShadowVisibility( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN DoesSoldierWearGasMask(SOLDIERTYPE *pSoldier);//dnl ch40 200909
|
||||
|
||||
#endif
|
||||
+149
-107
@@ -101,7 +101,7 @@ void KillSoldierInitList()
|
||||
gAlternateSoldierInitListHead = NULL;
|
||||
}
|
||||
|
||||
SOLDIERINITNODE* AddBasicPlacementToSoldierInitList( BASIC_SOLDIERCREATE_STRUCT *pBasicPlacement )
|
||||
SOLDIERINITNODE* AddBasicPlacementToSoldierInitList ( BASIC_SOLDIERCREATE_STRUCT *pBasicPlacement )
|
||||
{
|
||||
SOLDIERINITNODE *curr;
|
||||
//Allocate memory for node
|
||||
@@ -207,132 +207,174 @@ void RemoveSoldierNodeFromInitList( SOLDIERINITNODE *pNode )
|
||||
//These serialization functions are assuming the passing of a valid file
|
||||
//pointer to the beginning of the save/load area, which is not necessarily at
|
||||
//the beginning of the file. This is just a part of the whole map serialization.
|
||||
BOOLEAN SaveSoldiersToMap( HWFILE fp )
|
||||
//dnl ch42 250909
|
||||
BASIC_SOLDIERCREATE_STRUCT& BASIC_SOLDIERCREATE_STRUCT::operator=(const _OLD_BASIC_SOLDIERCREATE_STRUCT& src)
|
||||
{
|
||||
UINT32 i;
|
||||
UINT32 uiBytesWritten;
|
||||
SOLDIERINITNODE *curr;
|
||||
|
||||
if( !fp )
|
||||
return FALSE;
|
||||
|
||||
if( gMapInformation.ubNumIndividuals > MAX_INDIVIDUALS )
|
||||
return FALSE;
|
||||
|
||||
//If we are perhaps in the alternate version of the editor, we don't want bad things to
|
||||
//happen. This is probably the only place I know where the user gets punished now. If the
|
||||
//person was in the alternate editor mode, then decided to save the game, the current mercs may
|
||||
//not be there. This would be bad. What we do is override any merc editing done while in this
|
||||
//mode, and kill them all, while replacing them with the proper ones. Not only that, the alternate
|
||||
//editing mode is turned off, and if intentions are to play the game, the user will be facing many
|
||||
//enemies!
|
||||
#ifdef JA2EDITOR
|
||||
if( !gfOriginalList )
|
||||
ResetAllMercPositions();
|
||||
#endif
|
||||
|
||||
curr = gSoldierInitHead;
|
||||
for( i=0; i < gMapInformation.ubNumIndividuals; i++ )
|
||||
if((void*)this != (void*)&src)
|
||||
{
|
||||
if( !curr )
|
||||
return FALSE;
|
||||
curr->ubNodeID = (UINT8)i;
|
||||
FileWrite( fp, curr->pBasicPlacement, sizeof( BASIC_SOLDIERCREATE_STRUCT ), &uiBytesWritten );
|
||||
|
||||
if( curr->pBasicPlacement->fDetailedPlacement )
|
||||
{
|
||||
if( !curr->pDetailedPlacement )
|
||||
return FALSE;
|
||||
if ( !curr->pDetailedPlacement->Save(fp, TRUE) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
curr = curr->next;
|
||||
fDetailedPlacement = src.fDetailedPlacement;
|
||||
usStartingGridNo = src.sStartingGridNo;
|
||||
bTeam = src.bTeam;
|
||||
bRelativeAttributeLevel = src.bRelativeAttributeLevel;
|
||||
bRelativeEquipmentLevel = src.bRelativeEquipmentLevel;
|
||||
ubDirection = src.ubDirection;
|
||||
bOrders = src.bOrders;
|
||||
bAttitude = src.bAttitude;
|
||||
bBodyType = src.bBodyType;
|
||||
bPatrolCnt = src.bPatrolCnt;
|
||||
fOnRoof = src.fOnRoof;
|
||||
ubSoldierClass = src.ubSoldierClass;
|
||||
ubCivilianGroup = src.ubCivilianGroup;
|
||||
fPriorityExistance = src.fPriorityExistance;
|
||||
fHasKeys = src.fHasKeys;
|
||||
TranslateArrayFields(sPatrolGrid, src.sPatrolGrid, OLD_MAXPATROLGRIDS, INT16_INT32);
|
||||
}
|
||||
return TRUE;
|
||||
return(*this);
|
||||
}
|
||||
|
||||
BOOLEAN BASIC_SOLDIERCREATE_STRUCT::Load(INT8** hBuffer, FLOAT dMajorMapVersion)
|
||||
{
|
||||
if(dMajorMapVersion < 7.0)
|
||||
{
|
||||
_OLD_BASIC_SOLDIERCREATE_STRUCT OldBasicSoldierCreateStruct;
|
||||
LOADDATA(&OldBasicSoldierCreateStruct, *hBuffer, sizeof(_OLD_BASIC_SOLDIERCREATE_STRUCT));
|
||||
*this = OldBasicSoldierCreateStruct;
|
||||
}
|
||||
else
|
||||
LOADDATA(this, *hBuffer, sizeof(BASIC_SOLDIERCREATE_STRUCT));
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
BOOLEAN BASIC_SOLDIERCREATE_STRUCT::Save(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion)
|
||||
{
|
||||
PTR pData = this;
|
||||
UINT32 uiBytesToWrite = sizeof(BASIC_SOLDIERCREATE_STRUCT);
|
||||
_OLD_BASIC_SOLDIERCREATE_STRUCT OldBasicSoldierCreateStruct;
|
||||
if(dMajorMapVersion == VANILLA_MAJOR_MAP_VERSION && ubMinorMapVersion == VANILLA_MINOR_MAP_VERSION)
|
||||
{
|
||||
memset(&OldBasicSoldierCreateStruct, 0, sizeof(_OLD_BASIC_SOLDIERCREATE_STRUCT));
|
||||
OldBasicSoldierCreateStruct.fDetailedPlacement = fDetailedPlacement;
|
||||
OldBasicSoldierCreateStruct.sStartingGridNo = usStartingGridNo;
|
||||
OldBasicSoldierCreateStruct.bTeam = bTeam;
|
||||
OldBasicSoldierCreateStruct.bRelativeAttributeLevel = bRelativeAttributeLevel;
|
||||
OldBasicSoldierCreateStruct.bRelativeEquipmentLevel = bRelativeEquipmentLevel;
|
||||
OldBasicSoldierCreateStruct.ubDirection = ubDirection;
|
||||
OldBasicSoldierCreateStruct.bOrders = bOrders;
|
||||
OldBasicSoldierCreateStruct.bAttitude = bAttitude;
|
||||
OldBasicSoldierCreateStruct.bBodyType = bBodyType;
|
||||
OldBasicSoldierCreateStruct.bPatrolCnt = bPatrolCnt;
|
||||
OldBasicSoldierCreateStruct.fOnRoof = fOnRoof;
|
||||
OldBasicSoldierCreateStruct.ubSoldierClass = ubSoldierClass;
|
||||
OldBasicSoldierCreateStruct.ubCivilianGroup = ubCivilianGroup;
|
||||
OldBasicSoldierCreateStruct.fPriorityExistance = fPriorityExistance;
|
||||
OldBasicSoldierCreateStruct.fHasKeys = fHasKeys;
|
||||
TranslateArrayFields(OldBasicSoldierCreateStruct.sPatrolGrid, sPatrolGrid, OLD_MAXPATROLGRIDS, INT32_INT16);
|
||||
pData = &OldBasicSoldierCreateStruct;
|
||||
uiBytesToWrite = sizeof(_OLD_BASIC_SOLDIERCREATE_STRUCT);
|
||||
}
|
||||
UINT32 uiBytesWritten = 0;
|
||||
FileWrite(hFile, pData, uiBytesToWrite, &uiBytesWritten);
|
||||
if(uiBytesToWrite == uiBytesWritten)
|
||||
return(TRUE);
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
BOOLEAN LoadSoldiersFromMap( INT8 **hBuffer, float dMajorMapVersion, UINT8 ubMinorMapVersion )
|
||||
BOOLEAN LoadSoldiersFromMap(INT8** hBuffer, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion)
|
||||
{
|
||||
UINT32 i;
|
||||
UINT8 ubNumIndividuals;
|
||||
BASIC_SOLDIERCREATE_STRUCT tempBasicPlacement;
|
||||
SOLDIERCREATE_STRUCT tempDetailedPlacement;
|
||||
SOLDIERINITNODE *pNode;
|
||||
UINT16 ubNumIndividuals = gMapInformation.ubNumIndividuals;
|
||||
BOOLEAN fCowInSector = FALSE;
|
||||
|
||||
ubNumIndividuals = gMapInformation.ubNumIndividuals;
|
||||
|
||||
UseEditorAlternateList();
|
||||
KillSoldierInitList();
|
||||
UseEditorOriginalList();
|
||||
KillSoldierInitList();
|
||||
|
||||
InitSoldierInitList();
|
||||
|
||||
if( ubNumIndividuals > MAX_INDIVIDUALS )
|
||||
if(ubNumIndividuals > MAX_INDIVIDUALS)
|
||||
{
|
||||
AssertMsg( 0, "Corrupt map check failed. ubNumIndividuals is greater than MAX_INDIVIDUALS." );
|
||||
return FALSE; //too many mercs
|
||||
AssertMsg(0, "Corrupt map check failed. ubNumIndividuals is greater than MAX_INDIVIDUALS.");
|
||||
return(FALSE);// Too many mercs
|
||||
}
|
||||
if( !ubNumIndividuals )
|
||||
if(!ubNumIndividuals)
|
||||
return(TRUE);// No mercs
|
||||
// Because we are loading the map, we needed to know how many guys are being loaded, but when we add them to the list here, it automatically increments that number, effectively doubling it, which would be a problem. Now that we know the number, we clear it here, so it gets built again.
|
||||
gMapInformation.ubNumIndividuals = 0;// MUST BE CLEARED HERE!!!
|
||||
for(UINT16 cnt=0; cnt<ubNumIndividuals; cnt++)
|
||||
{
|
||||
return TRUE; //no mercs
|
||||
}
|
||||
|
||||
//Because we are loading the map, we needed to know how many
|
||||
//guys are being loaded, but when we add them to the list here, it
|
||||
//automatically increments that number, effectively doubling it, which
|
||||
//would be a problem. Now that we know the number, we clear it here, so
|
||||
//it gets built again.
|
||||
gMapInformation.ubNumIndividuals = 0; //MUST BE CLEARED HERE!!!
|
||||
|
||||
SOLDIERCREATE_STRUCT tempDetailedPlacement;
|
||||
for( i=0; i < ubNumIndividuals; i++ )
|
||||
{
|
||||
LOADDATA( &tempBasicPlacement, *hBuffer, sizeof( BASIC_SOLDIERCREATE_STRUCT ) );
|
||||
pNode = AddBasicPlacementToSoldierInitList( &tempBasicPlacement );
|
||||
if( !pNode )
|
||||
tempBasicPlacement.Load(hBuffer, dMajorMapVersion);
|
||||
for(int i=0; i<MAXPATROLGRIDS; i++)//dnl ch44 290909 BASIC_SOLDIERCREATE_STRUCT translation
|
||||
gMapTrn.GetTrnCnt(tempBasicPlacement.sPatrolGrid[i]);
|
||||
gMapTrn.GetTrnCnt(tempBasicPlacement.usStartingGridNo);
|
||||
pNode = AddBasicPlacementToSoldierInitList(&tempBasicPlacement);
|
||||
if(!pNode)
|
||||
{
|
||||
AssertMsg( 0, "Failed to allocate memory for new basic placement in LoadSoldiersFromMap." );
|
||||
return FALSE;
|
||||
AssertMsg(0, "Failed to allocate memory for new basic placement in LoadSoldiersFromMap.");
|
||||
return(FALSE);
|
||||
}
|
||||
pNode->ubNodeID = (UINT8)i;
|
||||
if( tempBasicPlacement.fDetailedPlacement )
|
||||
{ //Add the static detailed placement information in the same newly created node as the basic placement.
|
||||
//read static detailed placement from file
|
||||
if ( !tempDetailedPlacement.Load(hBuffer, dMajorMapVersion, ubMinorMapVersion) )
|
||||
Assert(cnt < 256);
|
||||
pNode->ubNodeID = (UINT8)cnt;
|
||||
if(tempBasicPlacement.fDetailedPlacement)
|
||||
{
|
||||
// Add the static detailed placement information in the same newly created node as the basic placement. Read static detailed placement from file.
|
||||
if(!tempDetailedPlacement.Load(hBuffer, dMajorMapVersion, ubMinorMapVersion))
|
||||
return(FALSE);
|
||||
for(int i=0; i<MAXPATROLGRIDS; i++)//dnl ch44 290909 SOLDIERCREATE_STRUCT translation
|
||||
gMapTrn.GetTrnCnt(tempDetailedPlacement.sPatrolGrid[i]);
|
||||
gMapTrn.GetTrnCnt(tempDetailedPlacement.sInsertionGridNo);
|
||||
// Allocate memory for new static detailed placement
|
||||
pNode->pDetailedPlacement = new SOLDIERCREATE_STRUCT(tempDetailedPlacement);
|
||||
if(!pNode->pDetailedPlacement)
|
||||
{
|
||||
return FALSE;
|
||||
AssertMsg(0, "Failed to allocate memory for new detailed placement in LoadSoldiersFromMap.");
|
||||
return(FALSE);
|
||||
}
|
||||
//allocate memory for new static detailed placement
|
||||
pNode->pDetailedPlacement = new SOLDIERCREATE_STRUCT(tempDetailedPlacement);//(SOLDIERCREATE_STRUCT*)MemAlloc( SIZEOF_SOLDIERCREATE_STRUCT );
|
||||
if( !pNode->pDetailedPlacement )
|
||||
if(tempDetailedPlacement.ubProfile != NO_PROFILE)
|
||||
{
|
||||
AssertMsg( 0, "Failed to allocate memory for new detailed placement in LoadSoldiersFromMap." );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if( tempDetailedPlacement.ubProfile != NO_PROFILE )
|
||||
{
|
||||
pNode->pDetailedPlacement->ubCivilianGroup = gMercProfiles[ tempDetailedPlacement.ubProfile ].ubCivilianGroup;
|
||||
pNode->pBasicPlacement->ubCivilianGroup = gMercProfiles[ tempDetailedPlacement.ubProfile ].ubCivilianGroup;
|
||||
pNode->pDetailedPlacement->ubCivilianGroup = gMercProfiles[tempDetailedPlacement.ubProfile].ubCivilianGroup;
|
||||
pNode->pBasicPlacement->ubCivilianGroup = gMercProfiles[tempDetailedPlacement.ubProfile].ubCivilianGroup;
|
||||
}
|
||||
}
|
||||
if( tempBasicPlacement.bBodyType == COW )
|
||||
{
|
||||
if(tempBasicPlacement.bBodyType == COW)
|
||||
fCowInSector = TRUE;
|
||||
}
|
||||
}
|
||||
if( fCowInSector )
|
||||
if(fCowInSector)
|
||||
{
|
||||
CHAR8 str[ 40 ];
|
||||
sprintf( str, "Sounds\\\\cowmoo%d.wav", Random( 3 ) + 1 );
|
||||
PlayJA2SampleFromFile( str, RATE_11025, MIDVOLUME, 1, MIDDLEPAN );
|
||||
CHAR8 str[40];
|
||||
sprintf(str, "Sounds\\\\cowmoo%d.wav", Random(3)+1);
|
||||
PlayJA2SampleFromFile(str, RATE_11025, MIDVOLUME, 1, MIDDLEPAN);
|
||||
}
|
||||
return TRUE;
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
BOOLEAN SaveSoldiersToMap(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion)
|
||||
{
|
||||
UINT32 i;
|
||||
SOLDIERINITNODE *curr;
|
||||
if(gMapInformation.ubNumIndividuals > MAX_INDIVIDUALS)
|
||||
return(FALSE);
|
||||
// If we are perhaps in the alternate version of the editor, we don't want bad things to happen. This is probably the only place I know where the user gets punished now. If the person was in the alternate editor mode, then decided to save the game, the current mercs may not be there. This would be bad. What we do is override any merc editing done while in this mode, and kill them all, while replacing them with the proper ones. Not only that, the alternate editing mode is turned off, and if intentions are to play the game, the user will be facing many enemies!
|
||||
#ifdef JA2EDITOR
|
||||
if(!gfOriginalList)
|
||||
ResetAllMercPositions();
|
||||
#endif
|
||||
curr = gSoldierInitHead;
|
||||
for(i=0; i<gMapInformation.ubNumIndividuals; i++)
|
||||
{
|
||||
if(!curr)
|
||||
return(FALSE);
|
||||
curr->ubNodeID = (UINT8)i;
|
||||
curr->pBasicPlacement->Save(hFile, dMajorMapVersion, ubMinorMapVersion);
|
||||
if(curr->pBasicPlacement->fDetailedPlacement)
|
||||
{
|
||||
if(!curr->pDetailedPlacement)
|
||||
return(FALSE);
|
||||
if(!curr->pDetailedPlacement->Save(hFile, TRUE, dMajorMapVersion, ubMinorMapVersion))
|
||||
return(FALSE);
|
||||
}
|
||||
curr = curr->next;
|
||||
}
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
//Because soldiers, creatures, etc., maybe added to the game at anytime theoretically, the
|
||||
@@ -544,7 +586,7 @@ BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *curr, GROUP *pGroup = NULL )
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
ROTTING_CORPSE *pCorpse = GetCorpseAtGridNo( curr->pBasicPlacement->sStartingGridNo, 0); // I assume we don't find tanks on the roof
|
||||
ROTTING_CORPSE *pCorpse = GetCorpseAtGridNo( curr->pBasicPlacement->usStartingGridNo, 0); // I assume we don't find tanks on the roof
|
||||
if (pCorpse)
|
||||
{
|
||||
// Assume this is a dead tank and have the replacement tank haul it away
|
||||
@@ -623,7 +665,7 @@ BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *curr, GROUP *pGroup = NULL )
|
||||
if ( tempDetailedPlacement.ubCivilianGroup == KINGPIN_CIV_GROUP && ( gTacticalStatus.fCivGroupHostile[ KINGPIN_CIV_GROUP ] == CIV_GROUP_WILL_BECOME_HOSTILE || ( (gubQuest[ QUEST_KINGPIN_MONEY ] == QUESTINPROGRESS) && (CheckFact( FACT_KINGPIN_CAN_SEND_ASSASSINS, KINGPIN )) ) ) )
|
||||
{
|
||||
if (tempDetailedPlacement.ubProfile == NO_PROFILE)
|
||||
{
|
||||
{//dnl!!!
|
||||
// these guys should be guarding Tony!
|
||||
tempDetailedPlacement.sInsertionGridNo = 13531 +
|
||||
(INT16) ( PreRandom( 8 ) * ( PreRandom( 1 ) ? -1 : 1)
|
||||
@@ -644,7 +686,7 @@ BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *curr, GROUP *pGroup = NULL )
|
||||
}
|
||||
}
|
||||
else if (tempDetailedPlacement.ubProfile == BILLY )
|
||||
{
|
||||
{//dnl!!!
|
||||
// billy should now be able to roam around
|
||||
tempDetailedPlacement.sInsertionGridNo = 13531 +
|
||||
(INT16) ( PreRandom( 30 ) * ( PreRandom( 1 ) ? -1 : 1)
|
||||
@@ -676,7 +718,7 @@ BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *curr, GROUP *pGroup = NULL )
|
||||
{
|
||||
if( gfUseAlternateQueenPosition && tempDetailedPlacement.ubProfile == QUEEN )
|
||||
{
|
||||
tempDetailedPlacement.sInsertionGridNo = 11448;
|
||||
tempDetailedPlacement.sInsertionGridNo = 11448;//dnl!!!
|
||||
}
|
||||
if( tempDetailedPlacement.ubCivilianGroup != QUEENS_CIV_GROUP )
|
||||
{ //The free civilians aren't added if queen is alive
|
||||
@@ -2420,9 +2462,9 @@ void StripEnemyDetailedPlacementsIfSectorWasPlayerLiberated()
|
||||
////////
|
||||
//////// For militia squad attack!
|
||||
////////
|
||||
|
||||
#define CENTRAL_GRIDNO 13202
|
||||
#define CENTRAL_RADIUS 30
|
||||
//dnl ch56 141009
|
||||
//#define CENTRAL_GRIDNO 13202
|
||||
//#define CENTRAL_RADIUS 30
|
||||
|
||||
void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT8 ubNumGreen, UINT8 ubNumReg, UINT8 ubNumElites )
|
||||
{
|
||||
@@ -2478,7 +2520,7 @@ void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT8 ubNu
|
||||
{
|
||||
pSoldier->aiData.bOrders = ONGUARD;
|
||||
pSoldier->aiData.bAlertStatus = STATUS_YELLOW;
|
||||
pSoldier->aiData.sNoiseGridno = (INT16)(CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.sNoiseGridno = (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.ubNoiseVolume = MAX_MISC_NOISE_DURATION;
|
||||
}
|
||||
|
||||
@@ -2518,7 +2560,7 @@ void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT8 ubNu
|
||||
{
|
||||
pSoldier->aiData.bOrders = ONGUARD;
|
||||
pSoldier->aiData.bAlertStatus = STATUS_YELLOW;
|
||||
pSoldier->aiData.sNoiseGridno = (INT16)(CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.sNoiseGridno = (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.ubNoiseVolume = MAX_MISC_NOISE_DURATION;
|
||||
}
|
||||
|
||||
@@ -2558,7 +2600,7 @@ void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT8 ubNu
|
||||
{
|
||||
pSoldier->aiData.bOrders = ONGUARD;
|
||||
pSoldier->aiData.bAlertStatus = STATUS_YELLOW;
|
||||
pSoldier->aiData.sNoiseGridno = (INT16)(CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.sNoiseGridno = (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.ubNoiseVolume = MAX_MISC_NOISE_DURATION;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ extern SOLDIERINITNODE *gSoldierInitTail;
|
||||
//pointer to the beginning of the save/load area, at the correct part of the
|
||||
//map file.
|
||||
BOOLEAN LoadSoldiersFromMap( INT8 **hBuffer, float dMajorMapVersion, UINT8 ubMinorMapVersion );
|
||||
BOOLEAN SaveSoldiersToMap( HWFILE fp );
|
||||
BOOLEAN SaveSoldiersToMap(HWFILE fp, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion);//dnl ch33 150909
|
||||
|
||||
//For the purpose of keeping track of which soldier belongs to which placement within the game,
|
||||
//the only way we can do this properly is to save the soldier ID from the list and reconnect the
|
||||
|
||||
@@ -184,7 +184,7 @@ INT16 gsTerroristSector[NUM_TERRORISTS][NUM_TERRORIST_POSSIBLE_LOCATIONS][2] =
|
||||
}
|
||||
};
|
||||
|
||||
INT16 gsRobotGridNo;
|
||||
INT32 gsRobotGridNo;
|
||||
|
||||
#define NUM_ASSASSINS 6
|
||||
|
||||
@@ -225,6 +225,7 @@ extern SOLDIERTYPE *gpSMCurrentMerc;
|
||||
extern BOOLEAN gfRerenderInterfaceFromHelpText;
|
||||
|
||||
|
||||
// WANNE - BMP: DONE!
|
||||
BOOLEAN LoadMercProfiles(void)
|
||||
{
|
||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"LoadMercProfiles");
|
||||
@@ -301,6 +302,13 @@ BOOLEAN LoadMercProfiles(void)
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
// WANNE - BMP: NEED TESTING!
|
||||
// WANNE - BMP: DONE!
|
||||
//<SB> convert old MERCPROFILESTRUCT to new MERCPROFILESTRUCT
|
||||
gMercProfiles[uiLoop].sGridNo = gMercProfiles[uiLoop]._old_sGridNo;
|
||||
gMercProfiles[uiLoop].sPreCombatGridNo = gMercProfiles[uiLoop]._old_sGridNo;
|
||||
//</SB>
|
||||
|
||||
/* CHRISL: For now, we should only overwrite prof.dat in the new inventory system. Old system should still use
|
||||
prof.dat until we're sure we want to replace it with the xml file.*/
|
||||
if(UsingNewInventorySystem() == true){
|
||||
@@ -560,13 +568,15 @@ void DecideActiveTerrorists( void )
|
||||
// random 40% chance of adding this terrorist if not yet placed
|
||||
if ( ( gMercProfiles[ ubTerrorist ].sSectorX == 0 ) && (( Random( 100 ) < 40 ) || gGameExternalOptions.fEnableAllTerrorists ) ) // also added the check because it makes no sense to choose randomly which terrorist will be in game, all of them should
|
||||
{
|
||||
fFoundSpot = FALSE;
|
||||
//fFoundSpot = FALSE;
|
||||
// Since there are 5 spots per terrorist and a maximum of 5 terrorists, we
|
||||
// are guaranteed to be able to find a spot for each terrorist since there
|
||||
// aren't enough other terrorists to use up all the spots for any one
|
||||
// terrorist
|
||||
do
|
||||
{
|
||||
fFoundSpot = TRUE;
|
||||
|
||||
// pick a random spot, see if it's already been used by another terrorist
|
||||
uiLocationChoice = Random( NUM_TERRORIST_POSSIBLE_LOCATIONS );
|
||||
for (ubLoop2 = 0; ubLoop2 < ubNumTerroristsAdded; ubLoop2++)
|
||||
@@ -575,11 +585,15 @@ void DecideActiveTerrorists( void )
|
||||
{
|
||||
if (sTerroristPlacement[ubLoop2][1] == gsTerroristSector[ubLoop][uiLocationChoice][1] )
|
||||
{
|
||||
continue;
|
||||
// WANNE: Fix a vanilla bug: Due to a logic bug multiple terrorists could end up in the same sector.
|
||||
// Fixed by Tron (Straciatella): Revision: 6932
|
||||
fFoundSpot = FALSE;
|
||||
break;
|
||||
//continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
fFoundSpot = TRUE;
|
||||
//fFoundSpot = TRUE;
|
||||
} while( !fFoundSpot );
|
||||
|
||||
// place terrorist!
|
||||
@@ -943,7 +957,7 @@ SOLDIERTYPE *ChangeSoldierTeam( SOLDIERTYPE *pSoldier, UINT8 ubTeam )
|
||||
SOLDIERTYPE *pNewSoldier = NULL;
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
UINT32 cnt;
|
||||
INT16 sOldGridNo;
|
||||
INT32 sOldGridNo;
|
||||
|
||||
UINT8 ubOldID;
|
||||
UINT32 uiOldUniqueId;
|
||||
@@ -1013,6 +1027,15 @@ SOLDIERTYPE *ChangeSoldierTeam( SOLDIERTYPE *pSoldier, UINT8 ubTeam )
|
||||
pNewSoldier->stats.bScientific = pSoldier->stats.bScientific;
|
||||
pNewSoldier->bLastRenderVisibleValue = pSoldier->bLastRenderVisibleValue;
|
||||
pNewSoldier->bVisible = pSoldier->bVisible;
|
||||
|
||||
// WANNE: Fix a vanilla bug: When a soldier changed team (e.g. getting hostile), he lost his camouflage.
|
||||
// Fixed by Tron (Stracciatella): Revision: 7055
|
||||
pNewSoldier->bCamo = pSoldier->bCamo;
|
||||
if (pNewSoldier->bCamo != 0)
|
||||
{
|
||||
pNewSoldier->CreateSoldierPalettes();
|
||||
}
|
||||
|
||||
// 0verhaul: Need to pass certain flags over. COWERING is one of them. Others to be determined.
|
||||
|
||||
// copy uiStatusFlags, etc. - hayden :)
|
||||
@@ -1625,7 +1648,7 @@ SOLDIERTYPE * SwapLarrysProfiles( SOLDIERTYPE * pSoldier )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN DoesNPCOwnBuilding( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
BOOLEAN DoesNPCOwnBuilding( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
UINT8 ubRoomInfo;
|
||||
|
||||
@@ -1763,4 +1786,4 @@ void OverwriteMercOpinionsWithXMLData( UINT32 uiLoop )
|
||||
{
|
||||
gMercProfiles[ uiLoop ].bMercOpinion[cnt] = tempProfiles[ uiLoop ].bMercOpinion[cnt] ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,9 +195,8 @@ void MakeRemainingTerroristsTougher( void );
|
||||
void MakeRemainingAssassinsTougher( void );
|
||||
SOLDIERTYPE * SwapLarrysProfiles( SOLDIERTYPE * pSoldier );
|
||||
|
||||
BOOLEAN DoesNPCOwnBuilding( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
BOOLEAN DoesNPCOwnBuilding( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
|
||||
// HEADROCK PROFEX: Temporary array for merc profile data, read from XML
|
||||
typedef struct
|
||||
{
|
||||
CHAR16 zName[NAME_LENGTH];
|
||||
|
||||
+47
-47
@@ -78,26 +78,26 @@ void OutputDebugInfoForTurnBasedNextTileWaiting( SOLDIERTYPE * pSoldier )
|
||||
if ( (gTacticalStatus.uiFlags & INCOMBAT) && (pSoldier->pathing.usPathDataSize > 0) )
|
||||
{
|
||||
UINT32 uiLoop;
|
||||
INT16 sTemp = NOWHERE;
|
||||
INT16 sNewGridNo;
|
||||
INT32 usTemp = NOWHERE;
|
||||
INT32 usNewGridNo;
|
||||
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ] ) );
|
||||
usNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( (UINT8)pSoldier->pathing.usPathingData[ pSoldier->pathing.usPathIndex ] ) );
|
||||
|
||||
// provide more info!!
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String(" Soldier path size %d, index %d", pSoldier->pathing.usPathDataSize, pSoldier->pathing.usPathIndex ) );
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String(" Who is at blocked gridno: %d", WhoIsThere2( sNewGridNo, pSoldier->pathing.bLevel ) ) );
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String(" Who is at blocked gridno: %d", WhoIsThere2( usNewGridNo, pSoldier->pathing.bLevel ) ) );
|
||||
|
||||
for ( uiLoop = 0; uiLoop < pSoldier->pathing.usPathDataSize; uiLoop++ )
|
||||
{
|
||||
if ( uiLoop > pSoldier->pathing.usPathIndex )
|
||||
{
|
||||
sTemp = NewGridNo( sTemp, DirectionInc( (UINT8)pSoldier->pathing.usPathingData[ uiLoop ] ) );
|
||||
usTemp = NewGridNo( usTemp, DirectionInc( (UINT8)pSoldier->pathing.usPathingData[ uiLoop ] ) );
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String(" Soldier path[%d]: %d == gridno %d", uiLoop, pSoldier->pathing.usPathingData[uiLoop], sTemp ) );
|
||||
}
|
||||
else if ( uiLoop == pSoldier->pathing.usPathIndex )
|
||||
{
|
||||
sTemp = sNewGridNo;
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String(" Soldier path[%d]: %d == gridno %d", uiLoop, pSoldier->pathing.usPathingData[uiLoop], sTemp ) );
|
||||
usTemp = usNewGridNo;
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String(" Soldier path[%d]: %d == gridno %d", uiLoop, pSoldier->pathing.usPathingData[uiLoop], usTemp ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -111,7 +111,7 @@ void OutputDebugInfoForTurnBasedNextTileWaiting( SOLDIERTYPE * pSoldier )
|
||||
|
||||
|
||||
|
||||
void SetDelayedTileWaiting( SOLDIERTYPE *pSoldier, INT16 sCauseGridNo, INT8 bValue )
|
||||
void SetDelayedTileWaiting( SOLDIERTYPE *pSoldier, INT32 sCauseGridNo, INT8 bValue )
|
||||
{
|
||||
UINT8 ubPerson;
|
||||
|
||||
@@ -147,7 +147,7 @@ void SetDelayedTileWaiting( SOLDIERTYPE *pSoldier, INT16 sCauseGridNo, INT8 bVal
|
||||
}
|
||||
|
||||
|
||||
void SetFinalTile( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fGivenUp )
|
||||
void SetFinalTile( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fGivenUp )
|
||||
{
|
||||
// OK, If we were waiting for stuff, do it here...
|
||||
|
||||
@@ -176,10 +176,10 @@ void SetFinalTile( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fGivenUp )
|
||||
}
|
||||
|
||||
|
||||
void MarkMovementReserved( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
void MarkMovementReserved( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
// Check if we have one reserrved already, and free it first!
|
||||
if ( pSoldier->sReservedMovementGridNo != NOWHERE )
|
||||
// Check if we have one reserrved already, and free it first!
|
||||
if (!TileIsOutOfBounds(pSoldier->sReservedMovementGridNo))
|
||||
{
|
||||
UnMarkMovementReserved( pSoldier );
|
||||
}
|
||||
@@ -195,7 +195,7 @@ void MarkMovementReserved( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
|
||||
void UnMarkMovementReserved( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
|
||||
sNewGridNo = GETWORLDINDEXFROMWORLDCOORDS(pSoldier->dYPos, pSoldier->dXPos );
|
||||
|
||||
@@ -206,8 +206,8 @@ void UnMarkMovementReserved( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
// For single-tiled mercs, unset this gridno
|
||||
// See if we have one reserved!
|
||||
if ( pSoldier->sReservedMovementGridNo != NOWHERE )
|
||||
// See if we have one reserved!
|
||||
if (!TileIsOutOfBounds(pSoldier->sReservedMovementGridNo))
|
||||
{
|
||||
gpWorldLevelData[ pSoldier->sReservedMovementGridNo ].uiFlags &= (~MAPELEMENT_MOVEMENT_RESERVED);
|
||||
|
||||
@@ -215,14 +215,14 @@ void UnMarkMovementReserved( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
}
|
||||
|
||||
INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT16 sGridNo, INT8 bLevel )
|
||||
INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
UINT8 ubPerson;
|
||||
INT16 sTempDestGridNo;
|
||||
INT16 sNewGridNo;
|
||||
INT32 sTempDestGridNo;
|
||||
INT32 sNewGridNo;
|
||||
BOOLEAN fSwapInDoor = FALSE;
|
||||
|
||||
if ( sGridNo == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
return( MOVE_TILE_CLEAR );
|
||||
}
|
||||
@@ -270,7 +270,7 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT16 sGridNo, INT8 bL
|
||||
pSoldier->flags.fBlockedByAnotherMerc = FALSE;
|
||||
|
||||
// Is the next tile blocked too?
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( (UINT8)guiPathingData[ 0 ] ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( (UINT8)guiPathingData[ 0 ] ) );
|
||||
|
||||
return( TileIsClear( pSoldier, (UINT8)guiPathingData[ 0 ], sNewGridNo, pSoldier->pathing.bLevel ) );
|
||||
}
|
||||
@@ -349,7 +349,7 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT16 sGridNo, INT8 bL
|
||||
gpWorldLevelData[ sGridNo ].uiFlags|=MAPELEMENT_REVEALED;
|
||||
gpWorldLevelData[ sGridNo ].uiFlags|=MAPELEMENT_REDRAW;
|
||||
SetRenderFlags(RENDER_FLAG_MARKED);
|
||||
RecompileLocalMovementCosts( (INT16)sGridNo );
|
||||
RecompileLocalMovementCosts( sGridNo );
|
||||
}
|
||||
|
||||
// Unset flag for blocked by soldier...
|
||||
@@ -382,7 +382,7 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT16 sGridNo, INT8 bL
|
||||
|
||||
|
||||
|
||||
BOOLEAN HandleNextTile( SOLDIERTYPE *pSoldier, INT8 bDirection, INT16 sGridNo, INT16 sFinalDestTile )
|
||||
BOOLEAN HandleNextTile( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT32 sFinalDestTile )//dnl ch53 111009
|
||||
{
|
||||
INT8 bBlocked;
|
||||
INT16 bOverTerrainType;
|
||||
@@ -409,8 +409,8 @@ BOOLEAN HandleNextTile( SOLDIERTYPE *pSoldier, INT8 bDirection, INT16 sGridNo, I
|
||||
if ( bBlocked != MOVE_TILE_CLEAR )
|
||||
{
|
||||
// Is the next gridno our destination?
|
||||
// OK: Let's check if we are NOT walking off screen
|
||||
if ( sGridNo == sFinalDestTile && pSoldier->ubWaitActionToDo == 0 && (pSoldier->bTeam == gbPlayerNum || pSoldier->sAbsoluteFinalDestination == NOWHERE) )
|
||||
// OK: Let's check if we are NOT walking off screen
|
||||
if ( sGridNo == sFinalDestTile && pSoldier->ubWaitActionToDo == 0 && (pSoldier->bTeam == gbPlayerNum || TileIsOutOfBounds(pSoldier->sAbsoluteFinalDestination)) )
|
||||
{
|
||||
// Yah, well too bad, stop here.
|
||||
SetFinalTile( pSoldier, pSoldier->sGridNo, FALSE );
|
||||
@@ -422,7 +422,7 @@ BOOLEAN HandleNextTile( SOLDIERTYPE *pSoldier, INT8 bDirection, INT16 sGridNo, I
|
||||
{
|
||||
// Stationary,
|
||||
{
|
||||
INT16 sOldFinalDest;
|
||||
INT32 sOldFinalDest;//dnl ch53 111009
|
||||
|
||||
// Maintain sFinalDest....
|
||||
sOldFinalDest = pSoldier->pathing.sFinalDestination;
|
||||
@@ -444,7 +444,7 @@ BOOLEAN HandleNextTile( SOLDIERTYPE *pSoldier, INT8 bDirection, INT16 sGridNo, I
|
||||
else
|
||||
{
|
||||
{
|
||||
INT16 sOldFinalDest;
|
||||
INT32 sOldFinalDest;//dnl ch53 111009
|
||||
|
||||
// Maintain sFinalDest....
|
||||
sOldFinalDest = pSoldier->pathing.sFinalDestination;
|
||||
@@ -508,8 +508,8 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
// Buddy is waiting to continue his path
|
||||
INT8 bBlocked, bPathBlocked;
|
||||
INT16 sCost;
|
||||
INT16 sNewGridNo, sCheckGridNo;
|
||||
INT32 sCost;
|
||||
INT32 sNewGridNo, sCheckGridNo;
|
||||
UINT8 ubDirection, bCauseDirection;
|
||||
UINT8 ubPerson;
|
||||
UINT8 fFlags = 0;
|
||||
@@ -583,8 +583,8 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
// OK, look around dest for the first one!
|
||||
sCheckGridNo = FindGridNoFromSweetSpot( pSoldier, pSoldier->pathing.sFinalDestination, 6, &ubDirection );
|
||||
|
||||
if ( sCheckGridNo == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(sCheckGridNo))
|
||||
{
|
||||
// If this is nowhere, try harder!
|
||||
sCheckGridNo = FindGridNoFromSweetSpot( pSoldier, pSoldier->pathing.sFinalDestination, 16, &ubDirection );
|
||||
@@ -594,8 +594,8 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
// OK, look around dest for the first one!
|
||||
sCheckGridNo = FindGridNoFromSweetSpotThroughPeople( pSoldier, pSoldier->pathing.sFinalDestination, 6, &ubDirection );
|
||||
|
||||
if ( sCheckGridNo == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(sCheckGridNo))
|
||||
{
|
||||
// If this is nowhere, try harder!
|
||||
sCheckGridNo = FindGridNoFromSweetSpotThroughPeople( pSoldier, pSoldier->pathing.sFinalDestination, 16, &ubDirection );
|
||||
@@ -607,13 +607,13 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
sCheckGridNo = pSoldier->pathing.sFinalDestination;
|
||||
}
|
||||
|
||||
sCost = (INT16) FindBestPath( pSoldier, sCheckGridNo, pSoldier->pathing.bLevel, pSoldier->usUIMovementMode, NO_COPYROUTE, fFlags );
|
||||
sCost = FindBestPath( pSoldier, sCheckGridNo, pSoldier->pathing.bLevel, pSoldier->usUIMovementMode, NO_COPYROUTE, fFlags );
|
||||
|
||||
// Can we get there
|
||||
if ( sCost > 0 )
|
||||
{
|
||||
// Is the next tile blocked too?
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( (UINT8)guiPathingData[ 0 ] ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( (UINT8)guiPathingData[ 0 ] ) );
|
||||
|
||||
bPathBlocked = TileIsClear( pSoldier, (UINT8)guiPathingData[ 0 ], sNewGridNo, pSoldier->pathing.bLevel );
|
||||
|
||||
@@ -621,10 +621,10 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
// Try to path around everyone except dest person
|
||||
|
||||
sCost = (INT16) FindBestPath( pSoldier, sCheckGridNo, pSoldier->pathing.bLevel, pSoldier->usUIMovementMode, NO_COPYROUTE, PATH_IGNORE_PERSON_AT_DEST );
|
||||
sCost = FindBestPath( pSoldier, sCheckGridNo, pSoldier->pathing.bLevel, pSoldier->usUIMovementMode, NO_COPYROUTE, PATH_IGNORE_PERSON_AT_DEST );
|
||||
|
||||
// Is the next tile in this new path blocked too?
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, DirectionInc( (UINT8)guiPathingData[ 0 ] ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, DirectionInc( (UINT8)guiPathingData[ 0 ] ) );
|
||||
|
||||
bPathBlocked = TileIsClear( pSoldier, (UINT8)guiPathingData[ 0 ], sNewGridNo, pSoldier->pathing.bLevel );
|
||||
|
||||
@@ -664,8 +664,8 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
pSoldier->flags.fDelayedMovement = 99;
|
||||
}
|
||||
|
||||
// Do we want to force a swap?
|
||||
if (pSoldier->flags.fDelayedMovement == 3 && (pSoldier->sAbsoluteFinalDestination != NOWHERE || gTacticalStatus.fAutoBandageMode) )
|
||||
// Do we want to force a swap?
|
||||
if (pSoldier->flags.fDelayedMovement == 3 && (!TileIsOutOfBounds(pSoldier->sAbsoluteFinalDestination) || gTacticalStatus.fAutoBandageMode) )
|
||||
{
|
||||
// with person who is in the way?
|
||||
ubPerson = WhoIsThere2( pSoldier->sDelayedMovementCauseGridNo, pSoldier->pathing.bLevel );
|
||||
@@ -685,12 +685,12 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
// With these two guys swapped, we should try to continue on our way....
|
||||
pSoldier->flags.fDelayedMovement = FALSE;
|
||||
|
||||
// We must calculate the path here so that we can give it the "through people" parameter
|
||||
if ( gTacticalStatus.fAutoBandageMode && pSoldier->sAbsoluteFinalDestination == NOWHERE )
|
||||
// We must calculate the path here so that we can give it the "through people" parameter
|
||||
if ( gTacticalStatus.fAutoBandageMode && TileIsOutOfBounds(pSoldier->sAbsoluteFinalDestination))
|
||||
{
|
||||
FindBestPath( pSoldier, pSoldier->pathing.sFinalDestination, pSoldier->pathing.bLevel, pSoldier->usUIMovementMode, COPYROUTE, PATH_THROUGH_PEOPLE );
|
||||
}
|
||||
else if ( pSoldier->sAbsoluteFinalDestination != NOWHERE && !FindBestPath( pSoldier, pSoldier->sAbsoluteFinalDestination, pSoldier->pathing.bLevel, pSoldier->usUIMovementMode, COPYROUTE, PATH_THROUGH_PEOPLE ) )
|
||||
}
|
||||
else if (!TileIsOutOfBounds(pSoldier->sAbsoluteFinalDestination) && !FindBestPath( pSoldier, pSoldier->sAbsoluteFinalDestination, pSoldier->pathing.bLevel, pSoldier->usUIMovementMode, COPYROUTE, PATH_THROUGH_PEOPLE ) )
|
||||
{
|
||||
// check to see if we're there now!
|
||||
if ( pSoldier->sGridNo == pSoldier->sAbsoluteFinalDestination )
|
||||
@@ -741,7 +741,7 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN TeleportSoldier( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fForce )
|
||||
BOOLEAN TeleportSoldier( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fForce )
|
||||
{
|
||||
INT16 sX, sY;
|
||||
|
||||
@@ -784,7 +784,7 @@ BOOLEAN TeleportSoldier( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fForce )
|
||||
// Swaps 2 soldier positions...
|
||||
void SwapMercPositions( SOLDIERTYPE *pSoldier1, SOLDIERTYPE *pSoldier2 )
|
||||
{
|
||||
INT16 sGridNo1, sGridNo2;
|
||||
INT32 sGridNo1, sGridNo2;
|
||||
|
||||
// OK, save positions...
|
||||
sGridNo1 = pSoldier1->sGridNo;
|
||||
@@ -828,11 +828,11 @@ BOOLEAN CanExchangePlaces( SOLDIERTYPE *pSoldier1, SOLDIERTYPE *pSoldier2, BOOLE
|
||||
if ( pSoldier2->flags.uiStatusFlags & ( SOLDIER_ANIMAL ) )
|
||||
return( FALSE );
|
||||
|
||||
// must NOT be hostile, must NOT have stationary orders OR militia team, must be >= OKLIFE
|
||||
// must NOT be hostile, must NOT have stationary orders OR militia team, must be >= OKLIFE
|
||||
if( pSoldier2->aiData.bNeutral && pSoldier2->stats.bLife >= OKLIFE &&
|
||||
pSoldier2->ubCivilianGroup != HICKS_CIV_GROUP &&
|
||||
( ( pSoldier2->aiData.bOrders != STATIONARY || pSoldier2->bTeam == MILITIA_TEAM ) ||
|
||||
( pSoldier2->sAbsoluteFinalDestination != NOWHERE && pSoldier2->sAbsoluteFinalDestination != pSoldier2->sGridNo ) )
|
||||
( !TileIsOutOfBounds(pSoldier2->sAbsoluteFinalDestination) && pSoldier2->sAbsoluteFinalDestination != pSoldier2->sGridNo ) )
|
||||
)
|
||||
return( TRUE );
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier )
|
||||
MOUSETT *pRegion = &mouseTT;
|
||||
CHAR16 pStrInfo[ sizeof( pRegion->FastHelpText ) ];
|
||||
int iNVG = 0;
|
||||
INT16 sSoldierGridNo;
|
||||
INT32 usSoldierGridNo;
|
||||
BOOLEAN fDisplayBigSlotItem = FALSE;
|
||||
BOOLEAN fMercIsUsingScope = FALSE;
|
||||
UINT16 iCarriedRL = 0;
|
||||
@@ -74,7 +74,7 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier )
|
||||
fDrawTooltip = TRUE;
|
||||
|
||||
// get the gridno the cursor is at
|
||||
GetMouseMapPos( &sSoldierGridNo );
|
||||
GetMouseMapPos( &usSoldierGridNo );
|
||||
|
||||
// get the distance to enemy's tile from the selected merc
|
||||
if ( gusSelectedSoldier != NOBODY )
|
||||
@@ -197,9 +197,9 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier )
|
||||
{
|
||||
// display "debug" info
|
||||
if ( gGameExternalOptions.fEnableSoldierTooltipLocation )
|
||||
swprintf( pStrInfo, gzTooltipStrings[STR_TT_CAT_LOCATION], pStrInfo, sSoldierGridNo );
|
||||
swprintf( pStrInfo, gzTooltipStrings[STR_TT_CAT_LOCATION], pStrInfo, usSoldierGridNo );
|
||||
if ( gGameExternalOptions.fEnableSoldierTooltipBrightness )
|
||||
swprintf( pStrInfo, gzTooltipStrings[STR_TT_CAT_BRIGHTNESS], pStrInfo, SHADE_MIN - LightTrueLevel( sSoldierGridNo, gsInterfaceLevel ), SHADE_MIN );
|
||||
swprintf( pStrInfo, gzTooltipStrings[STR_TT_CAT_BRIGHTNESS], pStrInfo, SHADE_MIN - LightTrueLevel( usSoldierGridNo, gsInterfaceLevel ), SHADE_MIN );
|
||||
if ( gGameExternalOptions.fEnableSoldierTooltipRangeToTarget )
|
||||
swprintf( pStrInfo, gzTooltipStrings[STR_TT_CAT_RANGE_TO_TARGET], pStrInfo, iRangeToTarget );
|
||||
if ( gGameExternalOptions.fEnableSoldierTooltipID )
|
||||
|
||||
@@ -37,7 +37,7 @@ void ResetBurstLocations( )
|
||||
}
|
||||
|
||||
|
||||
void InternalAccumulateBurstLocation( INT16 sGridNo )
|
||||
void InternalAccumulateBurstLocation( INT32 sGridNo )
|
||||
{
|
||||
INT32 cnt;
|
||||
if ( gbNumBurstLocations < MAX_BURST_LOCATIONS )
|
||||
@@ -62,11 +62,11 @@ void InternalAccumulateBurstLocation( INT16 sGridNo )
|
||||
|
||||
//Madd: to add a bit more usefulness to spread fire, I'm making it so that
|
||||
//it will automatically latch onto enemies within iSearchRange tiles of the mouse drag.
|
||||
void AccumulateBurstLocation( INT16 sGridNo )
|
||||
void AccumulateBurstLocation( INT32 sGridNo )
|
||||
{
|
||||
SOLDIERTYPE* pTarget;
|
||||
int iSearchRange = 2; // number of tiles beside the mouse drag to look at
|
||||
INT16 sMaxLeft, sMaxRight, sMaxUp, sMaxDown, sXOffset, sYOffset, sAdjacentGridNo;
|
||||
INT32 sMaxLeft, sMaxRight, sMaxUp, sMaxDown, sXOffset, sYOffset, sAdjacentGridNo;
|
||||
BOOLEAN foundTarget = FALSE;
|
||||
|
||||
//first see if we can find a guy standing right on the spot
|
||||
@@ -252,7 +252,7 @@ extern HVOBJECT GetCursorFileVideoObject( UINT32 uiCursorFile );
|
||||
void RenderAccumulatedBurstLocations( )
|
||||
{
|
||||
INT32 cnt;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
HVOBJECT hVObject;
|
||||
|
||||
if ( !gfBeginBurstSpreadTracking )
|
||||
|
||||
@@ -7,7 +7,7 @@ typedef struct
|
||||
{
|
||||
INT16 sX;
|
||||
INT16 sY;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
|
||||
} BURST_LOCATIONS;
|
||||
|
||||
@@ -17,7 +17,7 @@ extern INT8 gbNumBurstLocations;
|
||||
|
||||
|
||||
void ResetBurstLocations( );
|
||||
void AccumulateBurstLocation( INT16 sGridNo );
|
||||
void AccumulateBurstLocation( INT32 sGridNo );
|
||||
void PickBurstLocations( SOLDIERTYPE *pSoldier );
|
||||
void AIPickBurstLocations( SOLDIERTYPE *pSoldier, INT8 bTargets, SOLDIERTYPE *pTargets[5] );
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ typedef struct
|
||||
UINT16 usHeight;
|
||||
INT16 sX;
|
||||
INT16 sY;
|
||||
INT16 sAdditionalData;
|
||||
INT32 sAdditionalData;//dnl ch56 151009
|
||||
UINT8 ubFlags;
|
||||
UINT8 ubLeaveSectorType;
|
||||
UINT8 ubLeaveSectorCode;
|
||||
@@ -106,23 +106,23 @@ EXIT_DIALOG_STRUCT gExitDialog;
|
||||
|
||||
|
||||
UINT8 gubExitGUIDirection;
|
||||
INT16 gsExitGUIAdditionalData;
|
||||
INT32 gsExitGUIAdditionalData;//dnl ch56 151009
|
||||
INT16 gsWarpWorldX;
|
||||
INT16 gsWarpWorldY;
|
||||
INT8 gbWarpWorldZ;
|
||||
INT16 gsWarpGridNo;
|
||||
INT32 gsWarpGridNo;
|
||||
|
||||
|
||||
//KM: New method is coded for more sophistocated rules. All the information is stored within the gExitDialog struct
|
||||
// and calculated upon entry to this function instead of passing in multiple arguments and calculating it prior.
|
||||
BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT16 sAdditionalData )
|
||||
BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )//dnl ch56 151009
|
||||
{
|
||||
UINT32 uiTraverseTimeInMinutes;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT32 i;
|
||||
SGPRect aRect;
|
||||
UINT16 usTextBoxWidth, usTextBoxHeight;
|
||||
INT16 sMapPos = 0;
|
||||
INT32 usMapPos = 0;
|
||||
INT8 bExitCode = -1;
|
||||
BOOLEAN OkExitCode;
|
||||
|
||||
@@ -147,11 +147,11 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT16 sAdditionalData )
|
||||
break;
|
||||
case DIRECTION_EXITGRID:
|
||||
bExitCode = -1;
|
||||
sMapPos = sAdditionalData;
|
||||
usMapPos = sAdditionalData;
|
||||
break;
|
||||
}
|
||||
|
||||
OkExitCode = OKForSectorExit( bExitCode, sMapPos, &uiTraverseTimeInMinutes );
|
||||
OkExitCode = OKForSectorExit( bExitCode, usMapPos, &uiTraverseTimeInMinutes );
|
||||
|
||||
if( uiTraverseTimeInMinutes <= 5 )
|
||||
{ //if the traverse time is short, then traversal is percieved to be instantaneous.
|
||||
@@ -441,7 +441,7 @@ void WarpToSurfaceCallback( UINT8 bExitValue )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN InitSectorExitMenu( UINT8 ubDirection, INT16 sAdditionalData )
|
||||
BOOLEAN InitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )//dnl ch56 151009
|
||||
{
|
||||
gubExitGUIDirection = ubDirection;
|
||||
gsExitGUIAdditionalData = sAdditionalData;
|
||||
|
||||
@@ -19,7 +19,7 @@ enum
|
||||
|
||||
extern BOOLEAN gfInSectorExitMenu;
|
||||
|
||||
BOOLEAN InitSectorExitMenu( UINT8 ubDirection, INT16 sAdditionalData );
|
||||
BOOLEAN InitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData );//dnl ch56 151009
|
||||
void RenderSectorExitMenu( );
|
||||
BOOLEAN HandleSectorExitMenu( );
|
||||
void RemoveSectorExitMenu( BOOLEAN fOK );
|
||||
|
||||
+29
-29
@@ -15,11 +15,11 @@
|
||||
#include "rotting corpses.h"
|
||||
#endif
|
||||
|
||||
extern BOOLEAN DoesSAMExistHere( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, INT16 sGridNo );
|
||||
extern BOOLEAN DoesSAMExistHere( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, INT32 sGridNo );
|
||||
|
||||
|
||||
|
||||
BOOLEAN IsFencePresentAtGridno( INT16 sGridNo )
|
||||
BOOLEAN IsFencePresentAtGridNo( INT32 sGridNo )
|
||||
{
|
||||
if ( FindStructure( sGridNo, STRUCTURE_ANYFENCE ) != NULL )
|
||||
{
|
||||
@@ -29,7 +29,7 @@ BOOLEAN IsFencePresentAtGridno( INT16 sGridNo )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN IsRoofPresentAtGridno( INT16 sGridNo )
|
||||
BOOLEAN IsRoofPresentAtGridNo( INT32 sGridNo )
|
||||
{
|
||||
if ( FindStructure( sGridNo, STRUCTURE_ROOF ) != NULL )
|
||||
{
|
||||
@@ -40,7 +40,7 @@ BOOLEAN IsRoofPresentAtGridno( INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN IsJumpableFencePresentAtGridno( INT16 sGridNo )
|
||||
BOOLEAN IsJumpableFencePresentAtGridNo( INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
|
||||
@@ -62,7 +62,7 @@ BOOLEAN IsJumpableFencePresentAtGridno( INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN IsDoorPresentAtGridno( INT16 sGridNo )
|
||||
BOOLEAN IsDoorPresentAtGridNo( INT32 sGridNo )
|
||||
{
|
||||
if ( FindStructure( sGridNo, STRUCTURE_ANYDOOR ) != NULL )
|
||||
{
|
||||
@@ -73,7 +73,7 @@ BOOLEAN IsDoorPresentAtGridno( INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN IsTreePresentAtGridno( INT16 sGridNo )
|
||||
BOOLEAN IsTreePresentAtGridNo( INT32 sGridNo )
|
||||
{
|
||||
if ( FindStructure( sGridNo, STRUCTURE_TREE ) != NULL )
|
||||
{
|
||||
@@ -84,7 +84,7 @@ BOOLEAN IsTreePresentAtGridno( INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
LEVELNODE *IsWallPresentAtGridno( INT16 sGridNo )
|
||||
LEVELNODE *IsWallPresentAtGridNo( INT32 sGridNo )
|
||||
{
|
||||
LEVELNODE *pNode = NULL;
|
||||
STRUCTURE * pStructure;
|
||||
@@ -99,7 +99,7 @@ LEVELNODE *IsWallPresentAtGridno( INT16 sGridNo )
|
||||
return( pNode );
|
||||
}
|
||||
|
||||
LEVELNODE *GetWallLevelNodeOfSameOrientationAtGridno( INT16 sGridNo, INT8 ubOrientation )
|
||||
LEVELNODE *GetWallLevelNodeOfSameOrientationAtGridNo( INT32 sGridNo, INT8 ubOrientation )
|
||||
{
|
||||
LEVELNODE *pNode = NULL;
|
||||
STRUCTURE * pStructure;
|
||||
@@ -121,7 +121,7 @@ LEVELNODE *GetWallLevelNodeOfSameOrientationAtGridno( INT16 sGridNo, INT8 ubOrie
|
||||
}
|
||||
|
||||
|
||||
LEVELNODE *GetWallLevelNodeAndStructOfSameOrientationAtGridno( INT16 sGridNo, INT8 ubOrientation, STRUCTURE **ppStructure )
|
||||
LEVELNODE *GetWallLevelNodeAndStructOfSameOrientationAtGridNo( INT32 sGridNo, INT8 ubOrientation, STRUCTURE **ppStructure )
|
||||
{
|
||||
LEVELNODE *pNode = NULL;
|
||||
STRUCTURE * pStructure, * pBaseStructure;
|
||||
@@ -150,10 +150,10 @@ LEVELNODE *GetWallLevelNodeAndStructOfSameOrientationAtGridno( INT16 sGridNo, IN
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN IsDoorVisibleAtGridNo( INT16 sGridNo )
|
||||
BOOLEAN IsDoorVisibleAtGridNo( INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
|
||||
pStructure = FindStructure( sGridNo, STRUCTURE_ANYDOOR );
|
||||
|
||||
@@ -207,7 +207,7 @@ BOOLEAN IsDoorVisibleAtGridNo( INT16 sGridNo )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN DoesGridnoContainHiddenStruct( INT16 sGridNo, BOOLEAN *pfVisible )
|
||||
BOOLEAN DoesGridNoContainHiddenStruct( INT32 sGridNo, BOOLEAN *pfVisible )
|
||||
{
|
||||
// ATE: These are ignored now - always return false
|
||||
|
||||
@@ -233,7 +233,7 @@ BOOLEAN DoesGridnoContainHiddenStruct( INT16 sGridNo, BOOLEAN *pfVisible )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN IsHiddenStructureVisible( INT16 sGridNo, UINT16 usIndex )
|
||||
BOOLEAN IsHiddenStructureVisible( INT32 sGridNo, UINT16 usIndex )
|
||||
{
|
||||
// Check if it's a hidden struct and we have not revealed anything!
|
||||
if ( gTileDatabase[ usIndex ].uiFlags & HIDDEN_TILE )
|
||||
@@ -249,7 +249,7 @@ BOOLEAN IsHiddenStructureVisible( INT16 sGridNo, UINT16 usIndex )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN WallExistsOfTopLeftOrientation( INT16 sGridNo )
|
||||
BOOLEAN WallExistsOfTopLeftOrientation( INT32 sGridNo )
|
||||
{
|
||||
// CJC: changing to search only for normal walls, July 16, 1998
|
||||
STRUCTURE * pStructure;
|
||||
@@ -271,7 +271,7 @@ BOOLEAN WallExistsOfTopLeftOrientation( INT16 sGridNo )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN WallExistsOfTopRightOrientation( INT16 sGridNo )
|
||||
BOOLEAN WallExistsOfTopRightOrientation( INT32 sGridNo )
|
||||
{
|
||||
// CJC: changing to search only for normal walls, July 16, 1998
|
||||
STRUCTURE * pStructure;
|
||||
@@ -293,7 +293,7 @@ BOOLEAN WallExistsOfTopRightOrientation( INT16 sGridNo )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN WallOrClosedDoorExistsOfTopLeftOrientation( INT16 sGridNo )
|
||||
BOOLEAN WallOrClosedDoorExistsOfTopLeftOrientation( INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
|
||||
@@ -318,7 +318,7 @@ BOOLEAN WallOrClosedDoorExistsOfTopLeftOrientation( INT16 sGridNo )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN WallOrClosedDoorExistsOfTopRightOrientation( INT16 sGridNo )
|
||||
BOOLEAN WallOrClosedDoorExistsOfTopRightOrientation( INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
|
||||
@@ -343,7 +343,7 @@ BOOLEAN WallOrClosedDoorExistsOfTopRightOrientation( INT16 sGridNo )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN OpenRightOrientedDoorWithDoorOnRightOfEdgeExists( INT16 sGridNo )
|
||||
BOOLEAN OpenRightOrientedDoorWithDoorOnRightOfEdgeExists( INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
|
||||
@@ -367,7 +367,7 @@ BOOLEAN OpenRightOrientedDoorWithDoorOnRightOfEdgeExists( INT16 sGridNo )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( INT16 sGridNo )
|
||||
BOOLEAN OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
|
||||
@@ -391,7 +391,7 @@ BOOLEAN OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( INT16 sGridNo )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
STRUCTURE * FindCuttableWireFenceAtGridNo( INT16 sGridNo )
|
||||
STRUCTURE * FindCuttableWireFenceAtGridNo( INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
|
||||
@@ -403,7 +403,7 @@ STRUCTURE * FindCuttableWireFenceAtGridNo( INT16 sGridNo )
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
BOOLEAN CutWireFence( INT16 sGridNo )
|
||||
BOOLEAN CutWireFence( INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
|
||||
@@ -421,13 +421,13 @@ BOOLEAN CutWireFence( INT16 sGridNo )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
BOOLEAN IsCuttableWireFenceAtGridNo( INT16 sGridNo )
|
||||
BOOLEAN IsCuttableWireFenceAtGridNo( INT32 sGridNo )
|
||||
{
|
||||
return( FindCuttableWireFenceAtGridNo( sGridNo ) != NULL );
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN IsRepairableStructAtGridNo( INT16 sGridNo, UINT8 *pubID )
|
||||
BOOLEAN IsRepairableStructAtGridNo( INT32 sGridNo, UINT8 *pubID )
|
||||
{
|
||||
UINT8 ubMerc;
|
||||
|
||||
@@ -459,7 +459,7 @@ BOOLEAN IsRepairableStructAtGridNo( INT16 sGridNo, UINT8 *pubID )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN IsRefuelableStructAtGridNo( INT16 sGridNo, UINT8 *pubID )
|
||||
BOOLEAN IsRefuelableStructAtGridNo( INT32 sGridNo, UINT8 *pubID )
|
||||
{
|
||||
UINT8 ubMerc;
|
||||
|
||||
@@ -483,7 +483,7 @@ BOOLEAN IsRefuelableStructAtGridNo( INT16 sGridNo, UINT8 *pubID )
|
||||
|
||||
|
||||
|
||||
BOOLEAN IsCutWireFenceAtGridNo( INT16 sGridNo )
|
||||
BOOLEAN IsCutWireFenceAtGridNo( INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
|
||||
@@ -497,11 +497,11 @@ BOOLEAN IsCutWireFenceAtGridNo( INT16 sGridNo )
|
||||
|
||||
|
||||
|
||||
INT16 FindDoorAtGridNoOrAdjacent( INT16 sGridNo )
|
||||
INT32 FindDoorAtGridNoOrAdjacent( INT32 sGridNo )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
STRUCTURE * pBaseStructure;
|
||||
INT16 sTestGridNo;
|
||||
INT32 sTestGridNo;
|
||||
|
||||
sTestGridNo = sGridNo;
|
||||
pStructure = FindStructure( sTestGridNo, STRUCTURE_ANYDOOR );
|
||||
@@ -532,7 +532,7 @@ INT16 FindDoorAtGridNoOrAdjacent( INT16 sGridNo )
|
||||
|
||||
|
||||
|
||||
BOOLEAN IsCorpseAtGridNo( INT16 sGridNo, UINT8 ubLevel )
|
||||
BOOLEAN IsCorpseAtGridNo( INT32 sGridNo, UINT8 ubLevel )
|
||||
{
|
||||
if ( GetCorpseAtGridNo( sGridNo , ubLevel ) != NULL )
|
||||
{
|
||||
@@ -545,7 +545,7 @@ BOOLEAN IsCorpseAtGridNo( INT16 sGridNo, UINT8 ubLevel )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN SetOpenableStructureToClosed( INT16 sGridNo, UINT8 ubLevel )
|
||||
BOOLEAN SetOpenableStructureToClosed( INT32 sGridNo, UINT8 ubLevel )
|
||||
{
|
||||
STRUCTURE * pStructure;
|
||||
STRUCTURE * pNewStructure;
|
||||
|
||||
+25
-25
@@ -2,50 +2,50 @@
|
||||
#define STRUCURE_WRAP_H
|
||||
|
||||
|
||||
BOOLEAN IsTreePresentAtGridno( INT16 sGridNo );
|
||||
BOOLEAN IsFencePresentAtGridno( INT16 sGridNo );
|
||||
BOOLEAN IsJumpableFencePresentAtGridno( INT16 sGridNo );
|
||||
BOOLEAN IsDoorPresentAtGridno( INT16 sGridNo );
|
||||
BOOLEAN IsTreePresentAtGridNo( INT32 sGridNo );
|
||||
BOOLEAN IsFencePresentAtGridNo( INT32 sGridNo );
|
||||
BOOLEAN IsJumpableFencePresentAtGridNo( INT32 sGridNo );
|
||||
BOOLEAN IsDoorPresentAtGridNo( INT32 sGridNo );
|
||||
|
||||
// OK, THIS FUNCTION RETURNS A LEVELNODE POINTER TO A WALL OF THE SAME ORIENTATION
|
||||
// AS WAS GIVEN. RETURNS NULL IF NONE FOUND.
|
||||
LEVELNODE *GetWallLevelNodeOfSameOrientationAtGridno( INT16 sGridNo, INT8 ubOrientation );
|
||||
LEVELNODE *GetWallLevelNodeOfSameOrientationAtGridNo( INT32 sGridNo, INT8 ubOrientation );
|
||||
|
||||
LEVELNODE *IsWallPresentAtGridno( INT16 sGridNo );
|
||||
LEVELNODE *IsWallPresentAtGridNo( INT32 sGridNo );
|
||||
|
||||
BOOLEAN IsDoorVisibleAtGridNo( INT16 sGridNo );
|
||||
BOOLEAN IsDoorVisibleAtGridNo( INT32 sGridNo );
|
||||
|
||||
BOOLEAN IsHiddenStructureVisible( INT16 sGridNo, UINT16 usIndex );
|
||||
BOOLEAN IsHiddenStructureVisible( INT32 sGridNo, UINT16 usIndex );
|
||||
|
||||
BOOLEAN DoesGridnoContainHiddenStruct( INT16 sGridNo, BOOLEAN *pfVisible );
|
||||
BOOLEAN DoesGridNoContainHiddenStruct( INT32 sGridNo, BOOLEAN *pfVisible );
|
||||
|
||||
BOOLEAN WallExistsOfTopLeftOrientation( INT16 sGridNo );
|
||||
BOOLEAN WallExistsOfTopLeftOrientation( INT32 sGridNo );
|
||||
|
||||
BOOLEAN WallExistsOfTopRightOrientation( INT16 sGridNo );
|
||||
BOOLEAN WallExistsOfTopRightOrientation( INT32 sGridNo );
|
||||
|
||||
BOOLEAN WallOrClosedDoorExistsOfTopLeftOrientation( INT16 sGridNo );
|
||||
BOOLEAN WallOrClosedDoorExistsOfTopLeftOrientation( INT32 sGridNo );
|
||||
|
||||
BOOLEAN WallOrClosedDoorExistsOfTopRightOrientation( INT16 sGridNo );
|
||||
BOOLEAN WallOrClosedDoorExistsOfTopRightOrientation( INT32 sGridNo );
|
||||
|
||||
BOOLEAN OpenRightOrientedDoorWithDoorOnRightOfEdgeExists( INT16 sGridNo );
|
||||
BOOLEAN OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( INT16 sGridNo );
|
||||
BOOLEAN OpenRightOrientedDoorWithDoorOnRightOfEdgeExists( INT32 sGridNo );
|
||||
BOOLEAN OpenLeftOrientedDoorWithDoorOnLeftOfEdgeExists( INT32 sGridNo );
|
||||
|
||||
LEVELNODE *GetWallLevelNodeAndStructOfSameOrientationAtGridno( INT16 sGridNo, INT8 ubOrientation, STRUCTURE **ppStructure );
|
||||
LEVELNODE *GetWallLevelNodeAndStructOfSameOrientationAtGridNo( INT32 sGridNo, INT8 ubOrientation, STRUCTURE **ppStructure );
|
||||
|
||||
BOOLEAN CutWireFence( INT16 sGridNo );
|
||||
BOOLEAN IsCuttableWireFenceAtGridNo( INT16 sGridNo );
|
||||
BOOLEAN IsCutWireFenceAtGridNo( INT16 sGridNo );
|
||||
BOOLEAN CutWireFence( INT32 sGridNo );
|
||||
BOOLEAN IsCuttableWireFenceAtGridNo( INT32 sGridNo );
|
||||
BOOLEAN IsCutWireFenceAtGridNo( INT32 sGridNo );
|
||||
|
||||
BOOLEAN IsRepairableStructAtGridNo( INT16 sGridNo, UINT8 *pubID );
|
||||
BOOLEAN IsRefuelableStructAtGridNo( INT16 sGridNo, UINT8 *pubID );
|
||||
BOOLEAN IsRepairableStructAtGridNo( INT32 sGridNo, UINT8 *pubID );
|
||||
BOOLEAN IsRefuelableStructAtGridNo( INT32 sGridNo, UINT8 *pubID );
|
||||
|
||||
|
||||
BOOLEAN IsRoofPresentAtGridno( INT16 sGridNo );
|
||||
BOOLEAN IsRoofPresentAtGridNo( INT32 sGridNo );
|
||||
|
||||
INT16 FindDoorAtGridNoOrAdjacent( INT16 sGridNo );
|
||||
INT32 FindDoorAtGridNoOrAdjacent( INT32 sGridNo );
|
||||
|
||||
BOOLEAN IsCorpseAtGridNo( INT16 sGridNo, UINT8 ubLevel );
|
||||
BOOLEAN IsCorpseAtGridNo( INT32 sGridNo, UINT8 ubLevel );
|
||||
|
||||
BOOLEAN SetOpenableStructureToClosed( INT16 sGridNo, UINT8 ubLevel );
|
||||
BOOLEAN SetOpenableStructureToClosed( INT32 sGridNo, UINT8 ubLevel );
|
||||
|
||||
#endif
|
||||
|
||||
+34
-43
@@ -49,7 +49,6 @@
|
||||
#endif
|
||||
|
||||
#include "VFS/vfs.h"
|
||||
|
||||
BOOLEAN gfWasInMeanwhile = FALSE;
|
||||
|
||||
|
||||
@@ -64,31 +63,20 @@ class SOLDIERTYPE;
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
// This struct is used to save info from the NPCQuoteInfo struct that can change.
|
||||
typedef struct
|
||||
//dnl ch46 031009
|
||||
// It's used for save info from the NPCQuoteInfo class that can change.
|
||||
class TempNPCQuoteInfoSave
|
||||
{
|
||||
UINT16 usFlags;
|
||||
|
||||
union
|
||||
{
|
||||
INT16 sRequiredItem; // item NPC must have to say quote
|
||||
INT16 sRequiredGridno; // location for NPC req'd to say quote
|
||||
};
|
||||
|
||||
UINT16 usGoToGridno;
|
||||
|
||||
} TempNPCQuoteInfoSave;
|
||||
|
||||
|
||||
public:
|
||||
UINT16 usFlags;
|
||||
INT16 sRequiredItem;
|
||||
INT32 sRequiredGridNo;
|
||||
INT32 usGoToGridNo;
|
||||
};
|
||||
|
||||
#define NPC_TEMP_QUOTE_FILE "Temp\\NpcQuote.tmp"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Global Variables
|
||||
@@ -824,7 +812,7 @@ BOOLEAN GetNumberOfWorldItemsFromTempItemFile( INT16 sMapX, INT16 sMapY, INT8 bM
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN AddItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT16 sGridNo, UINT32 uiNumberOfItemsToAdd, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, BOOLEAN fReplaceEntireFile )
|
||||
BOOLEAN AddItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT32 sGridNo, UINT32 uiNumberOfItemsToAdd, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, BOOLEAN fReplaceEntireFile )
|
||||
{
|
||||
UINT32 uiNumberOfItems=0;
|
||||
WORLDITEM *pWorldItems;
|
||||
@@ -909,8 +897,8 @@ BOOLEAN AddItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT16 sG
|
||||
pWorldItems[ cnt ].bRenderZHeightAboveLevel = bRenderZHeightAboveLevel;
|
||||
|
||||
|
||||
//Check
|
||||
if( sGridNo == NOWHERE && !( pWorldItems[ cnt ].usFlags & WORLD_ITEM_GRIDNO_NOT_SET_USE_ENTRY_POINT ) )
|
||||
//Check
|
||||
if(TileIsOutOfBounds(sGridNo) && !( pWorldItems[ cnt ].usFlags & WORLD_ITEM_GRIDNO_NOT_SET_USE_ENTRY_POINT ) )
|
||||
{
|
||||
pWorldItems[ cnt ].usFlags |= WORLD_ITEM_GRIDNO_NOT_SET_USE_ENTRY_POINT;
|
||||
|
||||
@@ -1054,8 +1042,8 @@ void HandleAllReachAbleItemsInTheSector( INT16 sSectorX, INT16 sSectorY, INT8 bS
|
||||
UINT32 uiCounter = 0;
|
||||
UINT8 ubDir, ubMovementCost;
|
||||
BOOLEAN fReachable = FALSE;
|
||||
INT16 sGridNo = NOWHERE, sGridNo2 = NOWHERE;
|
||||
INT16 sNewLoc;
|
||||
INT32 sGridNo = NOWHERE, sGridNo2 = NOWHERE;
|
||||
INT32 sNewLoc;
|
||||
|
||||
SOLDIERTYPE * pSoldier;
|
||||
BOOLEAN fSecondary = FALSE;
|
||||
@@ -1413,7 +1401,7 @@ BOOLEAN LoadAndAddWorldItemsFromTempFile( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
|
||||
UINT32 uiNumberOfItems=0;
|
||||
WORLDITEM *pWorldItems = NULL;
|
||||
UINT32 cnt;
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
|
||||
//Get the number of items from the file
|
||||
if( !GetNumberOfWorldItemsFromTempItemFile( sMapX, sMapY, bMapZ, &uiNumberOfItems, TRUE ) )
|
||||
@@ -1485,14 +1473,15 @@ BOOLEAN LoadAndAddWorldItemsFromTempFile( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
|
||||
//Check the flags to see if we have to find a gridno to place the items at
|
||||
if( pWorldItems[cnt].usFlags & WOLRD_ITEM_FIND_SWEETSPOT_FROM_GRIDNO )
|
||||
{
|
||||
sNewGridNo = FindNearestAvailableGridNoForItem( pWorldItems[cnt].sGridNo, 5 );
|
||||
if( sNewGridNo == NOWHERE )
|
||||
sNewGridNo = FindNearestAvailableGridNoForItem( pWorldItems[cnt].sGridNo, 5 );
|
||||
|
||||
if(TileIsOutOfBounds(sNewGridNo))
|
||||
sNewGridNo = FindNearestAvailableGridNoForItem( pWorldItems[cnt].sGridNo, 15 );
|
||||
|
||||
if ( sNewGridNo != NOWHERE )
|
||||
{
|
||||
pWorldItems[cnt].sGridNo = sNewGridNo;
|
||||
}
|
||||
|
||||
if (!TileIsOutOfBounds(sNewGridNo))
|
||||
{
|
||||
pWorldItems[cnt].sGridNo = sNewGridNo;
|
||||
}
|
||||
}
|
||||
|
||||
//If the item has an invalid gridno, use the maps entry point
|
||||
@@ -1756,7 +1745,8 @@ BOOLEAN LoadRottingCorpsesFromTempCorpseFile( INT16 sMapX, INT16 sMapY, INT8 bMa
|
||||
if( def.usFlags & ROTTING_CORPSE_FIND_SWEETSPOT_FROM_GRIDNO )
|
||||
{
|
||||
def.sGridNo = FindNearestAvailableGridNoForCorpse( &def, 5 );
|
||||
if( def.sGridNo == NOWHERE )
|
||||
|
||||
if(TileIsOutOfBounds(def.sGridNo))
|
||||
def.sGridNo = FindNearestAvailableGridNoForCorpse( &def, 15 );
|
||||
|
||||
// ATE: Here we still could have a bad location, but send in NOWHERE
|
||||
@@ -1833,7 +1823,7 @@ BOOLEAN LoadRottingCorpsesFromTempCorpseFile( INT16 sMapX, INT16 sMapY, INT8 bMa
|
||||
// Rewritten to load the temp file once, update with the list, and then write it. This was getting insane as items piled up in sectors.
|
||||
// A few dozen read, update, writes was okay but a few hundred is pushing it.
|
||||
|
||||
BOOLEAN AddWorldItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT16 sGridNo, UINT32 uiNumberOfItemsToAdd, WORLDITEM *pWorldItem, BOOLEAN fOverWrite )
|
||||
BOOLEAN AddWorldItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT32 sGridNo, UINT32 uiNumberOfItemsToAdd, WORLDITEM *pWorldItem, BOOLEAN fOverWrite )
|
||||
{
|
||||
UINT32 uiLoop;
|
||||
UINT32 uiLastItemPos;
|
||||
@@ -1917,8 +1907,8 @@ BOOLEAN AddWorldItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT
|
||||
pWorldItems[ uiLastItemPos ].bRenderZHeightAboveLevel = pWorldItem[ uiLoop ].bRenderZHeightAboveLevel;
|
||||
|
||||
|
||||
//Check
|
||||
if( pWorldItem[ uiLoop ].sGridNo == NOWHERE && !( pWorldItems[ uiLastItemPos ].usFlags & WORLD_ITEM_GRIDNO_NOT_SET_USE_ENTRY_POINT ) )
|
||||
//Check
|
||||
if(TileIsOutOfBounds(pWorldItem[ uiLoop ].sGridNo) && !( pWorldItems[ uiLastItemPos ].usFlags & WORLD_ITEM_GRIDNO_NOT_SET_USE_ENTRY_POINT ) )
|
||||
{
|
||||
pWorldItems[ uiLastItemPos ].usFlags |= WORLD_ITEM_GRIDNO_NOT_SET_USE_ENTRY_POINT;
|
||||
|
||||
@@ -2125,7 +2115,8 @@ void LoadNPCInformationFromProfileStruct()
|
||||
}
|
||||
|
||||
//If the NPC's gridno is not nowhere, set him to that position
|
||||
if( gMercProfiles[ cnt ].sGridNo != NOWHERE )
|
||||
//if( !TileIsOutOfBounds(gMercProfiles[ cnt ].sGridNo) )
|
||||
if(!TileIsOutOfBounds(gMercProfiles[ cnt ].sGridNo))
|
||||
{
|
||||
if( !(gTacticalStatus.uiFlags & LOADING_SAVED_GAME ) )
|
||||
{
|
||||
@@ -2320,7 +2311,7 @@ BOOLEAN InitTempNpcQuoteInfoForNPCFromTempFile()
|
||||
{
|
||||
TempNpcQuote[ ubCnt ].usFlags = gpNPCQuoteInfoArray[ usCnt1 ][ ubCnt ].fFlags;
|
||||
TempNpcQuote[ ubCnt ].sRequiredItem = gpNPCQuoteInfoArray[ usCnt1 ][ ubCnt ].sRequiredItem;
|
||||
TempNpcQuote[ ubCnt ].usGoToGridno = gpNPCQuoteInfoArray[ usCnt1 ][ ubCnt ].usGoToGridno;
|
||||
TempNpcQuote[ ubCnt ].usGoToGridNo = gpNPCQuoteInfoArray[ usCnt1 ][ ubCnt ].usGoToGridNo;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2366,7 +2357,7 @@ BOOLEAN SaveTempNpcQuoteInfoForNPCToTempFile( UINT8 ubNpcId )
|
||||
{
|
||||
TempNpcQuote[ ubCnt ].usFlags = gpNPCQuoteInfoArray[ ubNpcId ][ ubCnt ].fFlags;
|
||||
TempNpcQuote[ ubCnt ].sRequiredItem = gpNPCQuoteInfoArray[ ubNpcId ][ ubCnt ].sRequiredItem;
|
||||
TempNpcQuote[ ubCnt ].usGoToGridno = gpNPCQuoteInfoArray[ ubNpcId ][ ubCnt ].usGoToGridno;
|
||||
TempNpcQuote[ ubCnt ].usGoToGridNo = gpNPCQuoteInfoArray[ ubNpcId ][ ubCnt ].usGoToGridNo;
|
||||
}
|
||||
|
||||
//Seek to the correct spot in the file
|
||||
@@ -2441,7 +2432,7 @@ BOOLEAN LoadTempNpcQuoteInfoForNPCFromTempFile( UINT8 ubNpcId )
|
||||
{
|
||||
gpNPCQuoteInfoArray[ ubNpcId ][ ubCnt ].fFlags = TempNpcQuote[ ubCnt ].usFlags;
|
||||
gpNPCQuoteInfoArray[ ubNpcId ][ ubCnt ].sRequiredItem = TempNpcQuote[ ubCnt ].sRequiredItem;
|
||||
gpNPCQuoteInfoArray[ ubNpcId ][ ubCnt ].usGoToGridno = TempNpcQuote[ ubCnt ].usGoToGridno;
|
||||
gpNPCQuoteInfoArray[ ubNpcId ][ ubCnt ].usGoToGridNo = TempNpcQuote[ ubCnt ].usGoToGridNo;
|
||||
}
|
||||
|
||||
FileClose( hFile );
|
||||
@@ -2726,7 +2717,7 @@ BOOLEAN GetSectorFlagStatus( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, UINT32 uiFla
|
||||
|
||||
|
||||
|
||||
BOOLEAN AddDeadSoldierToUnLoadedSector( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiFlags )
|
||||
BOOLEAN AddDeadSoldierToUnLoadedSector( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiFlags )
|
||||
{
|
||||
UINT32 uiNumberOfItems;
|
||||
WORLDITEM *pWorldItems=NULL;
|
||||
|
||||
@@ -54,10 +54,10 @@ BOOLEAN UpdateWorldItemsTempFile( INT16 sMapX, INT16 sMapY, INT8 bMapZ );
|
||||
|
||||
// Adds an array of Item Objects to the specified location on a unloaded map.
|
||||
// If you want to overwrite all the items in the array set fReplaceEntireFile to TRUE.
|
||||
BOOLEAN AddItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT16 sGridNo, UINT32 uiNumberOfItems, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, BOOLEAN fReplaceEntireFile );
|
||||
BOOLEAN AddItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT32 sGridNo, UINT32 uiNumberOfItems, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, BOOLEAN fReplaceEntireFile );
|
||||
|
||||
|
||||
BOOLEAN AddWorldItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT16 sGridNo, UINT32 uiNumberOfItems, WORLDITEM *pWorldItem, BOOLEAN fOverWrite );
|
||||
BOOLEAN AddWorldItemsToUnLoadedSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, INT32 sGridNo, UINT32 uiNumberOfItems, WORLDITEM *pWorldItem, BOOLEAN fOverWrite );
|
||||
|
||||
//Deletes all the Temp files in the Maps\Temp directory
|
||||
BOOLEAN InitTacticalSave( BOOLEAN fCreateTempDir );
|
||||
@@ -87,7 +87,7 @@ BOOLEAN AddRottingCorpseToUnloadedSectorsRottingCorpseFile( INT16 sMapX, INT16 s
|
||||
//The gridno if you are passing in either of the flags ADD_DEAD_SOLDIER_USE_GRIDNO, or the ADD_DEAD_SOLDIER_TO_SWEETSPOT
|
||||
//
|
||||
// This function DOES NOT remove the soldier from the soldier struct. YOU must do it.
|
||||
BOOLEAN AddDeadSoldierToUnLoadedSector( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiFlags );
|
||||
BOOLEAN AddDeadSoldierToUnLoadedSector( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiFlags );
|
||||
|
||||
|
||||
BOOLEAN GetSectorFlagStatus( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, UINT32 uiFlagToSet );
|
||||
|
||||
-15296
File diff suppressed because it is too large
Load Diff
@@ -1,958 +0,0 @@
|
||||
# Microsoft Developer Studio Project File - Name="Tactical" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||
|
||||
CFG=Tactical - Win32 Demo Bounds Checker
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "Tactical.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "Tactical.mak" CFG="Tactical - Win32 Demo Bounds Checker"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "Tactical - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "Tactical - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "Tactical - Win32 Release with Debug Info" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "Tactical - Win32 Bounds Checker" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "Tactical - Win32 Debug Demo" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "Tactical - Win32 Release Demo" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "Tactical - Win32 Demo Release with Debug Info" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "Tactical - Win32 Demo Bounds Checker" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""$/Jagged Alliance 2/Development/Programming/Jagged Alliance 2/Build", AVAAAAAA"
|
||||
# PROP Scc_LocalPath "..\..\..\ja2\build"
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "Tactical - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir ".\Release"
|
||||
# PROP BASE Intermediate_Dir ".\Release"
|
||||
# PROP BASE Target_Dir "."
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir "."
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
|
||||
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /FR /YX"Tactical All.h" /FD /c
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir ".\Debug"
|
||||
# PROP BASE Intermediate_Dir ".\Debug"
|
||||
# PROP BASE Target_Dir "."
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir "."
|
||||
# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
|
||||
# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "_VTUNE_PROFILING" /D "XML_STATIC" /D "CINTERFACE" /FR /YX"Tactical All.h" /FD /c
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release with Debug Info"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release with Debug Info"
|
||||
# PROP BASE Intermediate_Dir "Release with Debug Info"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release with Debug"
|
||||
# PROP Intermediate_Dir "Release with Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "\ja2\Build\TacticalAI" /I "\Standard Gaming Platform" /I "\ja2\Build" /I "\ja2\Build\TileEngine" /I "\ja2\Build\Utils" /I "\ja2\build\Communications" /I "\ja2\build\Editor" /I "\ja2\build\strategic" /I "\ja2\build\Laptop" /D "NDEBUG" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /FR /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W4 /GX /Zi /O2 /I "..\TacticalAI" /I "..\Standard Gaming Platform" /I "..\\" /I "..\TileEngine" /I "..\Utils" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "NDEBUG" /D "RELEASE_WITH_DEBUG_INFO" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "PRECOMPILEDHEADERS" /D "_VTUNE_PROFILING" /D "XML_STATIC" /D "CINTERFACE" /FR /YX"Tactical All.h" /FD /c
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Bounds Checker"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Tactica0"
|
||||
# PROP BASE Intermediate_Dir "Tactica0"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Bounds Checker"
|
||||
# PROP Intermediate_Dir "Bounds Checker"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MTd /W3 /GX /Z7 /Od /I "\ja2\build\TacticalAI" /I "\Standard Gaming Platform" /I "\ja2\Build" /I "\ja2\Build\TileEngine" /I "\ja2\Build\Utils" /I "\ja2\build\Communications" /I "\ja2\build\Editor" /I "\ja2\build\strategic" /I "\ja2\build\Laptop" /I "\ja2\build" /D "_DEBUG" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /FR /YX /FD /c
|
||||
# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "\ja2\build\TacticalAI" /I "\Standard Gaming Platform" /I "\ja2\Build" /I "\ja2\Build\TileEngine" /I "\ja2\Build\Utils" /I "\ja2\build\Communications" /I "\ja2\build\Editor" /I "\ja2\build\strategic" /I "\ja2\build\Laptop" /I "\ja2\build" /D "_DEBUG" /D "BOUNDS_CHECKER" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "PRECOMPILEDHEADERS" /D "_VTUNE_PROFILING" /FR /YX"Tactical All.h" /FD /c
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug Demo"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Tactical"
|
||||
# PROP BASE Intermediate_Dir "Tactical"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug Demo"
|
||||
# PROP Intermediate_Dir "Debug Demo"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MTd /W3 /GX /Z7 /Od /I "\ja2\build\TacticalAI" /I "\Standard Gaming Platform" /I "\ja2\Build" /I "\ja2\Build\TileEngine" /I "\ja2\Build\Utils" /I "\ja2\build\Communications" /I "\ja2\build\Editor" /I "\ja2\build\strategic" /I "\ja2\build\Laptop" /I "\ja2\build" /D "_DEBUG" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /FR /YX /FD /c
|
||||
# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "\ja2\build\TacticalAI" /I "\Standard Gaming Platform" /I "\ja2\Build" /I "\ja2\Build\TileEngine" /I "\ja2\Build\Utils" /I "\ja2\build\Communications" /I "\ja2\build\Editor" /I "\ja2\build\strategic" /I "\ja2\build\Laptop" /I "\ja2\build" /D "_DEBUG" /D "JA2DEMO" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "PRECOMPILEDHEADERS" /FR /YX"Tactical All.h" /FD /c
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release Demo"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Tactica1"
|
||||
# PROP BASE Intermediate_Dir "Tactica1"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release Demo"
|
||||
# PROP Intermediate_Dir "Release Demo"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MT /W4 /GX /Zi /O2 /I "\ja2\Build\TacticalAI" /I "\Standard Gaming Platform" /I "\ja2\Build" /I "\ja2\Build\TileEngine" /I "\ja2\Build\Utils" /I "\ja2\build\Communications" /I "\ja2\build\Editor" /I "\ja2\build\strategic" /I "\ja2\build\Laptop" /D "NDEBUG" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "RELEASE_WITH_DEBUG_INFO" /FR /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W4 /GX /Zi /O2 /I "\ja2\Build\TacticalAI" /I "\Standard Gaming Platform" /I "\ja2\Build" /I "\ja2\Build\TileEngine" /I "\ja2\Build\Utils" /I "\ja2\build\Communications" /I "\ja2\build\Editor" /I "\ja2\build\strategic" /I "\ja2\build\Laptop" /D "RELEASE_WITH_DEBUG_INFO" /D "NDEBUG" /D "JA2DEMO" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "PRECOMPILEDHEADERS" /FR /YX"Tactical All.h" /FD /c
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Release with Debug Info"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Tactica2"
|
||||
# PROP BASE Intermediate_Dir "Tactica2"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Demo Release with Debug"
|
||||
# PROP Intermediate_Dir "Demo Release with Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MT /W4 /GX /Zi /O2 /I "\ja2\Build\TacticalAI" /I "\Standard Gaming Platform" /I "\ja2\Build" /I "\ja2\Build\TileEngine" /I "\ja2\Build\Utils" /I "\ja2\build\Communications" /I "\ja2\build\Editor" /I "\ja2\build\strategic" /I "\ja2\build\Laptop" /D "NDEBUG" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "RELEASE_WITH_DEBUG_INFO" /FR /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W4 /GX /Zi /O2 /I "..\TacticalAI" /I "..\Standard Gaming Platform" /I "..\\" /I "..\TileEngine" /I "..\Utils" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "RELEASE_WITH_DEBUG_INFO" /D "NDEBUG" /D "JA2DEMO" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "PRECOMPILEDHEADERS" /D "XML_STATIC" /D "CINTERFACE" /FR /YX"Tactical All.h" /FD /c
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Bounds Checker"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Tactica3"
|
||||
# PROP BASE Intermediate_Dir "Tactica3"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Demo Bounds Checker"
|
||||
# PROP Intermediate_Dir "Demo Bounds Checker"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MTd /W3 /GX /Z7 /Od /I "\ja2\build\TacticalAI" /I "\Standard Gaming Platform" /I "\ja2\Build" /I "\ja2\Build\TileEngine" /I "\ja2\Build\Utils" /I "\ja2\build\Communications" /I "\ja2\build\Editor" /I "\ja2\build\strategic" /I "\ja2\build\Laptop" /I "\ja2\build" /D "CALLBACKTIMER" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "BOUNDS_CHECKER" /FR /YX /FD /c
|
||||
# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "\ja2\build\TacticalAI" /I "\Standard Gaming Platform" /I "\ja2\Build" /I "\ja2\Build\TileEngine" /I "\ja2\Build\Utils" /I "\ja2\build\Communications" /I "\ja2\build\Editor" /I "\ja2\build\strategic" /I "\ja2\build\Laptop" /I "\ja2\build" /D "_DEBUG" /D "BOUNDS_CHECKER" /D "JA2DEMO" /D "PRECOMPILEDHEADERS" /D "CALLBACKTIMER" /D "WIN32" /D "_WINDOWS" /D "JA2" /FR /YX"Tactical All.h" /FD /c
|
||||
# ADD BASE RSC /l 0x409
|
||||
# ADD RSC /l 0x409
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "Tactical - Win32 Release"
|
||||
# Name "Tactical - Win32 Debug"
|
||||
# Name "Tactical - Win32 Release with Debug Info"
|
||||
# Name "Tactical - Win32 Bounds Checker"
|
||||
# Name "Tactical - Win32 Debug Demo"
|
||||
# Name "Tactical - Win32 Release Demo"
|
||||
# Name "Tactical - Win32 Demo Release with Debug Info"
|
||||
# Name "Tactical - Win32 Demo Bounds Checker"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Air Raid.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Animation Cache.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Animation Control.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Animation Data.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Arms Dealer Init.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ArmsDealerInvInit.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Auto Bandage.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Boxing.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\bullets.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Campaign.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Civ Quotes.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Dialogue Control.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\DisplayCover.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Drugs And Alcohol.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\End Game.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Enemy Soldier Save.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\EnemyItemDrops.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Faces.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\fov.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\GAP.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Handle Doors.cpp"
|
||||
|
||||
!IF "$(CFG)" == "Tactical - Win32 Release"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release with Debug Info"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Bounds Checker"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Release with Debug Info"
|
||||
|
||||
# ADD CPP /Z7 /Od
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Bounds Checker"
|
||||
|
||||
!ENDIF
|
||||
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Handle Items.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Handle UI Plan.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Handle UI.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Interface Control.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Interface Cursors.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Interface Dialogue.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Interface Items.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Interface Panels.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Interface Utils.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Interface.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Inventory Choosing.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Items.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Keys.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\LOS.cpp
|
||||
|
||||
!IF "$(CFG)" == "Tactical - Win32 Release"
|
||||
|
||||
# ADD CPP /Od
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release with Debug Info"
|
||||
|
||||
# ADD BASE CPP /Od
|
||||
# ADD CPP /Od
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Bounds Checker"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release Demo"
|
||||
|
||||
# ADD BASE CPP /Od
|
||||
# ADD CPP /Od
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Release with Debug Info"
|
||||
|
||||
# ADD BASE CPP /Od
|
||||
# ADD CPP /Od
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Bounds Checker"
|
||||
|
||||
!ENDIF
|
||||
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Map Information.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Merc Entering.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Merc Hiring.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Militia Control.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Morale.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\opplist.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Overhead.cpp
|
||||
|
||||
!IF "$(CFG)" == "Tactical - Win32 Release"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release with Debug Info"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Bounds Checker"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Release with Debug Info"
|
||||
|
||||
# ADD CPP /Z7 /O2
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Bounds Checker"
|
||||
|
||||
!ENDIF
|
||||
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\PATHAI.cpp
|
||||
|
||||
!IF "$(CFG)" == "Tactical - Win32 Release"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release with Debug Info"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Bounds Checker"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Release with Debug Info"
|
||||
|
||||
# ADD CPP /Z7 /Od
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Bounds Checker"
|
||||
|
||||
!ENDIF
|
||||
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Points.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\QARRAY.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Rain.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Real Time Input.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Rotting Corpses.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ShopKeeper Interface.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\SkillCheck.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Add.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Ani.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Control.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Create.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Find.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Init List.cpp"
|
||||
|
||||
!IF "$(CFG)" == "Tactical - Win32 Release"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release with Debug Info"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Bounds Checker"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Release with Debug Info"
|
||||
|
||||
# ADD CPP /Z7 /O2
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Bounds Checker"
|
||||
|
||||
!ENDIF
|
||||
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Profile.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Tile.cpp"
|
||||
|
||||
!IF "$(CFG)" == "Tactical - Win32 Release"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release with Debug Info"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Bounds Checker"
|
||||
|
||||
# ADD CPP /Od
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Debug Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Release Demo"
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Release with Debug Info"
|
||||
|
||||
# ADD CPP /Z7 /Od
|
||||
|
||||
!ELSEIF "$(CFG)" == "Tactical - Win32 Demo Bounds Checker"
|
||||
|
||||
# ADD BASE CPP /Od
|
||||
# ADD CPP /Od
|
||||
|
||||
!ENDIF
|
||||
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\SoldierTooltips.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Spread Burst.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Squads.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Strategic Exit GUI.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Structure Wrap.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Tactical Save.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Tactical Turns.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\TeamTurns.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Turn Based Input.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\UI Cursors.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Vehicles.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Weapons.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\World Items.cpp"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_AmmoStrings.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_AmmoTypes.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_Armour.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_AttachmentInfo.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_Attachments.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_BurstSounds.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_ComboMergeInfo.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_CompatibleFaceItems.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_EnemyAmmoDrops.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_EnemyArmourDrops.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_EnemyExplosiveDrops.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_EnemyItemChoice.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_EnemyMiscDrops.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_EnemyWeaponChoice.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_EnemyWeaponDrops.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_Explosive.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_IMPItemChoices.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_IncompatibleAttachments.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_Launchable.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_Magazine.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_Merge.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_Sounds.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML_TonyInventory.cpp
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\aim.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\animation cache.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Animation Control.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Animation Data.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Arms Dealer Init.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Boxing.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Campaign.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Enemy Soldier Save.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Handle Items.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Handle UI.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Interface Cursors.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Interface Items.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\interface panels.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Interface.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Inventory Choosing.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Item Types.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Items.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Keys.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\los.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Map Information.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Merc Hiring.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Militia Control.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Morale.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\opplist.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\overhead types.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Overhead.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\PATHAI.H
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\points.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ShopKeeper Interface.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ShopKeeper Quotes.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\SkillCheck.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Add.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\soldier ani.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Control.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Create.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Init List.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier macros.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\soldier profile type.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Soldier Profile.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Spread burst.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Squads.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Strategic Exit GUI.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Tactical All.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\Tactical Save.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\TeamTurns.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Vehicles.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\weapons.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\World Items.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\XML.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -267,6 +267,68 @@
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release_WithDebugInfo|Win32"
|
||||
OutputDirectory="$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
InheritedPropertySheets="..\ja2_2005Express.vsprops"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/D "_CRT_SECURE_NO_DEPRECATE""
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\Multiplayer"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;"
|
||||
RuntimeLibrary="0"
|
||||
RuntimeTypeInfo="false"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
@@ -412,6 +474,10 @@
|
||||
RelativePath=".\Interface.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\InterfaceItemImages.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Inventory Choosing.h"
|
||||
>
|
||||
@@ -738,6 +804,10 @@
|
||||
RelativePath=".\Interface.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\InterfaceItemImages.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Inventory Choosing.cpp"
|
||||
>
|
||||
|
||||
@@ -268,6 +268,70 @@
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release_WithDebugInfo|Win32"
|
||||
OutputDirectory="..\lib\VS2008\$(ConfigurationName)"
|
||||
IntermediateDirectory="..\build\VS2008\$(ProjectName)_$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
InheritedPropertySheets="..\ja2_VS2008.vsprops"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
EnableIntrinsicFunctions="true"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||
StringPooling="true"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="false"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
@@ -415,6 +479,10 @@
|
||||
RelativePath="Interface.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\InterfaceItemImages.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Inventory Choosing.h"
|
||||
>
|
||||
@@ -739,6 +807,10 @@
|
||||
RelativePath="Interface.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\InterfaceItemImages.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Inventory Choosing.cpp"
|
||||
>
|
||||
|
||||
+24
-25
@@ -344,7 +344,6 @@ void EndTurn( UINT8 ubNextTeam )
|
||||
gTacticalStatus.ubCurrentTeam = ubNextTeam;
|
||||
|
||||
if(is_server || !is_client) BeginTeamTurn( gTacticalStatus.ubCurrentTeam );
|
||||
|
||||
// HEADROCK HAM 3.2: Experimental fix to force reinforcements enter battle with 0 APs.
|
||||
if (gGameExternalOptions.ubReinforcementsFirstTurnFreeze == 1 || gGameExternalOptions.ubReinforcementsFirstTurnFreeze == 2)
|
||||
{
|
||||
@@ -1796,14 +1795,13 @@ INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT8 ubOpponentID, BOOLEAN f
|
||||
#ifdef DEBUG_INTERRUPTS
|
||||
DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("Calculating int pts for %d vs %d, number is %d", pSoldier->ubID, ubOpponentID, iPoints ) );
|
||||
#endif
|
||||
if(is_networked)
|
||||
{
|
||||
SOLDIERTYPE *pOpp = &Menptr[ubOpponentID];
|
||||
|
||||
if(is_networked)
|
||||
{
|
||||
SOLDIERTYPE *pOpp = &Menptr[ubOpponentID];
|
||||
#ifdef JA2BETAVERSION
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_MPSYSTEM, L"Interrupt: '%s' vs '%s' = %d points.",pSoldier->name,pOpp->name, iPoints );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"CalcInterruptDuelPts done");
|
||||
return( (INT8)iPoints );
|
||||
}
|
||||
@@ -2071,15 +2069,21 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter
|
||||
nubFirstInterrupter = LATEST_INTERRUPT_GUY;
|
||||
npSoldier = MercPtrs[nubFirstInterrupter];
|
||||
nbTeam = npSoldier->bTeam;
|
||||
|
||||
|
||||
|
||||
// INTERRUPT is calculated on the server
|
||||
if ((nbTeam > 0) && (nbTeam <6 ) && is_server) //is for AI and are server
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"interrupt for AI team");
|
||||
|
||||
// Only display the top message if we (the server) got interrupted
|
||||
if (pSoldier->bTeam == 0)
|
||||
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ nbTeam ] );
|
||||
|
||||
send_interrupt( npSoldier );
|
||||
StartInterrupt();
|
||||
|
||||
}
|
||||
// INTERRUPT is calculated on the server
|
||||
else if(is_server && gTacticalStatus.ubCurrentTeam == 1)// against ai
|
||||
{
|
||||
|
||||
@@ -2090,27 +2094,22 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter
|
||||
//requestAIint( npSoldier );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"AI is interrupted");
|
||||
}
|
||||
// INTERRUPT is calculated on the pure client
|
||||
else if(gTacticalStatus.ubCurrentTeam == 0)//its our turn (we are moving)
|
||||
{
|
||||
//StartInterrupt();
|
||||
send_interrupt( npSoldier ); //
|
||||
// Only send interrupt if we (the client) got interrupted
|
||||
send_interrupt( npSoldier );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"interrupt for another team");
|
||||
{
|
||||
// ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupted" );
|
||||
//stop moving merc who was interrupted and init UI bar
|
||||
SOLDIERTYPE* pMerc = MercPtrs[ gusSelectedSoldier ];
|
||||
//AdjustNoAPToFinishMove( pMerc, TRUE );
|
||||
pMerc->HaultSoldierFromSighting(TRUE);
|
||||
//pMerc->fTurningFromPronePosition = FALSE;// hmmm ??
|
||||
FreezeInterfaceForEnemyTurn();
|
||||
InitEnemyUIBar( 0, 0 );
|
||||
fInterfacePanelDirty = DIRTYLEVEL2;
|
||||
AddTopMessage( COMPUTER_TURN_MESSAGE, TeamTurnString[ nbTeam ] );
|
||||
gTacticalStatus.fInterruptOccurred = TRUE;
|
||||
|
||||
}
|
||||
//ClearIntList();
|
||||
|
||||
SOLDIERTYPE* pMerc = MercPtrs[ gusSelectedSoldier ];
|
||||
//AdjustNoAPToFinishMove( pMerc, TRUE );
|
||||
pMerc->HaultSoldierFromSighting(TRUE);
|
||||
//pMerc->fTurningFromPronePosition = FALSE;// hmmm ??
|
||||
FreezeInterfaceForEnemyTurn();
|
||||
InitEnemyUIBar( 0, 0 );
|
||||
fInterfacePanelDirty = DIRTYLEVEL2;
|
||||
AddTopMessage( COMPUTER_INTERRUPT_MESSAGE, TeamTurnString[ nbTeam ] );
|
||||
gTacticalStatus.fInterruptOccurred = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+107
-108
@@ -131,7 +131,7 @@ extern UINT32 guiCurrentEvent;
|
||||
extern UINT8 gubIntTileCheckFlags;
|
||||
extern UINT32 guiCurrentUICursor;
|
||||
extern SOLDIERTYPE *gpSMCurrentMerc;
|
||||
extern INT16 gsOverItemsGridNo;
|
||||
extern INT32 gsOverItemsGridNo;
|
||||
extern INT16 gsOverItemsLevel;
|
||||
extern BOOLEAN gfUIShowExitSouth;
|
||||
|
||||
@@ -182,7 +182,7 @@ SOLDIERTYPE *gpExchangeSoldier1;
|
||||
SOLDIERTYPE *gpExchangeSoldier2;
|
||||
|
||||
|
||||
BOOLEAN ConfirmActionCancel( INT16 sMapPos, UINT16 usOldMapPos );
|
||||
BOOLEAN ConfirmActionCancel( INT32 usMapPos, INT32 usOldMapPos );
|
||||
|
||||
BOOLEAN gfNextFireJam = FALSE;
|
||||
|
||||
@@ -258,16 +258,16 @@ void GetTBMouseButtonInput( UINT32 *puiNewEvent )
|
||||
void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
static BOOLEAN fClickHoldIntercepted = FALSE;
|
||||
static BOOLEAN fCanCheckForSpeechAdvance = FALSE;
|
||||
static INT16 sMoveClickGridNo = 0;
|
||||
static INT32 sMoveClickGridNo = 0;
|
||||
|
||||
|
||||
// LEFT MOUSE BUTTON
|
||||
if ( gViewportRegion.uiFlags & MSYS_MOUSE_IN_AREA )
|
||||
{
|
||||
if (!GetMouseMapPos( &sMapPos ) && !gfUIShowExitSouth )
|
||||
if (!GetMouseMapPos( &usMapPos ) && !gfUIShowExitSouth )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -286,7 +286,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
|
||||
if( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
pSoldier->sStartGridNo = sMapPos;
|
||||
pSoldier->sStartGridNo = usMapPos;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -330,7 +330,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
{
|
||||
if ( InUIPlanMode( ) )
|
||||
{
|
||||
AddUIPlan( sMapPos, UIPLAN_ACTION_MOVETO );
|
||||
AddUIPlan( usMapPos, UIPLAN_ACTION_MOVETO );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -342,7 +342,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
|
||||
GetSoldier( &pSoldier, gusSelectedSoldier );
|
||||
|
||||
bReturnVal = HandleMoveModeInteractiveClick( sMapPos, puiNewEvent );
|
||||
bReturnVal = HandleMoveModeInteractiveClick( usMapPos, puiNewEvent );
|
||||
|
||||
// All's OK for interactive tile?
|
||||
if ( bReturnVal == -2 )
|
||||
@@ -369,7 +369,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
{
|
||||
BOOLEAN fResult;
|
||||
|
||||
if ( ( fResult = UIOKMoveDestination( MercPtrs[ gusSelectedSoldier ], sMapPos ) ) == 1 )
|
||||
if ( ( fResult = UIOKMoveDestination( MercPtrs[ gusSelectedSoldier ], usMapPos ) ) == 1 )
|
||||
{
|
||||
// ATE: CHECK IF WE CAN GET TO POSITION
|
||||
// Check if we are not in combat
|
||||
@@ -502,7 +502,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
{
|
||||
if ( pSoldier->bDoBurst )
|
||||
{
|
||||
pSoldier->sEndGridNo = sMapPos;
|
||||
pSoldier->sEndGridNo = usMapPos;
|
||||
|
||||
gfBeginBurstSpreadTracking = FALSE;
|
||||
|
||||
@@ -544,7 +544,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
{
|
||||
if ( gpItemPointer != NULL )
|
||||
{
|
||||
if ( HandleItemPointerClick( sMapPos ) )
|
||||
if ( HandleItemPointerClick( usMapPos ) )
|
||||
{
|
||||
// getout of mode
|
||||
EndItemPointer( );
|
||||
@@ -608,7 +608,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
|
||||
case HANDCURSOR_MODE:
|
||||
|
||||
HandleHandCursorClick( sMapPos, puiNewEvent );
|
||||
HandleHandCursorClick( usMapPos, puiNewEvent );
|
||||
break;
|
||||
|
||||
case JUMPOVER_MODE:
|
||||
@@ -626,7 +626,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
|
||||
if ( InUIPlanMode( ) )
|
||||
{
|
||||
AddUIPlan( sMapPos, UIPLAN_ACTION_FIRE );
|
||||
AddUIPlan( usMapPos, UIPLAN_ACTION_FIRE );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -645,7 +645,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
else if ( UIMouseOnValidAttackLocation( pSoldier ) && SelectedMercCanAffordAttack( ) )
|
||||
{
|
||||
*puiNewEvent = A_CHANGE_TO_CONFIM_ACTION;
|
||||
pSoldier->sStartGridNo = sMapPos;
|
||||
pSoldier->sStartGridNo = usMapPos;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -742,9 +742,9 @@ void QueryTBRightButton( UINT32 *puiNewEvent )
|
||||
static BOOLEAN fClickHoldIntercepted = FALSE;
|
||||
static BOOLEAN fClickIntercepted = FALSE;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
BOOLEAN fDone = FALSE;
|
||||
if (!GetMouseMapPos( &sMapPos ) )
|
||||
if (!GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -942,7 +942,7 @@ void QueryTBRightButton( UINT32 *puiNewEvent )
|
||||
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
HandleRightClickAdjustCursor( pSoldier, sMapPos );
|
||||
HandleRightClickAdjustCursor( pSoldier, usMapPos );
|
||||
}
|
||||
fClickIntercepted = TRUE;
|
||||
break;
|
||||
@@ -985,15 +985,15 @@ extern BOOLEAN gUIActionModeChangeDueToMouseOver;
|
||||
|
||||
void GetTBMousePositionInput( UINT32 *puiNewEvent )
|
||||
{
|
||||
INT16 sMapPos;
|
||||
static UINT16 usOldMapPos = 0;
|
||||
INT32 usMapPos;
|
||||
static INT32 usOldMapPos = 0;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
BOOLEAN bHandleCode;
|
||||
static BOOLEAN fOnValidGuy = FALSE;
|
||||
static UINT32 uiMoveTargetSoldierId = NOBODY;
|
||||
|
||||
|
||||
if (!GetMouseMapPos( &sMapPos ) )
|
||||
if (!GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -1060,9 +1060,9 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent )
|
||||
// Check for being on terrain
|
||||
if( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
if ( IsValidJumpLocation( pSoldier, sMapPos, TRUE ) )
|
||||
if ( IsValidJumpLocation( pSoldier, usMapPos, TRUE ) )
|
||||
{
|
||||
gsJumpOverGridNo = sMapPos;
|
||||
gsJumpOverGridNo = usMapPos;
|
||||
*puiNewEvent = JP_ON_TERRAIN;
|
||||
return;
|
||||
}
|
||||
@@ -1164,7 +1164,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent )
|
||||
case JUMPOVER_MODE:
|
||||
|
||||
// ATE: Make sure!
|
||||
if ( gsJumpOverGridNo != sMapPos )
|
||||
if ( gsJumpOverGridNo != usMapPos )
|
||||
{
|
||||
*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
}
|
||||
@@ -1176,7 +1176,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent )
|
||||
|
||||
case CONFIRM_MOVE_MODE:
|
||||
|
||||
if ( sMapPos != usOldMapPos )
|
||||
if ( usMapPos != usOldMapPos )
|
||||
{
|
||||
// Switch event out of confirm mode
|
||||
*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
@@ -1196,7 +1196,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent )
|
||||
{
|
||||
if ( pSoldier->bDoBurst )
|
||||
{
|
||||
pSoldier->sEndGridNo = sMapPos;
|
||||
pSoldier->sEndGridNo = usMapPos;
|
||||
|
||||
if ( pSoldier->sEndGridNo != pSoldier->sStartGridNo && fLeftButtonDown )
|
||||
{
|
||||
@@ -1207,7 +1207,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent )
|
||||
if ( pSoldier->flags.fDoSpread )
|
||||
{
|
||||
// Accumulate gridno
|
||||
AccumulateBurstLocation( sMapPos );
|
||||
AccumulateBurstLocation( usMapPos );
|
||||
|
||||
*puiNewEvent = CA_ON_TERRAIN;
|
||||
break;
|
||||
@@ -1238,7 +1238,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent )
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ConfirmActionCancel( sMapPos, usOldMapPos ) )
|
||||
if ( ConfirmActionCancel( usMapPos, usOldMapPos ) )
|
||||
{
|
||||
// Switch event out of confirm mode
|
||||
*puiNewEvent = CA_END_CONFIRM_ACTION;
|
||||
@@ -1258,7 +1258,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent )
|
||||
|
||||
}
|
||||
|
||||
usOldMapPos = sMapPos;
|
||||
usOldMapPos = usMapPos;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1408,7 +1408,6 @@ void GetPolledKeyboardInput( UINT32 *puiNewEvent )
|
||||
|
||||
fEndDown = FALSE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1424,13 +1423,13 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
static BOOLEAN fShifted = FALSE;
|
||||
static BOOLEAN fShifted2 = FALSE;
|
||||
static BOOLEAN fAltDown = FALSE;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
BOOLEAN fGoodCheatLevelKey = FALSE;
|
||||
|
||||
GetCursorPos(&MousePos);
|
||||
ScreenToClient(ghWindow, &MousePos); // In window coords!
|
||||
|
||||
GetMouseMapPos( &sMapPos );
|
||||
GetMouseMapPos( &usMapPos );
|
||||
|
||||
while (DequeueEvent(&InputEvent) == TRUE)
|
||||
{
|
||||
@@ -1893,13 +1892,13 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
if ((InputEvent.usEvent == KEY_DOWN )&& ( InputEvent.usParam == '0') && ( InputEvent.usKeyState & ALT_DOWN ))
|
||||
{
|
||||
INT32 i = 0;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
INT32 iTime = GetJA2Clock( );
|
||||
UINT8 ubLevel;
|
||||
|
||||
for ( i = 0; i < 1000; i++ )
|
||||
{
|
||||
CalculateLaunchItemChanceToGetThrough( MercPtrs[ gusSelectedSoldier ], &(MercPtrs[ gusSelectedSoldier ]->inv[ HANDPOS ] ), sMapPos, 0, 0, &sGridNo, TRUE, (INT8 *)&ubLevel, TRUE );
|
||||
CalculateLaunchItemChanceToGetThrough( MercPtrs[ gusSelectedSoldier ], &(MercPtrs[ gusSelectedSoldier ]->inv[ HANDPOS ] ), usMapPos, 0, 0, &sGridNo, TRUE, (INT8 *)&ubLevel, TRUE );
|
||||
}
|
||||
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_TESTVERSION, L"Physics 100 times: %d", ( GetJA2Clock( ) - iTime ) );
|
||||
@@ -2863,13 +2862,13 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
}
|
||||
else
|
||||
{
|
||||
INT16 sGridNo;
|
||||
INT32 usGridNo;
|
||||
|
||||
//Get the gridno the cursor is at
|
||||
GetMouseMapPos( &sGridNo );
|
||||
GetMouseMapPos( &usGridNo );
|
||||
|
||||
//if there is a selected soldier, and the cursor location is valid
|
||||
if( gusSelectedSoldier != NOBODY && sGridNo != NOWHERE )
|
||||
//if there is a selected soldier, and the cursor location is valid
|
||||
if( gusSelectedSoldier != NOBODY && !TileIsOutOfBounds(usGridNo))
|
||||
{
|
||||
//if the cursor is over someone
|
||||
if( gfUIFullTargetFound )
|
||||
@@ -2880,12 +2879,12 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
else
|
||||
{
|
||||
//Display the range to the target
|
||||
DisplayRangeToTarget( MercPtrs[ gusSelectedSoldier ], sGridNo );
|
||||
DisplayRangeToTarget( MercPtrs[ gusSelectedSoldier ], usGridNo );
|
||||
}
|
||||
|
||||
#ifdef JA2TESTVERSION
|
||||
CHAR16 zOutputString[512];
|
||||
swprintf( zOutputString, L"gridno: %d", sGridNo);
|
||||
swprintf( zOutputString, L"gridno: %d", usGridNo);
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, zOutputString );
|
||||
#endif
|
||||
}
|
||||
@@ -3020,7 +3019,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
//CHRISL: This will create a large number of objects for checking overloading
|
||||
if( fAlt && fCtrl )
|
||||
{
|
||||
INT16 tempMapPos = sMapPos;
|
||||
INT32 tempMapPos = usMapPos;
|
||||
if( CHEATER_CHEAT_LEVEL( ) )
|
||||
{
|
||||
for(UINT16 i = 1; i < 1300; i++)
|
||||
@@ -3486,8 +3485,8 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
#endif
|
||||
}
|
||||
else
|
||||
if( !CycleSoldierFindStack( sMapPos ) )// Are we over a merc stack?
|
||||
CycleIntTileFindStack( sMapPos ); // If not, now check if we are over a struct stack
|
||||
if( !CycleSoldierFindStack( usMapPos ) )// Are we over a merc stack?
|
||||
CycleIntTileFindStack( usMapPos ); // If not, now check if we are over a struct stack
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
@@ -3797,11 +3796,11 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
//if the display cover or line of sight is being displayed
|
||||
if( _KeyDown( END ) || _KeyDown( DEL ) )
|
||||
{
|
||||
//if( _KeyDown( DEL ) )
|
||||
// ChangeSizeOfDisplayCover( gGameSettings.ubSizeOfDisplayCover + 1 );
|
||||
//f( _KeyDown( DEL ) )
|
||||
//ChangeSizeOfDisplayCover( gGameSettings.ubSizeOfDisplayCover + 1 );
|
||||
|
||||
//if( _KeyDown( END ) )
|
||||
// ChangeSizeOfLOS( gGameSettings.ubSizeOfLOS + 1 );
|
||||
//ChangeSizeOfLOS( gGameSettings.ubSizeOfLOS + 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4044,10 +4043,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
if( _KeyDown( END ) || _KeyDown( DEL ) )
|
||||
{
|
||||
//if( _KeyDown( DEL ) )
|
||||
// ChangeSizeOfDisplayCover( gGameSettings.ubSizeOfDisplayCover - 1 );
|
||||
//ChangeSizeOfDisplayCover( gGameSettings.ubSizeOfDisplayCover - 1 );
|
||||
|
||||
//if( _KeyDown( END ) )
|
||||
// ChangeSizeOfLOS( gGameSettings.ubSizeOfLOS - 1 );
|
||||
//ChangeSizeOfLOS( gGameSettings.ubSizeOfLOS - 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4210,7 +4209,7 @@ void HandleItemMenuKeys( InputAtom *pInputEvent, UINT32 *puiNewEvent )
|
||||
|
||||
BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustConfirm )
|
||||
{
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
|
||||
// If not in move mode, return!
|
||||
if ( gCurrentUIMode != MOVE_MODE )
|
||||
@@ -4298,14 +4297,14 @@ BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustConfirm )
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !GetMouseMapPos( &sMapPos ) )
|
||||
if ( !GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
// Goto next sector
|
||||
//SimulateMouseMovement( gusMouseXPos - 5, gusMouseYPos );
|
||||
InitSectorExitMenu( DIRECTION_EXITGRID, sMapPos );
|
||||
InitSectorExitMenu( DIRECTION_EXITGRID, usMapPos );
|
||||
}
|
||||
}
|
||||
return( TRUE );
|
||||
@@ -4388,11 +4387,11 @@ BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustConfirm )
|
||||
|
||||
void CreateRandomItem()
|
||||
{
|
||||
INT16 sMapPos;
|
||||
if ( GetMouseMapPos( &sMapPos ) )
|
||||
INT32 usMapPos;
|
||||
if ( GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
CreateItem( (UINT16) (Random( 35 ) + 1), 100, &gTempObject );
|
||||
AddItemToPool( sMapPos, &gTempObject, -1 , 0, 0, 0 );
|
||||
AddItemToPool( usMapPos, &gTempObject, -1 , 0, 0, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4400,11 +4399,11 @@ void MakeSelectedSoldierTired()
|
||||
{
|
||||
// Key to make guy get tired!
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 sMapPos;
|
||||
if ( GetMouseMapPos( &sMapPos ) )
|
||||
INT32 usMapPos;
|
||||
if ( GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
CreateItem( (UINT16)TNT, 100, &gTempObject );
|
||||
AddItemToPool( sMapPos, &gTempObject, -1, 0, 0, 0 );
|
||||
AddItemToPool( usMapPos, &gTempObject, -1, 0, 0, 0 );
|
||||
}
|
||||
|
||||
// CHECK IF WE'RE ON A GUY ( EITHER SELECTED, OURS, OR THEIRS
|
||||
@@ -4487,14 +4486,14 @@ void ToggleViewAllItems()
|
||||
|
||||
void TestExplosion()
|
||||
{
|
||||
INT16 sMapPos;
|
||||
if ( GetMouseMapPos( &sMapPos ) )
|
||||
INT32 usMapPos;
|
||||
if ( GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
EXPLOSION_PARAMS ExpParams ;
|
||||
ExpParams.uiFlags = 0;
|
||||
ExpParams.ubOwner = NOBODY;
|
||||
ExpParams.ubTypeID = STUN_BLAST;
|
||||
ExpParams.sGridNo = sMapPos;
|
||||
ExpParams.sGridNo = usMapPos;
|
||||
|
||||
GenerateExplosion( &ExpParams );
|
||||
|
||||
@@ -4544,7 +4543,7 @@ void ToggleWireFrame()
|
||||
void RefreshSoldier()
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
// CHECK IF WE'RE ON A GUY ( EITHER SELECTED, OURS, OR THEIRS
|
||||
if ( gfUIFullTargetFound )
|
||||
{
|
||||
@@ -4555,16 +4554,16 @@ void RefreshSoldier()
|
||||
|
||||
}
|
||||
|
||||
if ( GetMouseMapPos( &sMapPos ) )
|
||||
if ( GetMouseMapPos( &usMapPos ) )
|
||||
sprintf( gDebugStr, "%d %d %d %d %d %d %d %d",
|
||||
gubWorldMovementCosts[ sMapPos ][ 0 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ sMapPos ][ 1 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ sMapPos ][ 2 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ sMapPos ][ 3 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ sMapPos ][ 4 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ sMapPos ][ 5 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ sMapPos ][ 6 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ sMapPos ][ 7 ][gsInterfaceLevel] );
|
||||
gubWorldMovementCosts[ usMapPos ][ 0 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ usMapPos ][ 1 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ usMapPos ][ 2 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ usMapPos ][ 3 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ usMapPos ][ 4 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ usMapPos ][ 5 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ usMapPos ][ 6 ][gsInterfaceLevel],
|
||||
gubWorldMovementCosts[ usMapPos ][ 7 ][gsInterfaceLevel] );
|
||||
}
|
||||
|
||||
void ChangeSoldiersBodyType( UINT8 ubBodyType, BOOLEAN fCreateNewPalette )
|
||||
@@ -4617,27 +4616,27 @@ void ChangeSoldiersBodyType( UINT8 ubBodyType, BOOLEAN fCreateNewPalette )
|
||||
void TeleportSelectedSoldier()
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
// CHECK IF WE'RE ON A GUY ( EITHER SELECTED, OURS, OR THEIRS
|
||||
if( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
if ( GetMouseMapPos( &sMapPos ) )
|
||||
if ( GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
// Check level first....
|
||||
if ( gsInterfaceLevel == 0 )
|
||||
{
|
||||
pSoldier->SetSoldierHeight( 0 );
|
||||
TeleportSoldier( pSoldier, sMapPos, FALSE );
|
||||
TeleportSoldier( pSoldier, usMapPos, FALSE );
|
||||
pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Is there a roof?
|
||||
if ( FindStructure( sMapPos, STRUCTURE_ROOF ) != NULL )
|
||||
if ( FindStructure( usMapPos, STRUCTURE_ROOF ) != NULL )
|
||||
{
|
||||
pSoldier->SetSoldierHeight( 50.0 );
|
||||
|
||||
TeleportSoldier( pSoldier, sMapPos, TRUE );
|
||||
TeleportSoldier( pSoldier, usMapPos, TRUE );
|
||||
pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection );
|
||||
}
|
||||
}
|
||||
@@ -4697,7 +4696,7 @@ void ToggleZBuffer()
|
||||
void TogglePlanningMode()
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
// DO ONLY IN TURNED BASED!
|
||||
if ( gTacticalStatus.uiFlags & TURNBASED && (gTacticalStatus.uiFlags & INCOMBAT) )
|
||||
{
|
||||
@@ -4706,7 +4705,7 @@ void TogglePlanningMode()
|
||||
{
|
||||
EndUIPlan( );
|
||||
}
|
||||
else if ( GetMouseMapPos( &sMapPos ) )
|
||||
else if ( GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
switch( gCurrentUIMode )
|
||||
{
|
||||
@@ -4715,7 +4714,7 @@ void TogglePlanningMode()
|
||||
{
|
||||
GetSoldier( &pSoldier, gusSelectedSoldier );
|
||||
BeginUIPlan( pSoldier );
|
||||
AddUIPlan( sMapPos, UIPLAN_ACTION_MOVETO );
|
||||
AddUIPlan( usMapPos, UIPLAN_ACTION_MOVETO );
|
||||
}
|
||||
break;
|
||||
case ACTION_MODE:
|
||||
@@ -4723,7 +4722,7 @@ void TogglePlanningMode()
|
||||
{
|
||||
GetSoldier( &pSoldier, gusSelectedSoldier );
|
||||
BeginUIPlan( pSoldier );
|
||||
AddUIPlan( sMapPos, UIPLAN_ACTION_FIRE );
|
||||
AddUIPlan( usMapPos, UIPLAN_ACTION_FIRE );
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -4804,10 +4803,10 @@ void CreateNextCivType()
|
||||
{
|
||||
INT16 sWorldX, sWorldY;
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
static INT8 bBodyType = FATCIV;
|
||||
// Get Grid Corrdinates of mouse
|
||||
if ( GetMouseWorldCoordsInCenter( &sWorldX, &sWorldY ) && GetMouseMapPos( &sMapPos ) )
|
||||
if ( GetMouseWorldCoordsInCenter( &sWorldX, &sWorldY ) && GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
INT8 iNewIndex;
|
||||
|
||||
@@ -4826,7 +4825,7 @@ void CreateNextCivType()
|
||||
}
|
||||
|
||||
MercCreateStruct.bTeam = CIV_TEAM;
|
||||
MercCreateStruct.sInsertionGridNo = sMapPos;
|
||||
MercCreateStruct.sInsertionGridNo = usMapPos;
|
||||
RandomizeNewSoldierStats( &MercCreateStruct );
|
||||
|
||||
if ( TacticalCreateSoldier( &MercCreateStruct, (UINT8 *)&iNewIndex ) )
|
||||
@@ -4862,9 +4861,9 @@ void CreateCow()
|
||||
{
|
||||
INT16 sWorldX, sWorldY;
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
// Get Grid Corrdinates of mouse
|
||||
if ( GetMouseWorldCoordsInCenter( &sWorldX, &sWorldY ) && GetMouseMapPos( &sMapPos ) )
|
||||
if ( GetMouseWorldCoordsInCenter( &sWorldX, &sWorldY ) && GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
INT8 iNewIndex;
|
||||
|
||||
@@ -4875,7 +4874,7 @@ void CreateCow()
|
||||
MercCreateStruct.bBodyType = COW;
|
||||
//MercCreateStruct.bTeam = SOLDIER_CREATE_AUTO_TEAM;
|
||||
MercCreateStruct.bTeam = CIV_TEAM;
|
||||
MercCreateStruct.sInsertionGridNo = sMapPos;
|
||||
MercCreateStruct.sInsertionGridNo = usMapPos;
|
||||
RandomizeNewSoldierStats( &MercCreateStruct );
|
||||
|
||||
if ( TacticalCreateSoldier( &MercCreateStruct, (UINT8 *)&iNewIndex ) )
|
||||
@@ -4893,9 +4892,9 @@ void CreatePlayerControlledCow()
|
||||
{
|
||||
INT16 sWorldX, sWorldY;
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
// Get Grid Corrdinates of mouse
|
||||
if ( GetMouseWorldCoordsInCenter( &sWorldX, &sWorldY ) && GetMouseMapPos( &sMapPos ) )
|
||||
if ( GetMouseWorldCoordsInCenter( &sWorldX, &sWorldY ) && GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
INT8 iNewIndex;
|
||||
|
||||
@@ -4904,7 +4903,7 @@ void CreatePlayerControlledCow()
|
||||
MercCreateStruct.sSectorY = gWorldSectorY;
|
||||
MercCreateStruct.bSectorZ = gbWorldSectorZ;
|
||||
MercCreateStruct.bBodyType = COW;
|
||||
MercCreateStruct.sInsertionGridNo = sMapPos;
|
||||
MercCreateStruct.sInsertionGridNo = usMapPos;
|
||||
MercCreateStruct.bTeam = SOLDIER_CREATE_AUTO_TEAM;
|
||||
MercCreateStruct.fPlayerMerc = TRUE;
|
||||
|
||||
@@ -4971,8 +4970,8 @@ void GrenadeTest3()
|
||||
void CreatePlayerControlledMonster()
|
||||
{
|
||||
INT16 sWorldX, sWorldY;
|
||||
INT16 sMapPos;
|
||||
if ( GetMouseWorldCoordsInCenter( &sWorldX, &sWorldY ) && GetMouseMapPos( &sMapPos ) )
|
||||
INT32 usMapPos;
|
||||
if ( GetMouseWorldCoordsInCenter( &sWorldX, &sWorldY ) && GetMouseMapPos( &usMapPos ) )
|
||||
{
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
INT8 iNewIndex;
|
||||
@@ -4989,7 +4988,7 @@ void CreatePlayerControlledMonster()
|
||||
else
|
||||
MercCreateStruct.bBodyType = ADULTFEMALEMONSTER;
|
||||
MercCreateStruct.bTeam = SOLDIER_CREATE_AUTO_TEAM;
|
||||
MercCreateStruct.sInsertionGridNo = sMapPos;
|
||||
MercCreateStruct.sInsertionGridNo = usMapPos;
|
||||
RandomizeNewSoldierStats( &MercCreateStruct );
|
||||
|
||||
if ( TacticalCreateSoldier( &MercCreateStruct, (UINT8 *)&iNewIndex ) )
|
||||
@@ -5000,10 +4999,10 @@ void CreatePlayerControlledMonster()
|
||||
}
|
||||
|
||||
|
||||
INT8 CheckForAndHandleHandleVehicleInteractiveClick( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN fMovementMode )
|
||||
INT8 CheckForAndHandleHandleVehicleInteractiveClick( SOLDIERTYPE *pSoldier, UINT16 usMapPos, BOOLEAN fMovementMode )
|
||||
{
|
||||
// Look for an item pool
|
||||
INT16 sActionGridNo;
|
||||
INT32 sActionGridNo;
|
||||
UINT8 ubDirection;
|
||||
SOLDIERTYPE *pTSoldier;
|
||||
INT16 sAPCost = 0;
|
||||
@@ -5018,8 +5017,8 @@ INT8 CheckForAndHandleHandleVehicleInteractiveClick( SOLDIERTYPE *pSoldier, INT1
|
||||
{
|
||||
// Find a gridno closest to sweetspot...
|
||||
sActionGridNo = FindGridNoFromSweetSpotWithStructDataFromSoldier( pSoldier, pSoldier->usUIMovementMode, 5, &ubDirection, 0, pTSoldier );
|
||||
|
||||
if ( sActionGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sActionGridNo))
|
||||
{
|
||||
// Calculate AP costs...
|
||||
//sAPCost = GetAPsToBeginFirstAid( pSoldier );
|
||||
@@ -5060,15 +5059,15 @@ INT8 CheckForAndHandleHandleVehicleInteractiveClick( SOLDIERTYPE *pSoldier, INT1
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
void HandleHandCursorClick( INT16 sMapPos, UINT32 *puiNewEvent )
|
||||
void HandleHandCursorClick( INT32 usMapPos, UINT32 *puiNewEvent )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
LEVELNODE *pIntTile;
|
||||
INT16 sIntTileGridNo;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sIntTileGridNo;
|
||||
INT32 sActionGridNo;
|
||||
UINT8 ubDirection;
|
||||
INT16 sAPCost;
|
||||
INT16 sAdjustedGridNo;
|
||||
INT32 sAdjustedGridNo;
|
||||
STRUCTURE *pStructure = NULL;
|
||||
ITEM_POOL *pItemPool;
|
||||
BOOLEAN fIgnoreItems = FALSE;
|
||||
@@ -5082,7 +5081,7 @@ void HandleHandCursorClick( INT16 sMapPos, UINT32 *puiNewEvent )
|
||||
return;
|
||||
}
|
||||
|
||||
if ( CheckForAndHandleHandleVehicleInteractiveClick( pSoldier, sMapPos, FALSE ) == -1 )
|
||||
if ( CheckForAndHandleHandleVehicleInteractiveClick( pSoldier, usMapPos, FALSE ) == -1 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -5118,7 +5117,7 @@ void HandleHandCursorClick( INT16 sMapPos, UINT32 *puiNewEvent )
|
||||
}
|
||||
|
||||
// Default action gridno to mouse....
|
||||
sActionGridNo = sMapPos;
|
||||
sActionGridNo = usMapPos;
|
||||
|
||||
// If we are over an interactive struct, adjust gridno to this....
|
||||
pIntTile = ConditionalGetCurInteractiveTileGridNoAndStructure( &sIntTileGridNo , &pStructure, FALSE );
|
||||
@@ -5132,7 +5131,7 @@ void HandleHandCursorClick( INT16 sMapPos, UINT32 *puiNewEvent )
|
||||
fIgnoreItems = TRUE;
|
||||
}
|
||||
|
||||
if ( pStructure->fFlags & ( STRUCTURE_ANYDOOR ) && sActionGridNo != sMapPos )
|
||||
if ( pStructure->fFlags & ( STRUCTURE_ANYDOOR ) && sActionGridNo != usMapPos )
|
||||
{
|
||||
fIgnoreItems = TRUE;
|
||||
}
|
||||
@@ -5231,15 +5230,15 @@ void ExchangeMessageBoxCallBack( UINT8 bExitValue )
|
||||
}
|
||||
|
||||
|
||||
INT8 HandleMoveModeInteractiveClick( INT16 sMapPos, UINT32 *puiNewEvent )
|
||||
INT8 HandleMoveModeInteractiveClick( INT32 usMapPos, UINT32 *puiNewEvent )
|
||||
{
|
||||
// Look for an item pool
|
||||
ITEM_POOL *pItemPool;
|
||||
BOOLEAN fContinue = TRUE;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
LEVELNODE *pIntTile;
|
||||
INT16 sIntTileGridNo;
|
||||
INT16 sActionGridNo;
|
||||
INT32 sIntTileGridNo;
|
||||
INT32 sActionGridNo;
|
||||
UINT8 ubDirection;
|
||||
INT8 bReturnCode = 0;
|
||||
INT8 bZLevel;
|
||||
@@ -5261,14 +5260,14 @@ INT8 HandleMoveModeInteractiveClick( INT16 sMapPos, UINT32 *puiNewEvent )
|
||||
}
|
||||
|
||||
// OK, check for height differences.....
|
||||
if ( gpWorldLevelData[ sMapPos ].sHeight != gpWorldLevelData[ pSoldier->sGridNo ].sHeight )
|
||||
if ( gpWorldLevelData[ usMapPos ].sHeight != gpWorldLevelData[ pSoldier->sGridNo ].sHeight )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ CANT_GET_THERE ] );
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
// See if we are over a vehicle, and walk up to it and enter....
|
||||
if ( CheckForAndHandleHandleVehicleInteractiveClick( pSoldier, sMapPos, TRUE ) == -1 )
|
||||
if ( CheckForAndHandleHandleVehicleInteractiveClick( pSoldier, usMapPos, TRUE ) == -1 )
|
||||
{
|
||||
return( -1 );
|
||||
}
|
||||
@@ -5401,7 +5400,7 @@ BOOLEAN HandleUIReloading( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN ConfirmActionCancel( INT16 sMapPos, UINT16 usOldMapPos )
|
||||
BOOLEAN ConfirmActionCancel( INT32 usMapPos, INT32 usOldMapPos )
|
||||
{
|
||||
// OK, most times we want to leave confirm mode if our
|
||||
// gridno is different... but if we are in the grenade throw
|
||||
@@ -5417,7 +5416,7 @@ BOOLEAN ConfirmActionCancel( INT16 sMapPos, UINT16 usOldMapPos )
|
||||
//
|
||||
//else
|
||||
{
|
||||
if ( sMapPos != usOldMapPos )
|
||||
if ( usMapPos != usOldMapPos )
|
||||
{
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
+69
-71
@@ -37,22 +37,22 @@ class SOLDIERTYPE;
|
||||
|
||||
|
||||
// FUNCTIONS FOR ITEM CURSOR HANDLING
|
||||
UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN fShowAPs, BOOLEAN fRecalc, UINT32 uiCursorFlags );
|
||||
UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN fShowAPs, BOOLEAN fRecalc, UINT32 uiCursorFlags );
|
||||
UINT8 HandleKnifeCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags );
|
||||
UINT8 HandlePunchCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlagsl );
|
||||
UINT8 HandleAidCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags );
|
||||
UINT8 HandleActivatedTossCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, UINT8 ubCursor );
|
||||
UINT8 HandleNonActivatedTossCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN fRecalc, UINT32 uiCursorFlags, UINT8 ubCursor );
|
||||
UINT8 HandleWirecutterCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, UINT32 uiCursorFlags );
|
||||
UINT8 HandleRepairCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, UINT32 uiCursorFlags );
|
||||
UINT8 HandleRefuelCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, UINT32 uiCursorFlags );
|
||||
UINT8 HandleRemoteCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags );
|
||||
UINT8 HandleBombCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags );
|
||||
UINT8 HandleJarCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, UINT32 uiCursorFlags );
|
||||
UINT8 HandleTinCanCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, UINT32 uiCursorFlags );
|
||||
UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos, BOOLEAN fShowAPs, BOOLEAN fRecalc, UINT32 uiCursorFlags );
|
||||
UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos, BOOLEAN fShowAPs, BOOLEAN fRecalc, UINT32 uiCursorFlags );
|
||||
UINT8 HandleKnifeCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags );
|
||||
UINT8 HandlePunchCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlagsl );
|
||||
UINT8 HandleAidCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags );
|
||||
UINT8 HandleActivatedTossCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubCursor );
|
||||
UINT8 HandleNonActivatedTossCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fRecalc, UINT32 uiCursorFlags, UINT8 ubCursor );
|
||||
UINT8 HandleWirecutterCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCursorFlags );
|
||||
UINT8 HandleRepairCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCursorFlags );
|
||||
UINT8 HandleRefuelCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCursorFlags );
|
||||
UINT8 HandleRemoteCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags );
|
||||
UINT8 HandleBombCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags );
|
||||
UINT8 HandleJarCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCursorFlags );
|
||||
UINT8 HandleTinCanCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCursorFlags );
|
||||
|
||||
extern BOOLEAN HandleCheckForBadChangeToGetThrough( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pTargetSoldier, INT16 sTargetGridNo , INT8 bLevel );
|
||||
extern BOOLEAN HandleCheckForBadChangeToGetThrough( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pTargetSoldier, INT32 sTargetGridNo , INT8 bLevel );
|
||||
|
||||
|
||||
BOOLEAN gfCannotGetThrough = FALSE;
|
||||
@@ -126,13 +126,13 @@ BOOLEAN GetMouseRecalcAndShowAPFlags( UINT32 *puiCursorFlags, BOOLEAN *pfShowAPs
|
||||
|
||||
|
||||
// FUNCTIONS FOR CURSOR DETERMINATION!
|
||||
UINT8 GetProperItemCursor( UINT8 ubSoldierID, UINT16 ubItemIndex, INT16 sMapPos, BOOLEAN fActivated )
|
||||
UINT8 GetProperItemCursor( UINT8 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT32 uiCursorFlags;
|
||||
BOOLEAN fShowAPs = FALSE;
|
||||
BOOLEAN fRecalc = FALSE;
|
||||
INT16 sTargetGridNo = sMapPos;
|
||||
INT32 sTargetGridNo = usMapPos;
|
||||
UINT8 ubCursorID=0;
|
||||
UINT8 ubItemCursor;
|
||||
|
||||
@@ -155,7 +155,7 @@ UINT8 GetProperItemCursor( UINT8 ubSoldierID, UINT16 ubItemIndex, INT16 sMapPos,
|
||||
}
|
||||
else
|
||||
{
|
||||
sTargetGridNo = sMapPos;
|
||||
sTargetGridNo = usMapPos;
|
||||
}
|
||||
|
||||
|
||||
@@ -181,7 +181,7 @@ UINT8 GetProperItemCursor( UINT8 ubSoldierID, UINT16 ubItemIndex, INT16 sMapPos,
|
||||
|
||||
case AIDCURS:
|
||||
|
||||
ubCursorID = HandleAidCursor( pSoldier, sMapPos, fActivated, uiCursorFlags );
|
||||
ubCursorID = HandleAidCursor( pSoldier, usMapPos, fActivated, uiCursorFlags );
|
||||
break;
|
||||
|
||||
case TARGETCURS:
|
||||
@@ -321,7 +321,7 @@ UINT8 GetProperItemCursor( UINT8 ubSoldierID, UINT16 ubItemIndex, INT16 sMapPos,
|
||||
|
||||
|
||||
// WANNE: Shows the target cursor over the enemy soldier
|
||||
UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN fShowAPs, BOOLEAN fRecalc, UINT32 uiCursorFlags )
|
||||
UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos, BOOLEAN fShowAPs, BOOLEAN fRecalc, UINT32 uiCursorFlags )
|
||||
{
|
||||
UINT8 switchVal;
|
||||
BOOLEAN fEnoughPoints = TRUE;
|
||||
@@ -380,17 +380,15 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
{
|
||||
INT16 sCurAPCosts, sAPCosts;
|
||||
|
||||
sCurAPCosts = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, 0);
|
||||
sCurAPCosts = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, 0);
|
||||
|
||||
do
|
||||
{
|
||||
pSoldier->bDoAutofire++;
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, 0);
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, 0);
|
||||
}
|
||||
|
||||
while(EnoughPoints( pSoldier, sAPCosts, 0, FALSE ) && sAPCosts == sCurAPCosts && pSoldier->inv[ pSoldier->ubAttackingHand ][0]->data.gun.ubGunShotsLeft >= pSoldier->bDoAutofire);
|
||||
pSoldier->bDoAutofire--;
|
||||
|
||||
}
|
||||
|
||||
gfUIAutofireBulletCount = TRUE;
|
||||
@@ -406,7 +404,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
else
|
||||
gfUIAutofireBulletCount = FALSE;
|
||||
|
||||
gsCurrentActionPoints = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, (INT8)(pSoldier->aiData.bShownAimTime ) );
|
||||
gsCurrentActionPoints = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, (INT8)(pSoldier->aiData.bShownAimTime ) );
|
||||
gfUIDisplayActionPoints = TRUE;
|
||||
gfUIDisplayActionPointsCenter = TRUE;
|
||||
|
||||
@@ -414,7 +412,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
while(!EnoughPoints( pSoldier, gsCurrentActionPoints, 0 , FALSE ) && pSoldier->bDoAutofire > 1) //oops, we don't have enough points if we are in auto-fire try to decrease bulletcount
|
||||
{
|
||||
pSoldier->bDoAutofire--;
|
||||
gsCurrentActionPoints = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, (INT8)(pSoldier->aiData.bShownAimTime ) );
|
||||
gsCurrentActionPoints = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, (INT8)(pSoldier->aiData.bShownAimTime ) );
|
||||
}
|
||||
|
||||
// If we don't have any points and we are at the first refine, do nothing but warn!
|
||||
@@ -434,7 +432,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
if (reverse == 0)
|
||||
{
|
||||
// WANNE: Current AP costs for targeting
|
||||
sAPCosts = MinAPsToAttack( pSoldier, sMapPos, TRUE ) + ( bFutureAim );
|
||||
sAPCosts = MinAPsToAttack( pSoldier, usMapPos, TRUE ) + ( bFutureAim );
|
||||
|
||||
//gsCurrentActionPoints = sAPCosts;
|
||||
|
||||
@@ -446,11 +444,11 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
}
|
||||
else
|
||||
{
|
||||
sAPCosts = MinAPsToAttack( pSoldier, sMapPos, TRUE ) + maxAimLevels - (bFutureAim + 1);
|
||||
sAPCosts = MinAPsToAttack( pSoldier, usMapPos, TRUE ) + maxAimLevels - (bFutureAim + 1);
|
||||
|
||||
gsCurrentActionPoints = sAPCosts;
|
||||
|
||||
sAPCostsMin = MinAPsToAttack( pSoldier, sMapPos, TRUE );
|
||||
sAPCostsMin = MinAPsToAttack( pSoldier, usMapPos, TRUE );
|
||||
if (sAPCosts < sAPCostsMin)
|
||||
{
|
||||
fEnoughPoints = FALSE;
|
||||
@@ -516,7 +514,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( SoldierToLocationChanceToGetThrough( pSoldier, sMapPos, (INT8) gsInterfaceLevel, pSoldier->bTargetCubeLevel, NOBODY ) < OK_CHANCE_TO_GET_THROUGH )
|
||||
if ( SoldierToLocationChanceToGetThrough( pSoldier, usMapPos, (INT8) gsInterfaceLevel, pSoldier->bTargetCubeLevel, NOBODY ) < OK_CHANCE_TO_GET_THROUGH )
|
||||
{
|
||||
gfCannotGetThrough = TRUE;
|
||||
}
|
||||
@@ -602,7 +600,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
|
||||
// Calculate hit chance (using the current bDoBurst for burst-penalty calculations)
|
||||
UINT32 uiHitChance;
|
||||
uiHitChance = CalcChanceToHitGun( pSoldier, sMapPos, 0, pSoldier->bAimShotLocation );
|
||||
uiHitChance = CalcChanceToHitGun( pSoldier, usMapPos, 0, pSoldier->bAimShotLocation );
|
||||
// HEADROCK HAM B2.7: CTH approximation?
|
||||
if (gGameExternalOptions.fApproximateCTH)
|
||||
{
|
||||
@@ -630,7 +628,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
pSoldier->bTargetLevel = (INT8) gsInterfaceLevel;
|
||||
|
||||
UINT32 uiHitChance;
|
||||
uiHitChance = CalcChanceToHitGun( pSoldier, sMapPos, 0, pSoldier->bAimShotLocation );
|
||||
uiHitChance = CalcChanceToHitGun( pSoldier, usMapPos, 0, pSoldier->bAimShotLocation );
|
||||
// HEADROCK HAM B2.7: CTH approximation?
|
||||
if (gGameExternalOptions.fApproximateCTH)
|
||||
{
|
||||
@@ -660,7 +658,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
|
||||
UINT32 uiHitChance;
|
||||
// Calculate CTH for the first bullet
|
||||
uiHitChance = CalcChanceToHitGun( pSoldier, sMapPos, 0, pSoldier->bAimShotLocation );
|
||||
uiHitChance = CalcChanceToHitGun( pSoldier, usMapPos, 0, pSoldier->bAimShotLocation );
|
||||
// HEADROCK HAM B2.7: CTH approximation?
|
||||
if (gGameExternalOptions.fApproximateCTH)
|
||||
{
|
||||
@@ -676,7 +674,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
UINT8 saveDoBurst = pSoldier->bDoBurst;
|
||||
pSoldier->bDoBurst = pSoldier->bDoAutofire;
|
||||
|
||||
uiHitChance = CalcChanceToHitGun( pSoldier, sMapPos, 0, pSoldier->bAimShotLocation );
|
||||
uiHitChance = CalcChanceToHitGun( pSoldier, usMapPos, 0, pSoldier->bAimShotLocation );
|
||||
// HEADROCK HAM B2.7: CTH approximation?
|
||||
if (gGameExternalOptions.fApproximateCTH)
|
||||
{
|
||||
@@ -708,7 +706,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
pSoldier->bTargetLevel = (INT8) gsInterfaceLevel;
|
||||
|
||||
UINT32 uiHitChance;
|
||||
uiHitChance = CalcChanceToHitGun( pSoldier, sMapPos, (INT8)(pSoldier->aiData.bShownAimTime ), pSoldier->bAimShotLocation );
|
||||
uiHitChance = CalcChanceToHitGun( pSoldier, usMapPos, (INT8)(pSoldier->aiData.bShownAimTime ), pSoldier->bAimShotLocation );
|
||||
// HEADROCK HAM B2.7: CTH approximation?
|
||||
if (gGameExternalOptions.fApproximateCTH)
|
||||
{
|
||||
@@ -1052,7 +1050,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !InRange( pSoldier, sMapPos ) )
|
||||
if ( !InRange( pSoldier, usMapPos ) )
|
||||
{
|
||||
// OK, make buddy flash!
|
||||
SetCursorFlags( gUICursors[ usCursor ].usFreeCursorName, CURSOR_TO_FLASH );
|
||||
@@ -1070,7 +1068,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, BOOLEAN
|
||||
|
||||
|
||||
// WANNE: Shows the target cursor if we are not hovering over an enemy soldier
|
||||
UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos , BOOLEAN fShowAPs, BOOLEAN fRecalc, UINT32 uiCursorFlags )
|
||||
UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos , BOOLEAN fShowAPs, BOOLEAN fRecalc, UINT32 uiCursorFlags )
|
||||
{
|
||||
UINT16 usInHand;
|
||||
|
||||
@@ -1118,7 +1116,7 @@ UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos , BOO
|
||||
{
|
||||
DetermineCursorBodyLocation( (UINT8)gusSelectedSoldier, fShowAPs, fRecalc );
|
||||
|
||||
gsCurrentActionPoints = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, (INT8)(pSoldier->aiData.bShownAimTime ) );
|
||||
gsCurrentActionPoints = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, (INT8)(pSoldier->aiData.bShownAimTime ) );
|
||||
|
||||
gfUIDisplayActionPoints = TRUE;
|
||||
gfUIDisplayActionPointsCenter = TRUE;
|
||||
@@ -1152,7 +1150,7 @@ UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos , BOO
|
||||
{
|
||||
if ( fRecalc )
|
||||
{
|
||||
if ( SoldierToLocationChanceToGetThrough( pSoldier, sMapPos, (INT8) gsInterfaceLevel, pSoldier->bTargetCubeLevel, NOBODY ) < OK_CHANCE_TO_GET_THROUGH )
|
||||
if ( SoldierToLocationChanceToGetThrough( pSoldier, usMapPos, (INT8) gsInterfaceLevel, pSoldier->bTargetCubeLevel, NOBODY ) < OK_CHANCE_TO_GET_THROUGH )
|
||||
{
|
||||
gfCannotGetThrough = TRUE;
|
||||
}
|
||||
@@ -1186,7 +1184,7 @@ UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos , BOO
|
||||
}
|
||||
|
||||
// Determine if good range
|
||||
if ( !InRange( pSoldier, sMapPos ) )
|
||||
if ( !InRange( pSoldier, usMapPos ) )
|
||||
{
|
||||
// Flash cursor!
|
||||
// Check if we're in burst mode!
|
||||
@@ -1230,7 +1228,7 @@ UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos , BOO
|
||||
|
||||
void DetermineCursorBodyLocation( UINT8 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc )
|
||||
{
|
||||
INT16 sMapPos;
|
||||
INT32 usMapPos;
|
||||
SOLDIERTYPE *pTargetSoldier = NULL, *pSoldier;
|
||||
UINT16 usFlags;
|
||||
INT16 sMouseX, sMouseY, sCellX, sCellY, sScreenX, sScreenY;
|
||||
@@ -1251,13 +1249,13 @@ void DetermineCursorBodyLocation( UINT8 ubSoldierID, BOOLEAN fDisplay, BOOLEAN f
|
||||
// ALWAYS SET AIM LOCATION TO NOTHING
|
||||
pSoldier->bAimShotLocation = AIM_SHOT_RANDOM;
|
||||
|
||||
if( !GetMouseMapPos( &sMapPos) )
|
||||
if( !GetMouseMapPos( &usMapPos) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Determine which body part it's on
|
||||
pNode = GetAnimProfileFlags( sMapPos, &usFlags, &pTargetSoldier, NULL );
|
||||
pNode = GetAnimProfileFlags( usMapPos, &usFlags, &pTargetSoldier, NULL );
|
||||
|
||||
while( pNode != NULL )
|
||||
{
|
||||
@@ -1354,7 +1352,7 @@ void DetermineCursorBodyLocation( UINT8 ubSoldierID, BOOLEAN fDisplay, BOOLEAN f
|
||||
if ( fOnGuy )
|
||||
break;
|
||||
|
||||
pNode = GetAnimProfileFlags( sMapPos, &usFlags, &pTargetSoldier, pNode );
|
||||
pNode = GetAnimProfileFlags( usMapPos, &usFlags, &pTargetSoldier, pNode );
|
||||
|
||||
}
|
||||
|
||||
@@ -1478,7 +1476,7 @@ void DetermineCursorBodyLocation( UINT8 ubSoldierID, BOOLEAN fDisplay, BOOLEAN f
|
||||
}
|
||||
|
||||
|
||||
UINT8 HandleKnifeCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
UINT8 HandleKnifeCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
{
|
||||
INT16 sAPCosts;
|
||||
INT8 bFutureAim;
|
||||
@@ -1606,7 +1604,7 @@ UINT8 HandleKnifeCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivate
|
||||
}
|
||||
|
||||
|
||||
UINT8 HandlePunchCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
UINT8 HandlePunchCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
{
|
||||
INT16 sAPCosts;
|
||||
INT8 bFutureAim;
|
||||
@@ -1732,7 +1730,7 @@ UINT8 HandlePunchCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivate
|
||||
}
|
||||
}
|
||||
|
||||
UINT8 HandleAidCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
UINT8 HandleAidCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
{
|
||||
// DRAW PATH TO GUY
|
||||
HandleUIMovementCursor( pSoldier, uiCursorFlags, sGridNo, MOVEUI_TARGET_MERCSFORAID );
|
||||
@@ -1755,15 +1753,15 @@ UINT8 HandleAidCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated,
|
||||
}
|
||||
}
|
||||
|
||||
UINT8 HandleActivatedTossCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubItemCursor )
|
||||
UINT8 HandleActivatedTossCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubItemCursor )
|
||||
{
|
||||
return( ACTION_TOSS_UICURSOR );
|
||||
}
|
||||
|
||||
|
||||
UINT8 HandleNonActivatedTossCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fRecalc, UINT32 uiCursorFlags, UINT8 ubItemCursor )
|
||||
UINT8 HandleNonActivatedTossCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fRecalc, UINT32 uiCursorFlags, UINT8 ubItemCursor )
|
||||
{
|
||||
INT16 sFinalGridNo;
|
||||
INT32 sFinalGridNo;
|
||||
static BOOLEAN fBadCTGH = FALSE;
|
||||
BOOLEAN fArmed = FALSE;
|
||||
INT8 bLevel;
|
||||
@@ -1889,7 +1887,7 @@ UINT8 HandleNonActivatedTossCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEA
|
||||
}
|
||||
|
||||
|
||||
UINT8 HandleWirecutterCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiCursorFlags )
|
||||
UINT8 HandleWirecutterCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCursorFlags )
|
||||
{
|
||||
// DRAW PATH TO GUY
|
||||
HandleUIMovementCursor( pSoldier, uiCursorFlags, sGridNo, MOVEUI_TARGET_WIREFENCE );
|
||||
@@ -1904,7 +1902,7 @@ UINT8 HandleWirecutterCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiCur
|
||||
}
|
||||
|
||||
|
||||
UINT8 HandleRepairCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiCursorFlags )
|
||||
UINT8 HandleRepairCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCursorFlags )
|
||||
{
|
||||
// DRAW PATH TO GUY
|
||||
HandleUIMovementCursor( pSoldier, uiCursorFlags, sGridNo, MOVEUI_TARGET_REPAIR );
|
||||
@@ -1918,7 +1916,7 @@ UINT8 HandleRepairCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiCursorF
|
||||
return( BAD_REPAIR_UICURSOR );
|
||||
}
|
||||
|
||||
UINT8 HandleRefuelCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiCursorFlags )
|
||||
UINT8 HandleRefuelCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCursorFlags )
|
||||
{
|
||||
// DRAW PATH TO GUY
|
||||
HandleUIMovementCursor( pSoldier, uiCursorFlags, sGridNo, MOVEUI_TARGET_REFUEL );
|
||||
@@ -1933,7 +1931,7 @@ UINT8 HandleRefuelCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiCursorF
|
||||
}
|
||||
|
||||
|
||||
UINT8 HandleJarCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiCursorFlags )
|
||||
UINT8 HandleJarCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCursorFlags )
|
||||
{
|
||||
// DRAW PATH TO GUY
|
||||
HandleUIMovementCursor( pSoldier, uiCursorFlags, sGridNo, MOVEUI_TARGET_JAR );
|
||||
@@ -1948,10 +1946,10 @@ UINT8 HandleJarCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiCursorFlag
|
||||
}
|
||||
|
||||
|
||||
UINT8 HandleTinCanCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiCursorFlags )
|
||||
UINT8 HandleTinCanCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCursorFlags )
|
||||
{
|
||||
STRUCTURE *pStructure;
|
||||
INT16 sIntTileGridNo;
|
||||
INT32 sIntTileGridNo;
|
||||
LEVELNODE *pIntTile;
|
||||
|
||||
|
||||
@@ -1974,7 +1972,7 @@ UINT8 HandleTinCanCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT32 uiCursorF
|
||||
}
|
||||
|
||||
|
||||
UINT8 HandleRemoteCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
UINT8 HandleRemoteCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
{
|
||||
|
||||
// Calculate action points
|
||||
@@ -2002,7 +2000,7 @@ UINT8 HandleRemoteCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivat
|
||||
}
|
||||
|
||||
|
||||
UINT8 HandleBombCursor( SOLDIERTYPE *pSoldier, INT16 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
UINT8 HandleBombCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivated, UINT32 uiCursorFlags )
|
||||
{
|
||||
|
||||
// DRAW PATH TO GUY
|
||||
@@ -2054,7 +2052,7 @@ void HandleLeftClickCursor( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
UINT16 usInHand;
|
||||
UINT8 ubItemCursor;
|
||||
INT16 sGridNo;
|
||||
INT32 usGridNo;
|
||||
|
||||
// LOOK IN GUY'S HAND TO CHECK LOCATION
|
||||
usInHand = pSoldier->inv[HANDPOS].usItem;
|
||||
@@ -2073,7 +2071,7 @@ void HandleLeftClickCursor( SOLDIERTYPE *pSoldier )
|
||||
return;
|
||||
}
|
||||
|
||||
if (!GetMouseMapPos( &sGridNo ) )
|
||||
if (!GetMouseMapPos( &usGridNo ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -2151,14 +2149,14 @@ void HandleLeftClickCursor( SOLDIERTYPE *pSoldier )
|
||||
|
||||
|
||||
|
||||
void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos )
|
||||
{
|
||||
UINT16 usInHand;
|
||||
INT16 sAPCosts;
|
||||
INT8 bFutureAim;
|
||||
UINT8 ubCursor;
|
||||
SOLDIERTYPE *pTSoldier;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
INT8 bTargetLevel;
|
||||
|
||||
|
||||
@@ -2171,7 +2169,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
// 'snap' cursor to target tile....
|
||||
if ( gfUIFullTargetFound )
|
||||
{
|
||||
sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo;
|
||||
usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo;
|
||||
}
|
||||
|
||||
|
||||
@@ -2200,11 +2198,11 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
if(pSoldier->inv[ pSoldier->ubAttackingHand ][0]->data.gun.ubGunShotsLeft > pSoldier->bDoAutofire )
|
||||
{
|
||||
//Calculate how many bullets we need to fire to add at least one more AP
|
||||
sAPCosts = sCurAPCosts = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, 0);
|
||||
sAPCosts = sCurAPCosts = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, 0);
|
||||
while(EnoughPoints( pSoldier, sAPCosts, 0, FALSE ) && sAPCosts <= sCurAPCosts && pSoldier->inv[ pSoldier->ubAttackingHand ][0]->data.gun.ubGunShotsLeft > pSoldier->bDoAutofire) //Increment the bullet count until we run out of APs or we spend the whole AP
|
||||
{
|
||||
pSoldier->bDoAutofire++;
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, 0);
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, 0);
|
||||
}
|
||||
|
||||
//we've stepped over the border and used up one more ap, now let's make sure that it is spent to maximize the bullets
|
||||
@@ -2214,12 +2212,12 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
do
|
||||
{
|
||||
pSoldier->bDoAutofire++;
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, 0);
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, 0);
|
||||
}
|
||||
while(EnoughPoints( pSoldier, sAPCosts, 0, FALSE ) && sAPCosts == sCurAPCosts && pSoldier->inv[ pSoldier->ubAttackingHand ][0]->data.gun.ubGunShotsLeft >= pSoldier->bDoAutofire);
|
||||
pSoldier->bDoAutofire--;
|
||||
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, 0);
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, 0);
|
||||
|
||||
if(!EnoughPoints( pSoldier, sAPCosts, 0, FALSE )) //We've not enough points to fire those bullets
|
||||
{
|
||||
@@ -2236,7 +2234,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
}
|
||||
else
|
||||
{
|
||||
sGridNo = sMapPos;
|
||||
sGridNo = usMapPos;
|
||||
bTargetLevel = (INT8)gsInterfaceLevel;
|
||||
|
||||
// Look for a target here...
|
||||
@@ -2257,7 +2255,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
|
||||
if ( bFutureAim <= maxAimLevels )
|
||||
{
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, (INT8)(bFutureAim ) );
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, (INT8)(bFutureAim ) );
|
||||
|
||||
// Determine if we can afford!
|
||||
if ( EnoughPoints( pSoldier, sAPCosts, 0, FALSE ) )
|
||||
@@ -2304,7 +2302,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
|
||||
if ( bFutureAim <= REFINE_PUNCH_2 )
|
||||
{
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, (INT8)(bFutureAim / 2) );
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, (INT8)(bFutureAim / 2) );
|
||||
|
||||
// Determine if we can afford!
|
||||
if ( EnoughPoints( pSoldier, sAPCosts, 0, FALSE ) )
|
||||
@@ -2351,7 +2349,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos )
|
||||
|
||||
if ( bFutureAim <= REFINE_KNIFE_2 )
|
||||
{
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, sMapPos, TRUE, (INT8)(bFutureAim / 2) );
|
||||
sAPCosts = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, (INT8)(bFutureAim / 2) );
|
||||
|
||||
// Determine if we can afford!
|
||||
if ( EnoughPoints( pSoldier, sAPCosts, 0, FALSE ) )
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
#define REFINE_KNIFE_2 6
|
||||
|
||||
|
||||
UINT8 GetProperItemCursor( UINT8 ubSoldierID, UINT16 ubItemIndex, INT16 sMapPos, BOOLEAN fActivated );
|
||||
UINT8 GetProperItemCursor( UINT8 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated );
|
||||
void DetermineCursorBodyLocation( UINT8 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc );
|
||||
|
||||
void HandleLeftClickCursor( SOLDIERTYPE *pSoldier );
|
||||
void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos );
|
||||
void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos );
|
||||
|
||||
UINT8 GetActionModeCursor( SOLDIERTYPE *pSoldier );
|
||||
|
||||
|
||||
@@ -206,7 +206,7 @@ void SetVehicleValuesIntoSoldierType( SOLDIERTYPE *pVehicle )
|
||||
pVehicle->ubWhatKindOfMercAmI = MERC_TYPE__VEHICLE;
|
||||
}
|
||||
|
||||
INT32 AddVehicleToList( INT16 sMapX, INT16 sMapY, INT16 sGridNo, UINT8 ubType )
|
||||
INT32 AddVehicleToList( INT16 sMapX, INT16 sMapY, INT32 sGridNo, UINT8 ubType )
|
||||
{
|
||||
// insert this vehicle into the list
|
||||
// how many vehicles are there?
|
||||
@@ -310,7 +310,6 @@ INT32 AddVehicleToList( INT16 sMapX, INT16 sMapY, INT16 sGridNo, UINT8 ubType )
|
||||
Assert( 0 );
|
||||
}
|
||||
|
||||
|
||||
// HEADROCK HAM 3.1: An INI setting allows us to turn the Hummer into a true offroad vehicle. It will use the
|
||||
// "TRUCK" type movement, which allows it to go into mild non-road terrain. I wish I could come with a more
|
||||
// subtle method than this crude override, but this is what I've got at the moment.
|
||||
@@ -1521,7 +1520,7 @@ BOOLEAN ExitVehicle( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
SOLDIERTYPE *pVehicle;
|
||||
UINT8 ubDirection;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
|
||||
// Get vehicle from soldier...
|
||||
pVehicle = GetVehicleSoldierPointerFromPassenger( pSoldier );
|
||||
@@ -1535,8 +1534,8 @@ BOOLEAN ExitVehicle( SOLDIERTYPE *pSoldier )
|
||||
if ( pVehicle->flags.uiStatusFlags & SOLDIER_VEHICLE )
|
||||
{
|
||||
sGridNo = FindGridNoFromSweetSpotWithStructDataFromSoldier( pSoldier, pSoldier->usUIMovementMode, 5, &ubDirection, 3, pVehicle );
|
||||
|
||||
if ( sGridNo == NOWHERE )
|
||||
|
||||
if (TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
// ATE: BUT we need a place, widen the search
|
||||
sGridNo = FindGridNoFromSweetSpotWithStructDataFromSoldier( pSoldier, pSoldier->usUIMovementMode, 20, &ubDirection, 3, pVehicle );
|
||||
@@ -1594,7 +1593,7 @@ void AddPassangersToTeamPanel( INT32 iId )
|
||||
}
|
||||
|
||||
|
||||
void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT16 sGridNo, UINT8 ubAttackerID )
|
||||
void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo, UINT8 ubAttackerID )
|
||||
{
|
||||
if ( ubReason != TAKE_DAMAGE_GAS )
|
||||
{
|
||||
@@ -1623,7 +1622,7 @@ void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT16 sGridNo
|
||||
}
|
||||
|
||||
|
||||
void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT16 sGridNo, UINT8 ubAttackerID )
|
||||
void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT32 sGridNo, UINT8 ubAttackerID )
|
||||
{
|
||||
// check state the armor was s'posed to be in vs. the current state..the difference / orig state is % chance
|
||||
// that a critical hit will occur
|
||||
|
||||
+4
-4
@@ -61,7 +61,7 @@ typedef struct
|
||||
INT16 sSectorY; // Y position on the Stategic Map
|
||||
INT16 sSectorZ;
|
||||
BOOLEAN fBetweenSectors; // between sectors?
|
||||
INT16 sGridNo; // location in tactical
|
||||
INT32 sGridNo; // location in tactical
|
||||
SOLDIERTYPE *pPassengers[ MAXPASSENGERS ];
|
||||
UINT8 ubDriver;
|
||||
INT16 sInternalHitLocations[ NUMBER_OF_EXTERNAL_HIT_LOCATIONS_ON_VEHICLE ];
|
||||
@@ -94,7 +94,7 @@ extern INT32 iMvtTypes[];
|
||||
void SetVehicleValuesIntoSoldierType( SOLDIERTYPE *pVehicle );
|
||||
|
||||
// add vehicle to list and return id value
|
||||
INT32 AddVehicleToList( INT16 sMapX, INT16 sMapY, INT16 sGridNo, UINT8 ubType );
|
||||
INT32 AddVehicleToList( INT16 sMapX, INT16 sMapY, INT32 sGridNo, UINT8 ubType );
|
||||
|
||||
// remove this vehicle from the list
|
||||
BOOLEAN RemoveVehicleFromList( INT32 iId );
|
||||
@@ -169,7 +169,7 @@ BOOLEAN ExitVehicle( SOLDIERTYPE *pSoldier );
|
||||
void AddPassangersToTeamPanel( INT32 iId );
|
||||
|
||||
|
||||
void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT16 sGridNo , UINT8 ubAttackerID );
|
||||
void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo , UINT8 ubAttackerID );
|
||||
|
||||
// the soldiertype containing this tactical incarnation of this vehicle
|
||||
SOLDIERTYPE * GetSoldierStructureForVehicle( INT32 iId );
|
||||
@@ -180,7 +180,7 @@ void AdjustVehicleAPs( SOLDIERTYPE *pSoldier, INT16 *pubPoints );
|
||||
//INT16 GetOrigInternalArmorValueForVehicleInLocation( UINT8 ubID, UINT8 ubLocation );
|
||||
|
||||
// handle crit hit to vehicle in this location
|
||||
void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT16 sGridNo, UINT8 ubAttackerID );
|
||||
void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT32 sGridNo, UINT8 ubAttackerID );
|
||||
|
||||
// ste up armor values for this vehicle
|
||||
void SetUpArmorForVehicle( UINT8 ubID );
|
||||
|
||||
+57
-47
@@ -96,10 +96,10 @@ extern BOOLEAN gfNextFireJam;
|
||||
|
||||
BOOLEAN WillExplosiveWeaponFail( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj );
|
||||
|
||||
BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo );
|
||||
BOOLEAN UseBlade( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo );
|
||||
BOOLEAN UseThrown( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo );
|
||||
BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo );
|
||||
BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo );
|
||||
BOOLEAN UseBlade( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo );
|
||||
BOOLEAN UseThrown( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo );
|
||||
BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo );
|
||||
|
||||
INT32 HTHImpact( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTarget, INT32 iHitBy, BOOLEAN fBladeAttack );
|
||||
|
||||
@@ -710,8 +710,9 @@ BOOLEAN ReadInWeaponStats(STR fileName)
|
||||
//Debug code; make sure that what we got from the file is the same as what's there
|
||||
// Open a new file
|
||||
hFile = FileOpen( "TABLEDATA\\~Weapons out.xml", FILE_ACCESS_WRITE | FILE_CREATE_ALWAYS, FALSE );
|
||||
if ( !hFile )
|
||||
return( FALSE );
|
||||
THROWIFFALSE(hFile, BuildString().add(L"Couls not open/create file : ").add(L"TABLEDATA\\~Weapons out.xml").get());
|
||||
//if ( !hFile )
|
||||
// return( FALSE );
|
||||
|
||||
{
|
||||
UINT32 cnt;
|
||||
@@ -1309,7 +1310,7 @@ BOOLEAN OKFireWeapon( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN FireWeapon( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo )
|
||||
BOOLEAN FireWeapon( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
||||
{
|
||||
// ignore passed in target gridno for now
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("FireWeapon"));
|
||||
@@ -1451,7 +1452,7 @@ BOOLEAN FireWeapon( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo )
|
||||
}
|
||||
|
||||
|
||||
void GetTargetWorldPositions( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, FLOAT *pdXPos, FLOAT *pdYPos, FLOAT *pdZPos )
|
||||
void GetTargetWorldPositions( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, FLOAT *pdXPos, FLOAT *pdYPos, FLOAT *pdZPos )
|
||||
{
|
||||
FLOAT dTargetX;
|
||||
FLOAT dTargetY;
|
||||
@@ -1559,7 +1560,7 @@ void GetTargetWorldPositions( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, FLOAT
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo )
|
||||
BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
||||
{
|
||||
UINT32 uiHitChance, uiDiceRoll;
|
||||
INT16 sXMapPos, sYMapPos;
|
||||
@@ -1572,7 +1573,7 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo )
|
||||
UINT8 ubVolume;
|
||||
CHAR8 zBurstString[512];
|
||||
UINT8 ubDirection;
|
||||
INT16 sNewGridNo;
|
||||
INT32 sNewGridNo;
|
||||
UINT8 ubMerc;
|
||||
BOOLEAN fGonnaHit = FALSE;
|
||||
UINT16 usExpGain = 0;
|
||||
@@ -1950,13 +1951,13 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo )
|
||||
{
|
||||
CreateItem( Item[usItemNum].discardedlauncheritem , pSoldier->inv[ HANDPOS ][0]->data.objectStatus,&(pSoldier->inv[ HANDPOS ] ) );
|
||||
DirtyMercPanelInterface( pSoldier, DIRTYLEVEL2 );
|
||||
IgniteExplosion( pSoldier->ubID, (INT16)CenterX( pSoldier->sGridNo ), (INT16)CenterY( pSoldier->sGridNo ), 0, pSoldier->sGridNo, C1, pSoldier->pathing.bLevel );
|
||||
IgniteExplosion( pSoldier->ubID, CenterX( pSoldier->sGridNo ), CenterY( pSoldier->sGridNo ), 0, pSoldier->sGridNo, C1, pSoldier->pathing.bLevel );
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("StructureHit: RPG7 item: %d, Ammo: %d",pSoldier->inv[HANDPOS].usItem , pSoldier->inv[HANDPOS][0]->data.gun.usGunAmmoItem ) );
|
||||
|
||||
IgniteExplosion( pSoldier->ubID, (INT16)CenterX( pSoldier->sGridNo ), (INT16)CenterY( pSoldier->sGridNo ), 0, pSoldier->sGridNo, pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.usGunAmmoItem, pSoldier->pathing.bLevel );
|
||||
IgniteExplosion( pSoldier->ubID, CenterX( pSoldier->sGridNo ), CenterY( pSoldier->sGridNo ), 0, pSoldier->sGridNo, pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.usGunAmmoItem, pSoldier->pathing.bLevel );
|
||||
pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.usGunAmmoItem = NONE;
|
||||
}
|
||||
// Reduce again for attack end 'cause it has been incremented for a normal attack
|
||||
@@ -1998,7 +1999,7 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo )
|
||||
|
||||
// Direction to center of explosion
|
||||
ubDirection = gOppositeDirection[ pSoldier->ubDirection ];
|
||||
sNewGridNo = NewGridNo( (INT16)pSoldier->sGridNo, (UINT16)(1 * DirectionInc( ubDirection ) ) );
|
||||
sNewGridNo = NewGridNo( pSoldier->sGridNo, (UINT16)(1 * DirectionInc( ubDirection ) ) );
|
||||
|
||||
// Check if a person exists here and is not prone....
|
||||
ubMerc = WhoIsThere2( sNewGridNo, pSoldier->pathing.bLevel );
|
||||
@@ -2068,7 +2069,7 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo )
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
BOOLEAN UseBlade( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo )
|
||||
BOOLEAN UseBlade( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
||||
{
|
||||
SOLDIERTYPE * pTargetSoldier;
|
||||
INT32 iHitChance, iDiceRoll;
|
||||
@@ -2247,7 +2248,7 @@ BOOLEAN UseBlade( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, BOOLEAN fStealing )
|
||||
BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, BOOLEAN fStealing )
|
||||
{
|
||||
SOLDIERTYPE * pTargetSoldier;
|
||||
INT32 iHitChance, iDiceRoll;
|
||||
@@ -2591,7 +2592,7 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, BOOLEAN fStea
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
|
||||
BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
|
||||
{
|
||||
UINT32 uiHitChance, uiDiceRoll;
|
||||
INT8 bLoop;
|
||||
@@ -2715,7 +2716,7 @@ BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
|
||||
BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
|
||||
{
|
||||
UINT32 uiHitChance, uiDiceRoll;
|
||||
INT16 sAPCost = 0;
|
||||
@@ -2769,7 +2770,7 @@ BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
|
||||
|
||||
// So we still should have ABC > 0
|
||||
// Begin explosion due to failure...
|
||||
IgniteExplosion( pSoldier->ubID, (INT16)CenterX( pSoldier->sGridNo ), (INT16)CenterY( pSoldier->sGridNo ), 0, pSoldier->sGridNo, Launchable.usItem, pSoldier->pathing.bLevel );
|
||||
IgniteExplosion( pSoldier->ubID, CenterX( pSoldier->sGridNo ), CenterY( pSoldier->sGridNo ), 0, pSoldier->sGridNo, Launchable.usItem, pSoldier->pathing.bLevel );
|
||||
|
||||
// Reduce again for attack end 'cause it has been incremented for a normal attack
|
||||
// Nope, not anymore.
|
||||
@@ -2834,6 +2835,15 @@ BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
|
||||
|
||||
iID = CreatePhysicalObject( pSoldier->pTempObject, pSoldier->pThrowParams->dLifeSpan, pSoldier->pThrowParams->dX, pSoldier->pThrowParams->dY, pSoldier->pThrowParams->dZ, pSoldier->pThrowParams->dForceX, pSoldier->pThrowParams->dForceY, pSoldier->pThrowParams->dForceZ, pSoldier->ubID, pSoldier->pThrowParams->ubActionCode, pSoldier->pThrowParams->uiActionData, FALSE );
|
||||
|
||||
// OJW - 20091002 - Explosives
|
||||
if (is_networked && is_client)
|
||||
{
|
||||
if (pSoldier->bTeam == 0 || (pSoldier->bTeam == 1 && is_server))
|
||||
{
|
||||
send_grenade( pSoldier->pTempObject , pSoldier->pThrowParams->dLifeSpan, pSoldier->pThrowParams->dX, pSoldier->pThrowParams->dY, pSoldier->pThrowParams->dZ, pSoldier->pThrowParams->dForceX, pSoldier->pThrowParams->dForceY, pSoldier->pThrowParams->dForceZ, sTargetGridNo, pSoldier->ubID, pSoldier->pThrowParams->ubActionCode, pSoldier->pThrowParams->uiActionData, iID , false);
|
||||
}
|
||||
}
|
||||
|
||||
pObject = &( ObjectSlots[ iID ] );
|
||||
//pObject->fPotentialForDebug = TRUE;
|
||||
|
||||
@@ -2852,7 +2862,7 @@ BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo )
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
BOOLEAN DoSpecialEffectAmmoMiss( UINT8 ubAttackerID, INT16 sGridNo, INT16 sXPos, INT16 sYPos, INT16 sZPos, BOOLEAN fSoundOnly, BOOLEAN fFreeupAttacker, INT32 iBullet )
|
||||
BOOLEAN DoSpecialEffectAmmoMiss( UINT8 ubAttackerID, INT32 sGridNo, INT16 sXPos, INT16 sYPos, INT16 sZPos, BOOLEAN fSoundOnly, BOOLEAN fFreeupAttacker, INT32 iBullet )
|
||||
{
|
||||
ANITILE_PARAMS AniParams;
|
||||
UINT8 ubAmmoType;
|
||||
@@ -2888,8 +2898,8 @@ BOOLEAN DoSpecialEffectAmmoMiss( UINT8 ubAttackerID, INT16 sGridNo, INT16 sXPos,
|
||||
// FreeUpAttacker( (UINT8) ubAttackerID );
|
||||
}
|
||||
}
|
||||
|
||||
if ( sGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
PlayJA2Sample( SMALL_EXPLODE_1 , RATE_11025, SoundVolume( (INT8)HIGHVOLUME, sGridNo ), 1, SoundDir( sGridNo ) );
|
||||
}
|
||||
@@ -2925,8 +2935,8 @@ BOOLEAN DoSpecialEffectAmmoMiss( UINT8 ubAttackerID, INT16 sGridNo, INT16 sXPos,
|
||||
// FreeUpAttacker( (UINT8) ubAttackerID );
|
||||
}
|
||||
}
|
||||
|
||||
if ( sGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
PlayJA2Sample( EXPLOSION_1 , RATE_11025, SoundVolume( (INT8)HIGHVOLUME, sGridNo ), 1, SoundDir( sGridNo ) );
|
||||
}
|
||||
@@ -2962,8 +2972,8 @@ BOOLEAN DoSpecialEffectAmmoMiss( UINT8 ubAttackerID, INT16 sGridNo, INT16 sXPos,
|
||||
// FreeUpAttacker( (UINT8) ubAttackerID );
|
||||
}
|
||||
}
|
||||
|
||||
if ( sGridNo != NOWHERE )
|
||||
|
||||
if (!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
PlayJA2Sample( EXPLOSION_BLAST_2 , RATE_11025, SoundVolume( (INT8)HIGHVOLUME, sGridNo ), 1, SoundDir( sGridNo ) );
|
||||
}
|
||||
@@ -3033,26 +3043,26 @@ void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 s
|
||||
{
|
||||
if ( Item[usWeaponIndex].singleshotrocketlauncher )
|
||||
{
|
||||
IgniteExplosion( ubAttackerID, sXPos, sYPos, 0, (INT16) (GETWORLDINDEXFROMWORLDCOORDS( sYPos, sXPos )), C1, pTargetSoldier->pathing.bLevel );
|
||||
IgniteExplosion( ubAttackerID, sXPos, sYPos, 0, GETWORLDINDEXFROMWORLDCOORDS( sYPos, sXPos ), C1, pTargetSoldier->pathing.bLevel );
|
||||
}
|
||||
// changed rpg type to work only with two flags matching
|
||||
else if ( !Item[usWeaponIndex].singleshotrocketlauncher && Item[usWeaponIndex].rocketlauncher)
|
||||
{
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("WeaponHit: RPG7 item: %d, Ammo: %d",pSoldier->inv[HANDPOS].usItem , pSoldier->inv[HANDPOS][0]->data.gun.usGunAmmoItem ) );
|
||||
|
||||
IgniteExplosion( ubAttackerID, sXPos, sYPos, 0, (INT16) (GETWORLDINDEXFROMWORLDCOORDS( sYPos, sXPos )), pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.usGunAmmoItem, pTargetSoldier->pathing.bLevel );
|
||||
IgniteExplosion( ubAttackerID, sXPos, sYPos, 0, GETWORLDINDEXFROMWORLDCOORDS( sYPos, sXPos ), pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.usGunAmmoItem, pTargetSoldier->pathing.bLevel );
|
||||
pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.usGunAmmoItem = NONE;
|
||||
}
|
||||
else if ( AmmoTypes[pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.ubGunAmmoType].explosionSize > 1)
|
||||
{
|
||||
// re-routed the Highexplosive value to define exposion type
|
||||
IgniteExplosion( ubAttackerID, sXPos, sYPos, 0, (INT16) (GETWORLDINDEXFROMWORLDCOORDS( sYPos, sXPos )), AmmoTypes[pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.ubGunAmmoType].highExplosive , pTargetSoldier->pathing.bLevel );
|
||||
IgniteExplosion( ubAttackerID, sXPos, sYPos, 0, GETWORLDINDEXFROMWORLDCOORDS( sYPos, sXPos ), AmmoTypes[pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.ubGunAmmoType].highExplosive , pTargetSoldier->pathing.bLevel );
|
||||
// pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.usGunAmmoItem = NONE;
|
||||
}
|
||||
}
|
||||
else // tank cannon
|
||||
{
|
||||
IgniteExplosion( ubAttackerID, sXPos, sYPos, 0, (INT16) (GETWORLDINDEXFROMWORLDCOORDS( sYPos, sXPos )), TANK_SHELL, pTargetSoldier->pathing.bLevel );
|
||||
IgniteExplosion( ubAttackerID, sXPos, sYPos, 0, GETWORLDINDEXFROMWORLDCOORDS( sYPos, sXPos ), TANK_SHELL, pTargetSoldier->pathing.bLevel );
|
||||
}
|
||||
|
||||
// 0verhaul: No longer necessary
|
||||
@@ -3084,7 +3094,7 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UIN
|
||||
{
|
||||
BOOLEAN fDoMissForGun = FALSE;
|
||||
ANITILE *pNode;
|
||||
INT16 sGridNo;
|
||||
INT32 sGridNo;
|
||||
ANITILE_PARAMS AniParams;
|
||||
UINT16 usMissTileIndex, usMissTileType;
|
||||
STRUCTURE *pStructure = NULL;
|
||||
@@ -3155,19 +3165,19 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UIN
|
||||
// FreeUpAttacker( ubAttackerID );
|
||||
if ( Item[usWeaponIndex].singleshotrocketlauncher )
|
||||
{
|
||||
IgniteExplosion( ubAttackerID, (INT16)CenterX( sGridNo ), (INT16)CenterY( sGridNo ), 0, sGridNo, C1, (INT8)( sZPos >= WALL_HEIGHT ) );
|
||||
IgniteExplosion( ubAttackerID, CenterX( sGridNo ), CenterY( sGridNo ), 0, sGridNo, C1, (INT8)( sZPos >= WALL_HEIGHT ) );
|
||||
}
|
||||
// changed too to use 2 flag to determine
|
||||
else if ( !Item[usWeaponIndex].singleshotrocketlauncher && Item[usWeaponIndex].rocketlauncher)
|
||||
{
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("StructureHit: RPG7 item: %d, Ammo: %d",pAttacker->inv[HANDPOS].usItem , pAttacker->inv[HANDPOS][0]->data.gun.usGunAmmoItem ) );
|
||||
IgniteExplosion( ubAttackerID, (INT16)CenterX( sGridNo ), (INT16)CenterY( sGridNo ), 0, sGridNo, pAttacker->inv[pAttacker->ubAttackingHand ][0]->data.gun.usGunAmmoItem , (INT8)( sZPos >= WALL_HEIGHT ) );
|
||||
IgniteExplosion( ubAttackerID, CenterX( sGridNo ), CenterY( sGridNo ), 0, sGridNo, pAttacker->inv[pAttacker->ubAttackingHand ][0]->data.gun.usGunAmmoItem , (INT8)( sZPos >= WALL_HEIGHT ) );
|
||||
pAttacker->inv[pAttacker->ubAttackingHand ][0]->data.gun.usGunAmmoItem = NONE;
|
||||
}
|
||||
else if ( AmmoTypes[pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.ubGunAmmoType].explosionSize > 1)
|
||||
{
|
||||
// re-routed the Highexplosive value to define exposion type
|
||||
IgniteExplosion( ubAttackerID, (INT16)CenterX( sGridNo ), (INT16)CenterY( sGridNo ), 0, sGridNo, AmmoTypes[pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.ubGunAmmoType].highExplosive , (INT8)( sZPos >= WALL_HEIGHT ) );
|
||||
IgniteExplosion( ubAttackerID, CenterX( sGridNo ), CenterY( sGridNo ), 0, sGridNo, AmmoTypes[pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.ubGunAmmoType].highExplosive , (INT8)( sZPos >= WALL_HEIGHT ) );
|
||||
// pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.usGunAmmoItem = NONE;
|
||||
}
|
||||
|
||||
@@ -3183,7 +3193,7 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UIN
|
||||
//DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("@@@@@@@ Freeing up attacker - end of TANK fire") );
|
||||
//FreeUpAttacker( ubAttackerID );
|
||||
|
||||
IgniteExplosion( ubAttackerID, (INT16)CenterX( sGridNo ), (INT16)CenterY( sGridNo ), 0, sGridNo, TANK_SHELL, (INT8)( sZPos >= WALL_HEIGHT ) );
|
||||
IgniteExplosion( ubAttackerID, CenterX( sGridNo ), CenterY( sGridNo ), 0, sGridNo, TANK_SHELL, (INT8)( sZPos >= WALL_HEIGHT ) );
|
||||
//FreeUpAttacker( (UINT8) ubAttackerID );
|
||||
|
||||
// Moved here to keep ABC >0 as long as possible
|
||||
@@ -3383,11 +3393,11 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UIN
|
||||
}
|
||||
}
|
||||
|
||||
void WindowHit( INT16 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth, BOOLEAN fLargeForce )
|
||||
void WindowHit( INT32 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth, BOOLEAN fLargeForce )
|
||||
{
|
||||
STRUCTURE * pWallAndWindow;
|
||||
DB_STRUCTURE * pWallAndWindowInDB;
|
||||
INT16 sShatterGridNo;
|
||||
INT32 sShatterGridNo;
|
||||
UINT16 usTileIndex;
|
||||
ANITILE * pNode;
|
||||
ANITILE_PARAMS AniParams;
|
||||
@@ -3509,9 +3519,9 @@ void WindowHit( INT16 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth, B
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
{
|
||||
INT16 sRange;
|
||||
INT32 sRange;
|
||||
UINT16 usInHand;
|
||||
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("InRange"));
|
||||
@@ -3521,7 +3531,7 @@ BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
if ( pItemInHand->usItemClass == IC_GUN || pItemInHand->usItemClass == IC_THROWING_KNIFE || (pItemInHand->rocketlauncher && !pItemInHand->singleshotrocketlauncher))
|
||||
{
|
||||
// Determine range
|
||||
sRange = (INT16)GetRangeInCellCoordsFromGridNoDiff( pSoldier->sGridNo, sGridNo );
|
||||
sRange = GetRangeInCellCoordsFromGridNoDiff( pSoldier->sGridNo, sGridNo );
|
||||
|
||||
if ( pItemInHand->usItemClass == IC_THROWING_KNIFE )
|
||||
{
|
||||
@@ -3543,7 +3553,7 @@ BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT16 sGridNo )
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos )
|
||||
UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos )
|
||||
{
|
||||
//SOLDIERTYPE *vicpSoldier;
|
||||
SOLDIERTYPE * pTarget;
|
||||
@@ -4479,7 +4489,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime,
|
||||
return (iChance);
|
||||
}
|
||||
|
||||
UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos )
|
||||
UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos )
|
||||
{
|
||||
UINT16 usTrueState;
|
||||
UINT32 uiChance;
|
||||
@@ -5216,7 +5226,7 @@ void ShotMiss( UINT8 ubAttackerID, INT32 iBullet )
|
||||
|
||||
if ( pAttacker->bTeam == gbPlayerNum )
|
||||
{
|
||||
LocateGridNo( (INT16)pBullet->sGridNo );
|
||||
LocateGridNo( pBullet->sGridNo );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5822,7 +5832,7 @@ INT32 CalcMaxTossRange( SOLDIERTYPE * pSoldier, UINT16 usItem, BOOLEAN fArmed )
|
||||
}
|
||||
|
||||
|
||||
UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos )
|
||||
UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos )
|
||||
{
|
||||
INT32 iChance, iMaxRange, iRange;
|
||||
UINT16 usHandItem;
|
||||
@@ -5930,7 +5940,7 @@ UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTi
|
||||
}
|
||||
|
||||
// calculate actual range (in world units)
|
||||
iRange = (INT16)GetRangeInCellCoordsFromGridNoDiff( pSoldier->sGridNo, sGridNo );
|
||||
iRange = GetRangeInCellCoordsFromGridNoDiff( pSoldier->sGridNo, sGridNo );
|
||||
|
||||
//NumMessage("ACTUAL RANGE = ",range);
|
||||
|
||||
@@ -6102,8 +6112,8 @@ void DishoutQueenSwipeDamage( SOLDIERTYPE *pQueenSoldier )
|
||||
{
|
||||
if ( pSoldier->ubID != pQueenSoldier->ubID )
|
||||
{
|
||||
// ATE: Ok, lets check for some basic things here!
|
||||
if ( pSoldier->stats.bLife >= OKLIFE && pSoldier->sGridNo != NOWHERE && pSoldier->bActive && pSoldier->bInSector )
|
||||
// ATE: Ok, lets check for some basic things here!
|
||||
if ( pSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pSoldier->sGridNo) && pSoldier->bActive && pSoldier->bInSector )
|
||||
{
|
||||
// Get Pyth spaces away....
|
||||
if ( GetRangeInCellCoordsFromGridNoDiff( pQueenSoldier->sGridNo, pSoldier->sGridNo ) <= Weapon[ CREATURE_QUEEN_TENTACLES].usRange )
|
||||
@@ -6400,4 +6410,4 @@ void EstimateBulletsLeft( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj )
|
||||
swprintf(gBulletCount, L"%d", usRealBulletCount);
|
||||
return;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -342,15 +342,15 @@ extern BOOLEAN WriteWeaponStats();
|
||||
|
||||
extern INT32 EffectiveArmour( OBJECTTYPE * pObj );
|
||||
extern INT8 ArmourVersusExplosivesPercent( SOLDIERTYPE * pSoldier );
|
||||
extern BOOLEAN FireWeapon( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo );
|
||||
extern BOOLEAN FireWeapon( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo );
|
||||
extern void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 usDirection, INT16 sXPos, INT16 sYPos, INT16 sZPos, INT16 sRange , UINT8 ubAttackerID, BOOLEAN fHit, UINT8 ubSpecial, UINT8 ubHitLocation );
|
||||
extern void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UINT8 ubAttackerID, UINT16 sXPos, INT16 sYPos, INT16 sZPos, UINT16 usStructureID, INT32 iImpact, BOOLEAN fStopped );
|
||||
extern void WindowHit( INT16 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth, BOOLEAN fLargeForce );
|
||||
extern void WindowHit( INT32 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth, BOOLEAN fLargeForce );
|
||||
extern INT32 BulletImpact( SOLDIERTYPE *pFirer, SOLDIERTYPE * pTarget, UINT8 ubHitLocation, INT32 iImpact, INT16 sHitBy, UINT8 * pubSpecial );
|
||||
extern BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT16 sGridNo );
|
||||
extern BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
extern void ShotMiss( UINT8 ubAttackerID, INT32 iBullet );
|
||||
extern UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
|
||||
extern UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
|
||||
extern UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
|
||||
extern UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
|
||||
extern UINT32 CalcChanceToPunch(SOLDIERTYPE *pAttacker, SOLDIERTYPE * pDefender, INT16 ubAimTime);
|
||||
extern UINT32 CalcChanceToStab(SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, INT16 ubAimTime);
|
||||
UINT32 CalcChanceToSteal(SOLDIERTYPE *pAttacker, SOLDIERTYPE * pDefender, INT16 ubAimTime);
|
||||
@@ -366,17 +366,17 @@ extern INT32 CalcBodyImpactReduction( UINT8 ubAmmoType, UINT8 ubHitLocation );
|
||||
extern INT32 TotalArmourProtection( SOLDIERTYPE *pFirer, SOLDIERTYPE * pTarget, UINT8 ubHitLocation, INT32 iImpact, UINT8 ubAmmoType );
|
||||
extern INT32 ArmourPercent( SOLDIERTYPE * pSoldier );
|
||||
|
||||
extern void GetTargetWorldPositions( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo, FLOAT *pdXPos, FLOAT *pdYPos, FLOAT *pdZPos );
|
||||
extern void GetTargetWorldPositions( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, FLOAT *pdXPos, FLOAT *pdYPos, FLOAT *pdZPos );
|
||||
|
||||
extern BOOLEAN OKFireWeapon( SOLDIERTYPE *pSoldier );
|
||||
extern BOOLEAN CheckForGunJam( SOLDIERTYPE * pSoldier );
|
||||
|
||||
extern INT32 CalcMaxTossRange( SOLDIERTYPE * pSoldier, UINT16 usItem, BOOLEAN fArmed );
|
||||
extern UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT16 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
|
||||
extern UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
|
||||
|
||||
extern void ChangeWeaponMode( SOLDIERTYPE * pSoldier );
|
||||
|
||||
extern BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier , INT16 sTargetGridNo, BOOLEAN fStealing );
|
||||
extern BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo, BOOLEAN fStealing );
|
||||
|
||||
void DishoutQueenSwipeDamage( SOLDIERTYPE *pQueenSoldier );
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user