mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
Convert to SoldierID
This commit is contained in:
+18
-18
@@ -535,18 +535,18 @@ typedef struct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
UINT8 ubDamageFunc; // 1 - gas damage , 2 - explosive damage
|
UINT8 ubDamageFunc; // 1 - gas damage , 2 - explosive damage
|
||||||
UINT16 ubSoldierID;
|
SoldierID ubSoldierID;
|
||||||
UINT16 usExplosiveClassID;
|
UINT16 usExplosiveClassID;
|
||||||
INT16 sSubsequent;
|
INT16 sSubsequent;
|
||||||
BOOL fRecompileMovementCosts;
|
BOOL fRecompileMovementCosts;
|
||||||
INT16 sWoundAmt;
|
INT16 sWoundAmt;
|
||||||
INT16 sBreathAmt;
|
INT16 sBreathAmt;
|
||||||
UINT16 ubAttackerID;
|
SoldierID ubAttackerID;
|
||||||
UINT16 usItem;
|
UINT16 usItem;
|
||||||
INT32 sBombGridNo;
|
INT32 sBombGridNo;
|
||||||
UINT32 uiDist;
|
UINT32 uiDist;
|
||||||
UINT32 uiPreRandomIndex;
|
UINT32 uiPreRandomIndex;
|
||||||
} explosiondamage_struct;
|
} explosiondamage_struct;
|
||||||
|
|
||||||
bullets_table bTable[11][50];
|
bullets_table bTable[11][50];
|
||||||
@@ -2920,7 +2920,7 @@ void recieveMAPCHANGE( RPCParameters *rpcParameters )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 20091002 - OJW - Explosives
|
// 20091002 - OJW - Explosives
|
||||||
void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yPos, float zPos, float xForce, float yForce, float zForce, UINT32 sTargetGridNo, UINT16 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, INT32 iRealObjectID, bool bIsThrownGrenade)
|
void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yPos, float zPos, float xForce, float yForce, float zForce, UINT32 sTargetGridNo, SoldierID ubOwner, UINT8 ubActionCode, UINT32 uiActionData, INT32 iRealObjectID, bool bIsThrownGrenade)
|
||||||
{
|
{
|
||||||
ubOwner = MPEncodeSoldierID(ubOwner); // translate our soldier to the "network" version
|
ubOwner = MPEncodeSoldierID(ubOwner); // translate our soldier to the "network" version
|
||||||
|
|
||||||
@@ -3229,11 +3229,11 @@ void recievePLANTEXPLOSIVE (RPCParameters *rpcParameters)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_detonate_explosive (UINT32 uiWorldIndex, UINT16 ubID)
|
void send_detonate_explosive (UINT32 uiWorldIndex, SoldierID ubID)
|
||||||
{
|
{
|
||||||
ubID = MPEncodeSoldierID(ubID);
|
ubID = MPEncodeSoldierID(ubID);
|
||||||
|
|
||||||
SOLDIERTYPE* pSoldier = MercPtrs[ubID];
|
SOLDIERTYPE* pSoldier = ubID;
|
||||||
if (pSoldier != NULL)
|
if (pSoldier != NULL)
|
||||||
{
|
{
|
||||||
// explosive detonated on this client, notify the other clients
|
// explosive detonated on this client, notify the other clients
|
||||||
@@ -3466,7 +3466,7 @@ void recieveDISARMEXPLOSIVE (RPCParameters *rpcParameters)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID )
|
void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, SoldierID ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID )
|
||||||
{
|
{
|
||||||
spreadeffect_struct sef;
|
spreadeffect_struct sef;
|
||||||
|
|
||||||
@@ -3551,7 +3551,7 @@ void recieveSPREADEFFECT (RPCParameters *rpcParameters)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, INT32 iSmokeEffectID)
|
void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwner, INT32 iSmokeEffectID)
|
||||||
{
|
{
|
||||||
// i'm reusing this struct, the parameters are essentially the same
|
// i'm reusing this struct, the parameters are essentially the same
|
||||||
spreadeffect_struct sef;
|
spreadeffect_struct sef;
|
||||||
@@ -3634,7 +3634,7 @@ void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sS
|
|||||||
client->RPC("sendEXPLOSIONDAMAGE",(const char*)&exp, (int)sizeof(explosiondamage_struct)*8, HIGH_PRIORITY, RELIABLE, 0, UNASSIGNED_SYSTEM_ADDRESS, true, 0, UNASSIGNED_NETWORK_ID,0);
|
client->RPC("sendEXPLOSIONDAMAGE",(const char*)&exp, (int)sizeof(explosiondamage_struct)*8, HIGH_PRIORITY, RELIABLE, 0, UNASSIGNED_SYSTEM_ADDRESS, true, 0, UNASSIGNED_NETWORK_ID,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_explosivedamage( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent )
|
void send_explosivedamage( SoldierID ubPerson, SoldierID ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent )
|
||||||
{
|
{
|
||||||
explosiondamage_struct exp;
|
explosiondamage_struct exp;
|
||||||
exp.ubDamageFunc = 2;
|
exp.ubDamageFunc = 2;
|
||||||
|
|||||||
@@ -111,19 +111,19 @@ void send_stop (EV_S_STOP_MERC *SStopMerc);
|
|||||||
void send_interrupt(SOLDIERTYPE *pSoldier);
|
void send_interrupt(SOLDIERTYPE *pSoldier);
|
||||||
|
|
||||||
// OJW - 20091002 - explosives
|
// OJW - 20091002 - explosives
|
||||||
void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yPos, float zPos, float xForce, float yForce, float zForce, UINT32 sTargetGridNo, UINT16 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, INT32 iRealObjectID, bool bIsThrownGrenade);
|
void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yPos, float zPos, float xForce, float yForce, float zForce, UINT32 sTargetGridNo, SoldierID ubOwner, UINT8 ubActionCode, UINT32 uiActionData, INT32 iRealObjectID, bool bIsThrownGrenade);
|
||||||
void send_grenade_result (float xPos, float yPos, float zPos, INT32 sGridNo, SoldierID ubOwnerID, INT32 iRealObjectID, bool bIsDud);
|
void send_grenade_result (float xPos, float yPos, float zPos, INT32 sGridNo, SoldierID ubOwnerID, INT32 iRealObjectID, bool bIsDud);
|
||||||
void send_plant_explosive (UINT16 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldIndex);
|
void send_plant_explosive (UINT16 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldIndex);
|
||||||
void send_detonate_explosive (UINT32 uiWorldIndex, UINT16 ubID);
|
void send_detonate_explosive (UINT32 uiWorldIndex, SoldierID ubID);
|
||||||
void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID );
|
void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, SoldierID ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID );
|
||||||
void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, INT32 iSmokeEffectID);
|
void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwner, INT32 iSmokeEffectID);
|
||||||
void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner );
|
void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner );
|
||||||
void send_explosivedamage( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent );
|
void send_explosivedamage( SoldierID ubPerson, SoldierID ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent );
|
||||||
void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldIndex, SoldierID ubID);
|
void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldIndex, SoldierID ubID);
|
||||||
|
|
||||||
void OpenChatMsgBox(void);
|
void OpenChatMsgBox(void);
|
||||||
|
|
||||||
INT8 FireBullet( UINT16 ubFirer, BULLET * pBullet, BOOLEAN fFake );
|
INT8 FireBullet( SoldierID ubFirer, BULLET * pBullet, BOOLEAN fFake );
|
||||||
|
|
||||||
void reapplySETTINGS();
|
void reapplySETTINGS();
|
||||||
|
|
||||||
|
|||||||
+33
-33
@@ -30,49 +30,49 @@ typedef struct
|
|||||||
LEVELNODE* pNodes[BULLET_TRACER_MAX_LENGTH];
|
LEVELNODE* pNodes[BULLET_TRACER_MAX_LENGTH];
|
||||||
//afp-end
|
//afp-end
|
||||||
INT32 iBullet;
|
INT32 iBullet;
|
||||||
UINT16 ubFirerID;
|
SoldierID ubFirerID;
|
||||||
UINT16 ubTargetID;
|
SoldierID ubTargetID;
|
||||||
INT8 bStartCubesAboveLevelZ;
|
INT8 bStartCubesAboveLevelZ;
|
||||||
INT8 bEndCubesAboveLevelZ;
|
INT8 bEndCubesAboveLevelZ;
|
||||||
INT32 sGridNo;
|
INT32 sGridNo;
|
||||||
INT16 sUnused;
|
INT16 sUnused;
|
||||||
UINT16 usLastStructureHit;
|
UINT16 usLastStructureHit;
|
||||||
FIXEDPT qCurrX;
|
FIXEDPT qCurrX;
|
||||||
FIXEDPT qCurrY;
|
FIXEDPT qCurrY;
|
||||||
FIXEDPT qCurrZ;
|
FIXEDPT qCurrZ;
|
||||||
FIXEDPT qIncrX;
|
FIXEDPT qIncrX;
|
||||||
FIXEDPT qIncrY;
|
FIXEDPT qIncrY;
|
||||||
FIXEDPT qIncrZ;
|
FIXEDPT qIncrZ;
|
||||||
DOUBLE ddHorizAngle;
|
DOUBLE ddHorizAngle;
|
||||||
INT32 iCurrTileX;
|
INT32 iCurrTileX;
|
||||||
INT32 iCurrTileY;
|
INT32 iCurrTileY;
|
||||||
INT8 bLOSIndexX;
|
INT8 bLOSIndexX;
|
||||||
INT8 bLOSIndexY;
|
INT8 bLOSIndexY;
|
||||||
BOOLEAN fCheckForRoof;
|
BOOLEAN fCheckForRoof;
|
||||||
INT32 iCurrCubesZ;
|
INT32 iCurrCubesZ;
|
||||||
INT32 iLoop;
|
INT32 iLoop;
|
||||||
BOOLEAN fAllocated;
|
BOOLEAN fAllocated;
|
||||||
BOOLEAN fToDelete;
|
BOOLEAN fToDelete;
|
||||||
BOOLEAN fLocated;
|
BOOLEAN fLocated;
|
||||||
BOOLEAN fReal;
|
BOOLEAN fReal;
|
||||||
BOOLEAN fAimed;
|
BOOLEAN fAimed;
|
||||||
UINT32 uiLastUpdate;
|
UINT32 uiLastUpdate;
|
||||||
UINT8 ubTilesPerUpdate;
|
UINT8 ubTilesPerUpdate;
|
||||||
UINT16 usClockTicksPerUpdate;
|
UINT16 usClockTicksPerUpdate;
|
||||||
SOLDIERTYPE *pFirer; // Flugente: WARNING! We cannot assume this will be valid. Check wether ubFirerID is NOBODY first
|
SOLDIERTYPE *pFirer; // Flugente: WARNING! We cannot assume this will be valid. Check wether ubFirerID is NOBODY first
|
||||||
INT32 sOrigGridNo; // HEADROCK HAM 5.1: Original tile does not necessarily have to be the pFirer's tile
|
INT32 sOrigGridNo; // HEADROCK HAM 5.1: Original tile does not necessarily have to be the pFirer's tile
|
||||||
INT32 sTargetGridNo;
|
INT32 sTargetGridNo;
|
||||||
INT16 sHitBy;
|
INT16 sHitBy;
|
||||||
INT32 iImpact;
|
INT32 iImpact;
|
||||||
INT32 iImpactReduction;
|
INT32 iImpactReduction;
|
||||||
INT32 iRange;
|
INT32 iRange;
|
||||||
INT32 iDistanceLimit;
|
INT32 iDistanceLimit;
|
||||||
UINT16 usFlags;
|
UINT16 usFlags;
|
||||||
ANITILE *pAniTile;
|
ANITILE *pAniTile;
|
||||||
ANITILE *pShadowAniTile;
|
ANITILE *pShadowAniTile;
|
||||||
UINT16 ubItemStatus;
|
UINT16 ubItemStatus;
|
||||||
UINT16 fromItem;
|
UINT16 fromItem;
|
||||||
INT32 flash;
|
INT32 flash;
|
||||||
// HEADROCK HAM B2.5: Experimental bullet tracer info. If the new tracer system is activated, this flag tells
|
// HEADROCK HAM B2.5: Experimental bullet tracer info. If the new tracer system is activated, this flag tells
|
||||||
// the bullet animation functions to create a lightpath for this bullet. This means now all bullets in a tracer
|
// the bullet animation functions to create a lightpath for this bullet. This means now all bullets in a tracer
|
||||||
// magazine will cause a lightshow (that's the intended result).
|
// magazine will cause a lightshow (that's the intended result).
|
||||||
@@ -83,7 +83,7 @@ typedef struct
|
|||||||
|
|
||||||
extern UINT32 guiNumBullets;
|
extern UINT32 guiNumBullets;
|
||||||
|
|
||||||
INT32 CreateBullet( UINT16 ubFirerID, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem );
|
INT32 CreateBullet( SoldierID ubFirerID, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem );
|
||||||
void RemoveBullet( INT32 iBullet );
|
void RemoveBullet( INT32 iBullet );
|
||||||
void StopBullet( INT32 iBullet );
|
void StopBullet( INT32 iBullet );
|
||||||
void UpdateBullets( );
|
void UpdateBullets( );
|
||||||
@@ -107,4 +107,4 @@ BOOLEAN SaveBulletStructureToSaveGameFile( HWFILE hFile );
|
|||||||
BOOLEAN LoadBulletStructureFromSavedGameFile( HWFILE hFile );
|
BOOLEAN LoadBulletStructureFromSavedGameFile( HWFILE hFile );
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -661,7 +661,7 @@ void HandleDialogue( )
|
|||||||
SOLDIERTYPE *pSoldier;
|
SOLDIERTYPE *pSoldier;
|
||||||
INT16 sPlayerGridNo;
|
INT16 sPlayerGridNo;
|
||||||
SoldierID ubPlayerID;
|
SoldierID ubPlayerID;
|
||||||
UINT8 ubQualifiedSoldierIDArray[ NUM_MERCS_WITH_NEW_QUOTES ];
|
SoldierID ubQualifiedSoldierIDArray[ NUM_MERCS_WITH_NEW_QUOTES ];
|
||||||
UINT8 ubNumQualifiedMercs=0;
|
UINT8 ubNumQualifiedMercs=0;
|
||||||
UINT8 ubCnt=0;
|
UINT8 ubCnt=0;
|
||||||
|
|
||||||
@@ -693,7 +693,7 @@ void HandleDialogue( )
|
|||||||
//loop through all the mercs
|
//loop through all the mercs
|
||||||
for( ubCnt=0; ubCnt<ubNumQualifiedMercs; ++ubCnt )
|
for( ubCnt=0; ubCnt<ubNumQualifiedMercs; ++ubCnt )
|
||||||
{
|
{
|
||||||
pSoldier = MercPtrs[ ubQualifiedSoldierIDArray[ ubCnt ] ];
|
pSoldier = ubQualifiedSoldierIDArray[ ubCnt ];
|
||||||
|
|
||||||
TacticalCharacterDialogue( pSoldier, QUOTE_JOINING_CAUSE_LEARNED_TO_LIKE_BUDDY_ON_TEAM );
|
TacticalCharacterDialogue( pSoldier, QUOTE_JOINING_CAUSE_LEARNED_TO_LIKE_BUDDY_ON_TEAM );
|
||||||
pSoldier->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_MORRIS;
|
pSoldier->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_MORRIS;
|
||||||
|
|||||||
@@ -5206,10 +5206,10 @@ void CarmenLeavesSectorCallback( void )
|
|||||||
|
|
||||||
void PerformJerryMiloAction301()
|
void PerformJerryMiloAction301()
|
||||||
{
|
{
|
||||||
UINT8 ubMercsPresent[NUM_MERCS_WITH_NEW_QUOTES];
|
SoldierID ubMercsPresent[NUM_MERCS_WITH_NEW_QUOTES];
|
||||||
UINT8 usNumMercsPresent;
|
UINT8 usNumMercsPresent;
|
||||||
SOLDIERTYPE *pSoldier=NULL;
|
SOLDIERTYPE *pSoldier=NULL;
|
||||||
UINT8 ubId;
|
SoldierID ubId;
|
||||||
|
|
||||||
//Get the number and array of the new soldiers
|
//Get the number and array of the new soldiers
|
||||||
usNumMercsPresent = GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( ubMercsPresent, NULL );
|
usNumMercsPresent = GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( ubMercsPresent, NULL );
|
||||||
@@ -5219,7 +5219,7 @@ void PerformJerryMiloAction301()
|
|||||||
{
|
{
|
||||||
ubId = ubMercsPresent[ cnt ];
|
ubId = ubMercsPresent[ cnt ];
|
||||||
|
|
||||||
TacticalCharacterDialogue( MercPtrs[ubId], QUOTE_DEATH_RATE_REFUSAL );
|
TacticalCharacterDialogue( ubId, QUOTE_DEATH_RATE_REFUSAL );
|
||||||
}
|
}
|
||||||
|
|
||||||
//Trigger Jerry Milo's script record 11 ( call action 302 )
|
//Trigger Jerry Milo's script record 11 ( call action 302 )
|
||||||
@@ -5231,8 +5231,8 @@ void PerformJerryMiloAction301()
|
|||||||
|
|
||||||
void PerformJerryMiloAction302()
|
void PerformJerryMiloAction302()
|
||||||
{
|
{
|
||||||
UINT8 ubMercsPresent[NUM_MERCS_WITH_NEW_QUOTES];
|
SoldierID ubMercsPresent[NUM_MERCS_WITH_NEW_QUOTES];
|
||||||
UINT8 usNumMercsPresent;
|
UINT8 usNumMercsPresent;
|
||||||
|
|
||||||
//off jazz
|
//off jazz
|
||||||
//Get the number and array of the new soldiers
|
//Get the number and array of the new soldiers
|
||||||
@@ -5384,11 +5384,11 @@ void HandleSpecificQuoteWhenLeavingNpcTalkMenu()
|
|||||||
|
|
||||||
void HaveQualifiedMercSayQuoteAboutNpcWhenLeavingTalkScreen( UINT8 ubNpcProfileID, UINT32 uiQuoteNum )
|
void HaveQualifiedMercSayQuoteAboutNpcWhenLeavingTalkScreen( UINT8 ubNpcProfileID, UINT32 uiQuoteNum )
|
||||||
{
|
{
|
||||||
UINT8 usNumMercsPresent;
|
UINT8 usNumMercsPresent;
|
||||||
UINT8 SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES];
|
SoldierID SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES];
|
||||||
UINT8 ValidSoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES] = {0};
|
SoldierID ValidSoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES] = {0};
|
||||||
UINT8 ubNumValidSoldiers=0;
|
UINT8 ubNumValidSoldiers=0;
|
||||||
UINT8 ubCnt;
|
UINT8 ubCnt;
|
||||||
SOLDIERTYPE *pSoldier=NULL;
|
SOLDIERTYPE *pSoldier=NULL;
|
||||||
SOLDIERTYPE * pNPC;
|
SOLDIERTYPE * pNPC;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -9304,7 +9304,7 @@ void CheckEquipmentForFragileItemDamage( SOLDIERTYPE *pSoldier, INT32 iDamage )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, UINT16 ubOwner )
|
BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, SoldierID ubOwner )
|
||||||
{
|
{
|
||||||
#ifdef JA2BETAVERSION
|
#ifdef JA2BETAVERSION
|
||||||
CHAR tmpMPDbgString[512];
|
CHAR tmpMPDbgString[512];
|
||||||
|
|||||||
+1
-1
@@ -296,7 +296,7 @@ UINT16 StandardGunListReplacement( UINT16 usGun );
|
|||||||
UINT16 FindReplacementMagazine( UINT8 ubCalibre, UINT16 ubMagSize, UINT8 ubAmmoType);
|
UINT16 FindReplacementMagazine( UINT8 ubCalibre, UINT16 ubMagSize, UINT8 ubAmmoType);
|
||||||
UINT16 FindReplacementMagazineIfNecessary( UINT16 usOldGun, UINT16 usOldAmmo, UINT16 usNewGun );
|
UINT16 FindReplacementMagazineIfNecessary( UINT16 usOldGun, UINT16 usOldAmmo, UINT16 usNewGun );
|
||||||
|
|
||||||
BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, UINT16 ubOwner );
|
BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, SoldierID ubOwner );
|
||||||
|
|
||||||
BOOLEAN CompatibleFaceItem( UINT16 usItem1, UINT16 usItem2 );
|
BOOLEAN CompatibleFaceItem( UINT16 usItem1, UINT16 usItem2 );
|
||||||
|
|
||||||
|
|||||||
+12
-12
@@ -452,7 +452,7 @@ BOOLEAN IsSoldierQualifiedInitialHireMerc( SOLDIERTYPE *pSoldier )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT8 GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( UINT8 *pSoldierIdArray, UINT8 *pProfileIdArray )
|
UINT8 GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( SoldierID *pSoldierIdArray, UINT8 *pProfileIdArray )
|
||||||
{
|
{
|
||||||
SOLDIERTYPE *pSoldier=NULL;
|
SOLDIERTYPE *pSoldier=NULL;
|
||||||
UINT8 usNumMercsPresent=0;
|
UINT8 usNumMercsPresent=0;
|
||||||
@@ -523,10 +523,10 @@ INT16 RandomProfileIdFromNewMercsOnPlayerTeam()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
INT16 RandomSoldierIdFromNewMercsOnPlayerTeam()
|
SoldierID RandomSoldierIdFromNewMercsOnPlayerTeam()
|
||||||
{
|
{
|
||||||
UINT8 usNumMercsPresent;
|
UINT8 usNumMercsPresent;
|
||||||
UINT8 SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES];
|
SoldierID SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES];
|
||||||
|
|
||||||
//Get the number and array of the new soldiers
|
//Get the number and array of the new soldiers
|
||||||
usNumMercsPresent = GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( SoldierIdArray, NULL );
|
usNumMercsPresent = GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( SoldierIdArray, NULL );
|
||||||
@@ -536,20 +536,20 @@ INT16 RandomSoldierIdFromNewMercsOnPlayerTeam()
|
|||||||
if( usNumMercsPresent > 0 )
|
if( usNumMercsPresent > 0 )
|
||||||
{
|
{
|
||||||
//return a random merc from the array
|
//return a random merc from the array
|
||||||
return( (INT16)( SoldierIdArray[ Random( usNumMercsPresent ) ] ));
|
return( ( SoldierIdArray[ Random( usNumMercsPresent ) ] ));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return( -1 );
|
return( NOBODY );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT8 RandomArrayOfQualifiedMercs( UINT8 *pRandomSoldierIdArray )
|
UINT8 RandomArrayOfQualifiedMercs( UINT8 *pRandomSoldierIdArray )
|
||||||
{
|
{
|
||||||
UINT8 usNumMercsPresent;
|
UINT8 usNumMercsPresent;
|
||||||
UINT8 SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES];
|
SoldierID SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES];
|
||||||
BOOLEAN UsedArray[NUM_MERCS_WITH_NEW_QUOTES];
|
BOOLEAN UsedArray[NUM_MERCS_WITH_NEW_QUOTES];
|
||||||
BOOLEAN fFound=FALSE;
|
BOOLEAN fFound=FALSE;
|
||||||
UINT8 ubRand;
|
UINT8 ubRand;
|
||||||
|
|
||||||
memset( UsedArray, 0, NUM_MERCS_WITH_NEW_QUOTES );
|
memset( UsedArray, 0, NUM_MERCS_WITH_NEW_QUOTES );
|
||||||
@@ -1060,8 +1060,8 @@ void HandlePlayingQuoteWhenHiringNpc( UINT8 ubProfile )
|
|||||||
|
|
||||||
BOOLEAN SayQuoteFromAllNewHiredMercButDoGastonLast( UINT8 ubProfile, UINT32 uiQuoteNum )
|
BOOLEAN SayQuoteFromAllNewHiredMercButDoGastonLast( UINT8 ubProfile, UINT32 uiQuoteNum )
|
||||||
{
|
{
|
||||||
UINT8 usNumMercsPresent;
|
UINT8 usNumMercsPresent;
|
||||||
UINT8 SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES];
|
SoldierID SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES];
|
||||||
SOLDIERTYPE *pSoldier=NULL;
|
SOLDIERTYPE *pSoldier=NULL;
|
||||||
|
|
||||||
//Get an array of the mercs on the team
|
//Get an array of the mercs on the team
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ typedef struct
|
|||||||
extern BOOLEAN gfFirstTimeInGameHeliCrash;
|
extern BOOLEAN gfFirstTimeInGameHeliCrash;
|
||||||
|
|
||||||
INT16 RandomProfileIdFromNewMercsOnPlayerTeam();
|
INT16 RandomProfileIdFromNewMercsOnPlayerTeam();
|
||||||
INT16 RandomSoldierIdFromNewMercsOnPlayerTeam();
|
SoldierID RandomSoldierIdFromNewMercsOnPlayerTeam();
|
||||||
UINT8 GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( UINT8 *pSoldierIdArray, UINT8 *pProfileIdArray );
|
UINT8 GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( SoldierID *pSoldierIdArray, UINT8 *pProfileIdArray );
|
||||||
BOOLEAN IsSoldierQualifiedMerc( SOLDIERTYPE *pSoldier );
|
BOOLEAN IsSoldierQualifiedMerc( SOLDIERTYPE *pSoldier );
|
||||||
BOOLEAN IsSoldierQualifiedInitialHireMerc( SOLDIERTYPE *pSoldier );
|
BOOLEAN IsSoldierQualifiedInitialHireMerc( SOLDIERTYPE *pSoldier );
|
||||||
BOOLEAN IsSoldierQualifiedMercForSeeingPowerGenFan( SOLDIERTYPE *pSoldier );
|
BOOLEAN IsSoldierQualifiedMercForSeeingPowerGenFan( SOLDIERTYPE *pSoldier );
|
||||||
|
|||||||
+42
-43
@@ -2435,7 +2435,7 @@ INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT32 sGr
|
|||||||
{
|
{
|
||||||
FLOAT dStartZPos, dEndZPos;
|
FLOAT dStartZPos, dEndZPos;
|
||||||
INT16 sX, sY, sX2, sY2;
|
INT16 sX, sY, sX2, sY2;
|
||||||
UINT16 ubTargetID;
|
SoldierID ubTargetID;
|
||||||
BOOLEAN fOk;
|
BOOLEAN fOk;
|
||||||
|
|
||||||
CHECKF( pStartSoldier );
|
CHECKF( pStartSoldier );
|
||||||
@@ -2455,7 +2455,7 @@ INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT32 sGr
|
|||||||
if (ubTargetID != NOBODY)
|
if (ubTargetID != NOBODY)
|
||||||
{
|
{
|
||||||
// there's a merc there; do a soldier-to-soldier test
|
// there's a merc there; do a soldier-to-soldier test
|
||||||
return( SoldierToSoldierLineOfSightTest( pStartSoldier, MercPtrs[ubTargetID], bAware, iTileSightLimit, LOS_POS, adjustForSight) );
|
return( SoldierToSoldierLineOfSightTest( pStartSoldier, ubTargetID, bAware, iTileSightLimit, LOS_POS, adjustForSight) );
|
||||||
}
|
}
|
||||||
// else... assume standing height
|
// else... assume standing height
|
||||||
dEndZPos = STANDING_LOS_POS + bLevel * HEIGHT_UNITS;
|
dEndZPos = STANDING_LOS_POS + bLevel * HEIGHT_UNITS;
|
||||||
@@ -4640,7 +4640,7 @@ void CalculateFiringIncrementsSimple( DOUBLE ddHorizAngle, DOUBLE ddVerticAngle,
|
|||||||
pBullet->qIncrZ = FloatToFixed( (FLOAT) ( sin( ddVerticAngle ) / sin( (PI/2) - ddVerticAngle ) * HEIGHTUNITS_PER_CELL ) );//dnl ch60 010913
|
pBullet->qIncrZ = FloatToFixed( (FLOAT) ( sin( ddVerticAngle ) / sin( (PI/2) - ddVerticAngle ) * HEIGHTUNITS_PER_CELL ) );//dnl ch60 010913
|
||||||
}
|
}
|
||||||
|
|
||||||
INT8 FireBullet( UINT16 ubFirer, BULLET * pBullet, BOOLEAN fFake )
|
INT8 FireBullet( SoldierID ubFirer, BULLET * pBullet, BOOLEAN fFake )
|
||||||
{
|
{
|
||||||
//DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("FireBullet"));
|
//DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("FireBullet"));
|
||||||
|
|
||||||
@@ -4654,7 +4654,7 @@ INT8 FireBullet( UINT16 ubFirer, BULLET * pBullet, BOOLEAN fFake )
|
|||||||
pBullet->sGridNo = MAPROWCOLTOPOS( pBullet->iCurrTileY, pBullet->iCurrTileX );
|
pBullet->sGridNo = MAPROWCOLTOPOS( pBullet->iCurrTileY, pBullet->iCurrTileX );
|
||||||
|
|
||||||
if ( ubFirer != NOBODY )
|
if ( ubFirer != NOBODY )
|
||||||
pBullet->pFirer = MercPtrs[ ubFirer ];
|
pBullet->pFirer = ubFirer;
|
||||||
else
|
else
|
||||||
pBullet->pFirer = NULL;
|
pBullet->pFirer = NULL;
|
||||||
|
|
||||||
@@ -5775,7 +5775,7 @@ INT8 FireBulletGivenTarget( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOA
|
|||||||
// Note that this function does not make provisions for Fake Firing. There is no need for it, and it would needlessly
|
// Note that this function does not make provisions for Fake Firing. There is no need for it, and it would needlessly
|
||||||
// complicate things anyway.
|
// complicate things anyway.
|
||||||
// Also note we receive start coordinates from the bomb itself, because there's nowhere else to get them.
|
// Also note we receive start coordinates from the bomb itself, because there's nowhere else to get them.
|
||||||
INT8 FireFragmentGivenTarget( UINT16 ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem )
|
INT8 FireFragmentGivenTarget( SoldierID ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem )
|
||||||
{
|
{
|
||||||
// Artificial...
|
// Artificial...
|
||||||
dStartZ++;
|
dStartZ++;
|
||||||
@@ -6986,9 +6986,8 @@ INT8 ChanceToGetThrough(SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOAT dE
|
|||||||
|
|
||||||
void MoveBullet( INT32 iBullet )
|
void MoveBullet( INT32 iBullet )
|
||||||
{
|
{
|
||||||
BULLET *pBullet;
|
BULLET *pBullet;
|
||||||
|
FIXEDPT qLandHeight;
|
||||||
FIXEDPT qLandHeight;
|
|
||||||
INT32 iCurrAboveLevelZ;
|
INT32 iCurrAboveLevelZ;
|
||||||
INT32 iCurrCubesAboveLevelZ;
|
INT32 iCurrCubesAboveLevelZ;
|
||||||
INT16 sDesiredLevel;
|
INT16 sDesiredLevel;
|
||||||
@@ -6997,48 +6996,48 @@ void MoveBullet( INT32 iBullet )
|
|||||||
INT32 iOldTileY;
|
INT32 iOldTileY;
|
||||||
INT32 iOldCubesZ;
|
INT32 iOldCubesZ;
|
||||||
|
|
||||||
MAP_ELEMENT * pMapElement;
|
MAP_ELEMENT *pMapElement;
|
||||||
STRUCTURE * pStructure;
|
STRUCTURE *pStructure;
|
||||||
STRUCTURE * pRoofStructure = NULL;
|
STRUCTURE *pRoofStructure = NULL;
|
||||||
|
|
||||||
FIXEDPT qLastZ;
|
FIXEDPT qLastZ;
|
||||||
|
|
||||||
SOLDIERTYPE * pTarget;
|
SOLDIERTYPE *pTarget;
|
||||||
UINT16 ubTargetID;
|
SoldierID ubTargetID;
|
||||||
BOOLEAN fIntended;
|
BOOLEAN fIntended;
|
||||||
BOOLEAN fStopped;
|
BOOLEAN fStopped;
|
||||||
INT8 bOldLOSIndexX;
|
INT8 bOldLOSIndexX;
|
||||||
INT8 bOldLOSIndexY;
|
INT8 bOldLOSIndexY;
|
||||||
|
|
||||||
UINT32 uiTileInc = 0;
|
UINT32 uiTileInc = 0;
|
||||||
UINT32 uiTime;
|
UINT32 uiTime;
|
||||||
|
|
||||||
INT8 bDir;
|
INT8 bDir;
|
||||||
INT32 iGridNo, iAdjGridNo;
|
INT32 iGridNo, iAdjGridNo;
|
||||||
|
|
||||||
INT32 iRemainingImpact;
|
INT32 iRemainingImpact;
|
||||||
|
|
||||||
FIXEDPT qDistToTravelX;
|
FIXEDPT qDistToTravelX;
|
||||||
FIXEDPT qDistToTravelY;
|
FIXEDPT qDistToTravelY;
|
||||||
INT32 iStepsToTravelX;
|
INT32 iStepsToTravelX;
|
||||||
INT32 iStepsToTravelY;
|
INT32 iStepsToTravelY;
|
||||||
INT32 iStepsToTravel;
|
INT32 iStepsToTravel;
|
||||||
|
|
||||||
INT32 iNumLocalStructures;
|
INT32 iNumLocalStructures;
|
||||||
INT32 iStructureLoop;
|
INT32 iStructureLoop;
|
||||||
UINT32 uiChanceOfHit;
|
UINT32 uiChanceOfHit;
|
||||||
|
|
||||||
BOOLEAN fResolveHit;
|
BOOLEAN fResolveHit;
|
||||||
|
|
||||||
INT32 i;
|
INT32 i;
|
||||||
BOOLEAN fGoingOver = FALSE;
|
BOOLEAN fGoingOver = FALSE;
|
||||||
BOOLEAN fHitStructure;
|
BOOLEAN fHitStructure;
|
||||||
|
|
||||||
FIXEDPT qWallHeight;
|
FIXEDPT qWallHeight;
|
||||||
FIXEDPT qWindowBottomHeight;
|
FIXEDPT qWindowBottomHeight;
|
||||||
FIXEDPT qWindowTopHeight;
|
FIXEDPT qWindowTopHeight;
|
||||||
|
|
||||||
UINT16 lastriotshieldholder = NOBODY; // added by Flugente
|
SoldierID lastriotshieldholder = NOBODY; // added by Flugente
|
||||||
|
|
||||||
pBullet = GetBulletPtr( iBullet );
|
pBullet = GetBulletPtr( iBullet );
|
||||||
|
|
||||||
@@ -7358,7 +7357,7 @@ void MoveBullet( INT32 iBullet )
|
|||||||
ubTargetID = WhoIsThere2( iAdjGridNo, (INT8) sDesiredLevel );
|
ubTargetID = WhoIsThere2( iAdjGridNo, (INT8) sDesiredLevel );
|
||||||
if (ubTargetID != NOBODY)
|
if (ubTargetID != NOBODY)
|
||||||
{
|
{
|
||||||
pTarget = MercPtrs[ ubTargetID ];
|
pTarget = ubTargetID;
|
||||||
if ( IS_MERC_BODY_TYPE( pTarget ) && (pBullet->ubFirerID == NOBODY || pBullet->pFirer->bSide != pTarget->bSide) )
|
if ( IS_MERC_BODY_TYPE( pTarget ) && (pBullet->ubFirerID == NOBODY || pBullet->pFirer->bSide != pTarget->bSide) )
|
||||||
{
|
{
|
||||||
// buckshot has only a 1 in 2 chance of applying a suppression point
|
// buckshot has only a 1 in 2 chance of applying a suppression point
|
||||||
@@ -9911,7 +9910,7 @@ UINT32 CalcCounterForceAccuracy(SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, UINT
|
|||||||
// If we can't see the target, but buddies can see it, CF-Accuracy drops by 50%
|
// If we can't see the target, but buddies can see it, CF-Accuracy drops by 50%
|
||||||
// If we can't see the target and neither can buddies, CF-Accuracy drops by 75%
|
// If we can't see the target and neither can buddies, CF-Accuracy drops by 75%
|
||||||
|
|
||||||
UINT16 ubTargetID = WhoIsThere2( pShooter->sTargetGridNo, pShooter->bTargetLevel ); // Target ubID
|
SoldierID ubTargetID = WhoIsThere2( pShooter->sTargetGridNo, pShooter->bTargetLevel ); // Target ubID
|
||||||
INT16 sDistVis = pShooter->GetMaxDistanceVisible(pShooter->sTargetGridNo, pShooter->bTargetLevel, CALC_FROM_ALL_DIRS ) * CELL_X_SIZE;
|
INT16 sDistVis = pShooter->GetMaxDistanceVisible(pShooter->sTargetGridNo, pShooter->bTargetLevel, CALC_FROM_ALL_DIRS ) * CELL_X_SIZE;
|
||||||
gbForceWeaponNotReady = true;
|
gbForceWeaponNotReady = true;
|
||||||
INT16 sDistVisNoScope = pShooter->GetMaxDistanceVisible(pShooter->sTargetGridNo, pShooter->bTargetLevel, CALC_FROM_ALL_DIRS ) * CELL_X_SIZE;
|
INT16 sDistVisNoScope = pShooter->GetMaxDistanceVisible(pShooter->sTargetGridNo, pShooter->bTargetLevel, CALC_FROM_ALL_DIRS ) * CELL_X_SIZE;
|
||||||
@@ -9920,12 +9919,12 @@ UINT32 CalcCounterForceAccuracy(SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, UINT
|
|||||||
|
|
||||||
INT32 iSightRange = 0;
|
INT32 iSightRange = 0;
|
||||||
if (ubTargetID != NOBODY)
|
if (ubTargetID != NOBODY)
|
||||||
iSightRange = SoldierToSoldierLineOfSightTest( pShooter, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pShooter->bAimShotLocation, false );
|
iSightRange = SoldierToSoldierLineOfSightTest( pShooter, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pShooter->bAimShotLocation, false );
|
||||||
if (iSightRange == 0) { // didn't do a bodypart-based test or can't see specific body part aimed at
|
if (iSightRange == 0) { // didn't do a bodypart-based test or can't see specific body part aimed at
|
||||||
iSightRange = SoldierTo3DLocationLineOfSightTest( pShooter, pShooter->sTargetGridNo, pShooter->bTargetLevel, pShooter->bTargetCubeLevel, TRUE, NO_DISTANCE_LIMIT, false );
|
iSightRange = SoldierTo3DLocationLineOfSightTest( pShooter, pShooter->sTargetGridNo, pShooter->bTargetLevel, pShooter->bTargetCubeLevel, TRUE, NO_DISTANCE_LIMIT, false );
|
||||||
}
|
}
|
||||||
if (iSightRange == 0) { // Can't see the target but we still need to know what the sight range would be if we could so we can deal with cover penalties
|
if (iSightRange == 0) { // Can't see the target but we still need to know what the sight range would be if we could so we can deal with cover penalties
|
||||||
iSightRange = SoldierToSoldierLineOfSightTest( pShooter, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pShooter->bAimShotLocation, false, true );
|
iSightRange = SoldierToSoldierLineOfSightTest( pShooter, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pShooter->bAimShotLocation, false, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Modify iSightRange for scope use
|
// Modify iSightRange for scope use
|
||||||
|
|||||||
+1
-1
@@ -69,7 +69,7 @@ INT8 FireBulletGivenTarget( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOA
|
|||||||
// HEADROCK HAM 4: Changed the name of one argument to avoid confusion with the new CTH system.
|
// HEADROCK HAM 4: Changed the name of one argument to avoid confusion with the new CTH system.
|
||||||
INT8 FireBulletGivenTargetNCTH( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usHandItem, INT16 sApertureRatio, BOOLEAN fBuckshot, BOOLEAN fFake );
|
INT8 FireBulletGivenTargetNCTH( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usHandItem, INT16 sApertureRatio, BOOLEAN fBuckshot, BOOLEAN fFake );
|
||||||
// HEADROCK HAM 5: Function for fragments ejected from an explosion.
|
// HEADROCK HAM 5: Function for fragments ejected from an explosion.
|
||||||
INT8 FireFragmentGivenTarget( UINT16 ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem );
|
INT8 FireFragmentGivenTarget( SoldierID ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem );
|
||||||
|
|
||||||
// Flugente: fire a shot from a gun that has no user (used for traps with attached guns)
|
// Flugente: fire a shot from a gun that has no user (used for traps with attached guns)
|
||||||
INT8 FireBulletGivenTargetTrapOnly( SOLDIERTYPE* pThrower, OBJECTTYPE* pObj, INT32 gridno, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, INT16 sHitBy);
|
INT8 FireBulletGivenTargetTrapOnly( SOLDIERTYPE* pThrower, OBJECTTYPE* pObj, INT32 gridno, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, INT16 sHitBy);
|
||||||
|
|||||||
@@ -25194,13 +25194,13 @@ BOOLEAN MajorTrait( UINT8 uiSkillTraitNumber )
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN GetRadioOperatorSignal( UINT8 usOwner, INT32* psTargetGridNo )
|
BOOLEAN GetRadioOperatorSignal( SoldierID usOwner, INT32* psTargetGridNo )
|
||||||
{
|
{
|
||||||
// get the 'real owner'
|
// get the 'real owner'
|
||||||
if ( usOwner > 1 )
|
if ( usOwner > 1 )
|
||||||
{
|
{
|
||||||
// a merc planted this - if he's a radio operator, use his gridno
|
// a merc planted this - if he's a radio operator, use his gridno
|
||||||
SOLDIERTYPE* pSoldier = MercPtrs[usOwner - 2];
|
SOLDIERTYPE* pSoldier = (usOwner - 2);
|
||||||
|
|
||||||
if ( pSoldier && pSoldier->CanUseRadio( FALSE ) && pSoldier->bActive && pSoldier->bInSector && (pSoldier->sSectorX == gWorldSectorX) && (pSoldier->sSectorY == gWorldSectorY) && (pSoldier->bSectorZ == gbWorldSectorZ) )
|
if ( pSoldier && pSoldier->CanUseRadio( FALSE ) && pSoldier->bActive && pSoldier->bInSector && (pSoldier->sSectorX == gWorldSectorX) && (pSoldier->sSectorY == gWorldSectorY) && (pSoldier->bSectorZ == gbWorldSectorZ) )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2227,7 +2227,7 @@ BOOLEAN DecideAltAnimForBigMerc( SOLDIERTYPE * pSoldier );
|
|||||||
// added by Flugente
|
// added by Flugente
|
||||||
BOOLEAN TwoStagedTrait( UINT8 uiSkillTraitNumber ); // determine if this (new) trait has two stages
|
BOOLEAN TwoStagedTrait( UINT8 uiSkillTraitNumber ); // determine if this (new) trait has two stages
|
||||||
BOOLEAN MajorTrait( UINT8 uiSkillTraitNumber ); // determine if this is a major trait
|
BOOLEAN MajorTrait( UINT8 uiSkillTraitNumber ); // determine if this is a major trait
|
||||||
BOOLEAN GetRadioOperatorSignal(UINT8 usOwner, INT32* psTargetGridNo); // retrieve the gridno of a radio operator who (or whose team) ordered an artillery strike
|
BOOLEAN GetRadioOperatorSignal( SoldierID usOwner, INT32* psTargetGridNo); // retrieve the gridno of a radio operator who (or whose team) ordered an artillery strike
|
||||||
BOOLEAN IsValidArtilleryOrderSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT8 bTeam ); // can an artillery strike be ordered FROM this sector
|
BOOLEAN IsValidArtilleryOrderSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT8 bTeam ); // can an artillery strike be ordered FROM this sector
|
||||||
BOOLEAN SectorJammed();
|
BOOLEAN SectorJammed();
|
||||||
BOOLEAN PlayerTeamIsScanning();
|
BOOLEAN PlayerTeamIsScanning();
|
||||||
|
|||||||
@@ -114,10 +114,10 @@ typedef struct
|
|||||||
{
|
{
|
||||||
UINT16 ubOutOfTurnPersons;
|
UINT16 ubOutOfTurnPersons;
|
||||||
|
|
||||||
INT16 InterruptOnlyGuynum;
|
SoldierID InterruptOnlyGuynum;
|
||||||
INT16 sWhoThrewRock;
|
INT16 sWhoThrewRock;
|
||||||
BOOLEAN InterruptsAllowed;
|
BOOLEAN InterruptsAllowed;
|
||||||
BOOLEAN fHiddenInterrupt;
|
BOOLEAN fHiddenInterrupt;
|
||||||
UINT8 ubLastInterruptedGuy;
|
UINT8 ubLastInterruptedGuy;
|
||||||
|
|
||||||
UINT8 ubFiller[16];
|
UINT8 ubFiller[16];
|
||||||
|
|||||||
+31
-31
@@ -2444,7 +2444,7 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
|||||||
//CHAR8 zBurstString[512];
|
//CHAR8 zBurstString[512];
|
||||||
UINT8 ubDirection;
|
UINT8 ubDirection;
|
||||||
INT32 sNewGridNo;
|
INT32 sNewGridNo;
|
||||||
UINT16 ubMerc;
|
SoldierID ubMerc;
|
||||||
BOOLEAN fGonnaHit = FALSE;
|
BOOLEAN fGonnaHit = FALSE;
|
||||||
FLOAT dExpGain = 0;
|
FLOAT dExpGain = 0;
|
||||||
UINT32 uiDepreciateTest;
|
UINT32 uiDepreciateTest;
|
||||||
@@ -2967,14 +2967,14 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
|||||||
|
|
||||||
if ( ubMerc != NOBODY )
|
if ( ubMerc != NOBODY )
|
||||||
{
|
{
|
||||||
if ( gAnimControl[ MercPtrs[ ubMerc ]->usAnimState ].ubHeight != ANIM_PRONE )
|
if ( gAnimControl[ ubMerc->usAnimState ].ubHeight != ANIM_PRONE )
|
||||||
{
|
{
|
||||||
// Increment attack counter...
|
// Increment attack counter...
|
||||||
// gTacticalStatus.ubAttackBusyCount++;
|
// gTacticalStatus.ubAttackBusyCount++;
|
||||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("Incrementing Attack: Exaust from LAW", gTacticalStatus.ubAttackBusyCount ) );
|
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("Incrementing Attack: Exaust from LAW", gTacticalStatus.ubAttackBusyCount ) );
|
||||||
DebugAttackBusy( "Incrementing Attack: Exaust from LAW\n" );
|
DebugAttackBusy( "Incrementing Attack: Exaust from LAW\n" );
|
||||||
|
|
||||||
MercPtrs[ ubMerc ]->EVENT_SoldierGotHit( MINI_GRENADE, 10, 200, pSoldier->ubDirection, 0, pSoldier->ubID, 0, ANIM_CROUCH, 0, sNewGridNo );
|
ubMerc->EVENT_SoldierGotHit( MINI_GRENADE, 10, 200, pSoldier->ubDirection, 0, pSoldier->ubID, 0, ANIM_CROUCH, 0, sNewGridNo );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3232,7 +3232,7 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
|||||||
// CHAR8 zBurstString[512];
|
// CHAR8 zBurstString[512];
|
||||||
UINT8 ubDirection;
|
UINT8 ubDirection;
|
||||||
INT32 sNewGridNo;
|
INT32 sNewGridNo;
|
||||||
UINT16 ubMerc;
|
SoldierID ubMerc;
|
||||||
BOOLEAN fGonnaHit = FALSE;
|
BOOLEAN fGonnaHit = FALSE;
|
||||||
UINT16 usExpGain = 0;
|
UINT16 usExpGain = 0;
|
||||||
UINT32 uiDepreciateTest;
|
UINT32 uiDepreciateTest;
|
||||||
@@ -3785,14 +3785,14 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
|||||||
|
|
||||||
if ( ubMerc != NOBODY )
|
if ( ubMerc != NOBODY )
|
||||||
{
|
{
|
||||||
if ( gAnimControl[ MercPtrs[ ubMerc ]->usAnimState ].ubHeight != ANIM_PRONE )
|
if ( gAnimControl[ ubMerc->usAnimState ].ubHeight != ANIM_PRONE )
|
||||||
{
|
{
|
||||||
// Increment attack counter...
|
// Increment attack counter...
|
||||||
// gTacticalStatus.ubAttackBusyCount++;
|
// gTacticalStatus.ubAttackBusyCount++;
|
||||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("Incrementing Attack: Exaust from LAW", gTacticalStatus.ubAttackBusyCount ) );
|
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("Incrementing Attack: Exaust from LAW", gTacticalStatus.ubAttackBusyCount ) );
|
||||||
DebugAttackBusy( "Incrementing Attack: Exaust from LAW\n" );
|
DebugAttackBusy( "Incrementing Attack: Exaust from LAW\n" );
|
||||||
|
|
||||||
MercPtrs[ ubMerc ]->EVENT_SoldierGotHit( MINI_GRENADE, 10, 200, pSoldier->ubDirection, 0, pSoldier->ubID, 0, ANIM_CROUCH, 0, sNewGridNo );
|
ubMerc->EVENT_SoldierGotHit( MINI_GRENADE, 10, 200, pSoldier->ubDirection, 0, pSoldier->ubID, 0, ANIM_CROUCH, 0, sNewGridNo );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4097,15 +4097,15 @@ BOOLEAN UseBlade( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
|||||||
PossiblyStartEnemyTaunt( pTargetSoldier, TAUNT_GOT_MISSED_BLADE, pSoldier->ubID );
|
PossiblyStartEnemyTaunt( pTargetSoldier, TAUNT_GOT_MISSED_BLADE, pSoldier->ubID );
|
||||||
|
|
||||||
// if it was another team shooting at someone under our control
|
// if it was another team shooting at someone under our control
|
||||||
if ( (pSoldier->bTeam != Menptr[ pTargetSoldier->ubID ].bTeam ) )
|
if ( (pSoldier->bTeam != pTargetSoldier->ubID->bTeam ) )
|
||||||
{
|
{
|
||||||
if (pTargetSoldier->bTeam == gbPlayerNum)
|
if (pTargetSoldier->bTeam == gbPlayerNum)
|
||||||
{
|
{
|
||||||
// AGILITY GAIN (10): Target avoids a knife attack
|
// AGILITY GAIN (10): Target avoids a knife attack
|
||||||
// Snap: stat gains should match stat requirements
|
// Snap: stat gains should match stat requirements
|
||||||
StatChange( MercPtrs[ pTargetSoldier->ubID ], DEXTAMT, 15, FALSE);
|
StatChange( pTargetSoldier->ubID, DEXTAMT, 15, FALSE);
|
||||||
StatChange( MercPtrs[ pTargetSoldier->ubID ], AGILAMT, 5, FALSE);
|
StatChange( pTargetSoldier->ubID, AGILAMT, 5, FALSE);
|
||||||
StatChange( MercPtrs[ pTargetSoldier->ubID ], STRAMT, 5, FALSE);
|
StatChange( pTargetSoldier->ubID, STRAMT, 5, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 0verhaul: Another case that is handled by the animation transition system.
|
// 0verhaul: Another case that is handled by the animation transition system.
|
||||||
@@ -4940,10 +4940,10 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, BOOLEAN fStea
|
|||||||
|
|
||||||
BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
|
BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
|
||||||
{
|
{
|
||||||
UINT32 uiHitChance;
|
UINT32 uiHitChance;
|
||||||
INT8 bLoop;
|
INT8 bLoop;
|
||||||
UINT16 ubTargetID;
|
SoldierID ubTargetID;
|
||||||
SOLDIERTYPE * pTargetSoldier;
|
SOLDIERTYPE *pTargetSoldier;
|
||||||
//INT16 sAPCost = 0;//dnl ch72 180913
|
//INT16 sAPCost = 0;//dnl ch72 180913
|
||||||
|
|
||||||
uiHitChance = CalcThrownChanceToHit( pSoldier, sTargetGridNo, pSoldier->aiData.bAimTime, AIM_SHOT_TORSO );
|
uiHitChance = CalcThrownChanceToHit( pSoldier, sTargetGridNo, pSoldier->aiData.bAimTime, AIM_SHOT_TORSO );
|
||||||
@@ -4965,7 +4965,7 @@ BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pTargetSoldier = MercPtrs[ ubTargetID ];
|
pTargetSoldier = ubTargetID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( pTargetSoldier && pTargetSoldier->bTeam == pSoldier->bTeam )
|
if ( pTargetSoldier && pTargetSoldier->bTeam == pSoldier->bTeam )
|
||||||
@@ -4987,7 +4987,7 @@ BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
|
|||||||
pTargetSoldier = NULL;
|
pTargetSoldier = NULL;
|
||||||
if ( ubTargetID != NOBODY )
|
if ( ubTargetID != NOBODY )
|
||||||
{
|
{
|
||||||
pTargetSoldier = MercPtrs[ ubTargetID ];
|
pTargetSoldier = ubTargetID;
|
||||||
if ( pTargetSoldier->bTeam != pSoldier->bTeam )
|
if ( pTargetSoldier->bTeam != pSoldier->bTeam )
|
||||||
{
|
{
|
||||||
usNumTargets++;
|
usNumTargets++;
|
||||||
@@ -5315,7 +5315,7 @@ BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
|
|||||||
return( TRUE );
|
return( TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN DoSpecialEffectAmmoMiss( UINT16 ubAttackerID, UINT16 usWeaponIndex, INT32 sGridNo, INT16 sXPos, INT16 sYPos, INT16 sZPos, BOOLEAN fSoundOnly, BOOLEAN fFreeupAttacker, INT32 iBullet )
|
BOOLEAN DoSpecialEffectAmmoMiss( SoldierID ubAttackerID, UINT16 usWeaponIndex, INT32 sGridNo, INT16 sXPos, INT16 sYPos, INT16 sZPos, BOOLEAN fSoundOnly, BOOLEAN fFreeupAttacker, INT32 iBullet )
|
||||||
{
|
{
|
||||||
ANITILE_PARAMS AniParams;
|
ANITILE_PARAMS AniParams;
|
||||||
UINT8 ubAmmoType = 0;
|
UINT8 ubAmmoType = 0;
|
||||||
@@ -5324,7 +5324,7 @@ BOOLEAN DoSpecialEffectAmmoMiss( UINT16 ubAttackerID, UINT16 usWeaponIndex, INT3
|
|||||||
// Flugente: check for underbarrel weapons and use that object if necessary
|
// Flugente: check for underbarrel weapons and use that object if necessary
|
||||||
if ( ubAttackerID != NOBODY )
|
if ( ubAttackerID != NOBODY )
|
||||||
{
|
{
|
||||||
OBJECTTYPE* pObj = MercPtrs[ ubAttackerID ]->GetUsedWeapon( &MercPtrs[ ubAttackerID ]->inv[ MercPtrs[ ubAttackerID ]->ubAttackingHand ] );
|
OBJECTTYPE* pObj = ubAttackerID->GetUsedWeapon( &ubAttackerID->inv[ ubAttackerID->ubAttackingHand ] );
|
||||||
|
|
||||||
ubAmmoType = (*pObj)[0]->data.gun.ubGunAmmoType;
|
ubAmmoType = (*pObj)[0]->data.gun.ubGunAmmoType;
|
||||||
usItem = (*pObj).usItem;
|
usItem = (*pObj).usItem;
|
||||||
@@ -6036,7 +6036,7 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, Sol
|
|||||||
|
|
||||||
// Set attacker ID
|
// Set attacker ID
|
||||||
pNode->usMissAnimationPlayed = usMissTileType;
|
pNode->usMissAnimationPlayed = usMissTileType;
|
||||||
pNode->ubAttackerMissed = ubAttackerID;
|
pNode->ubAttackerMissed = ubAttackerID;
|
||||||
// Adjust for absolute positioning
|
// Adjust for absolute positioning
|
||||||
pNode->pLevelNode->uiFlags |= LEVELNODE_USEABSOLUTEPOS;
|
pNode->pLevelNode->uiFlags |= LEVELNODE_USEABSOLUTEPOS;
|
||||||
pNode->pLevelNode->sRelativeX = sXPos;
|
pNode->pLevelNode->sRelativeX = sXPos;
|
||||||
@@ -6278,7 +6278,7 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi
|
|||||||
UINT16 usInHand;
|
UINT16 usInHand;
|
||||||
OBJECTTYPE * pInHand;
|
OBJECTTYPE * pInHand;
|
||||||
INT16 sDistVis, sDistVisNoScope;
|
INT16 sDistVis, sDistVisNoScope;
|
||||||
UINT16 ubTargetID;
|
SoldierID ubTargetID;
|
||||||
bool fCantSeeTarget = false;
|
bool fCantSeeTarget = false;
|
||||||
FLOAT scopeRangeMod = 0.0f;
|
FLOAT scopeRangeMod = 0.0f;
|
||||||
|
|
||||||
@@ -6327,7 +6327,7 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi
|
|||||||
|
|
||||||
if (ubTargetID != NOBODY && (pSoldier->aiData.bOppList[ubTargetID] == SEEN_CURRENTLY || gbPublicOpplist[pSoldier->bTeam][ubTargetID] == SEEN_CURRENTLY))
|
if (ubTargetID != NOBODY && (pSoldier->aiData.bOppList[ubTargetID] == SEEN_CURRENTLY || gbPublicOpplist[pSoldier->bTeam][ubTargetID] == SEEN_CURRENTLY))
|
||||||
{
|
{
|
||||||
iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false );
|
iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false );
|
||||||
}
|
}
|
||||||
if (iSightRange == 0)
|
if (iSightRange == 0)
|
||||||
{
|
{
|
||||||
@@ -6338,7 +6338,7 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi
|
|||||||
{
|
{
|
||||||
// Can't see the target but we still need to know what the sight range would be if we could so we can deal with cover penalties
|
// Can't see the target but we still need to know what the sight range would be if we could so we can deal with cover penalties
|
||||||
if (ubTargetID != NOBODY)
|
if (ubTargetID != NOBODY)
|
||||||
iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false, true );
|
iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false, true );
|
||||||
fCantSeeTarget = true;
|
fCantSeeTarget = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6639,8 +6639,8 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime,
|
|||||||
INT16 bonusProgression[8] = {500,500,600,600,750,750,750,1000}; //Aiming progression
|
INT16 bonusProgression[8] = {500,500,600,600,750,750,750,1000}; //Aiming progression
|
||||||
UINT16 usInHand, usShockPenalty, MIN_RANGE_FOR_FULL_COWER, MAX_TARGET_COWERING_PENALTY;
|
UINT16 usInHand, usShockPenalty, MIN_RANGE_FOR_FULL_COWER, MAX_TARGET_COWERING_PENALTY;
|
||||||
UINT16 iBulletsLeft, iTracersFired = 0, iBulletsPerTracer, iBulletsSinceLastTracer=0, iRoundsFiredPreviously;
|
UINT16 iBulletsLeft, iTracersFired = 0, iBulletsPerTracer, iBulletsSinceLastTracer=0, iRoundsFiredPreviously;
|
||||||
INT8 bBandaged, maxClickBonus = 10, AIM_PENALTY_PER_TARGET_SHOCK;
|
INT8 bBandaged, maxClickBonus = 10, AIM_PENALTY_PER_TARGET_SHOCK;
|
||||||
UINT16 ubTargetID;
|
SoldierID ubTargetID;
|
||||||
UINT8 bLightLevel, ubCoweringDivisor, ubAutoPenaltySinceLastTracer = 0;
|
UINT8 bLightLevel, ubCoweringDivisor, ubAutoPenaltySinceLastTracer = 0;
|
||||||
FLOAT maxBonus, aimTimeBonus, scopeRangeMod = 0.0f, iAimBonus;
|
FLOAT maxBonus, aimTimeBonus, scopeRangeMod = 0.0f, iAimBonus;
|
||||||
bool fCantSeeTarget = false, fCoverObscured = false;
|
bool fCantSeeTarget = false, fCoverObscured = false;
|
||||||
@@ -6685,7 +6685,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime,
|
|||||||
iScopeVisionRangeBonus = GetTotalVisionRangeBonus(pSoldier, bLightLevel); // not an actual range value, simply a modifier for range calculations
|
iScopeVisionRangeBonus = GetTotalVisionRangeBonus(pSoldier, bLightLevel); // not an actual range value, simply a modifier for range calculations
|
||||||
|
|
||||||
if (ubTargetID != NOBODY && ( pSoldier->aiData.bOppList[ubTargetID] == SEEN_CURRENTLY || gbPublicOpplist[pSoldier->bTeam][ubTargetID] == SEEN_CURRENTLY ) )
|
if (ubTargetID != NOBODY && ( pSoldier->aiData.bOppList[ubTargetID] == SEEN_CURRENTLY || gbPublicOpplist[pSoldier->bTeam][ubTargetID] == SEEN_CURRENTLY ) )
|
||||||
iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false );
|
iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false );
|
||||||
|
|
||||||
if (iSightRange == 0)
|
if (iSightRange == 0)
|
||||||
{
|
{
|
||||||
@@ -6698,7 +6698,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime,
|
|||||||
{
|
{
|
||||||
// Can't see the target but we still need to know what the sight range would be if we could so we can deal with cover penalties
|
// Can't see the target but we still need to know what the sight range would be if we could so we can deal with cover penalties
|
||||||
if (ubTargetID != NOBODY)
|
if (ubTargetID != NOBODY)
|
||||||
iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false, true );
|
iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false, true );
|
||||||
fCantSeeTarget = true;
|
fCantSeeTarget = true;
|
||||||
fCoverObscured = false;
|
fCoverObscured = false;
|
||||||
}
|
}
|
||||||
@@ -9061,7 +9061,7 @@ INT32 HTHImpact( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTarget, INT32 iHitBy, BO
|
|||||||
return( iImpact );
|
return( iImpact );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShotMiss( UINT16 ubAttackerID, INT32 iBullet )
|
void ShotMiss( SoldierID ubAttackerID, INT32 iBullet )
|
||||||
{
|
{
|
||||||
BOOLEAN fDoMissForGun = FALSE;
|
BOOLEAN fDoMissForGun = FALSE;
|
||||||
SOLDIERTYPE* pAttacker = NULL;
|
SOLDIERTYPE* pAttacker = NULL;
|
||||||
@@ -9070,7 +9070,7 @@ void ShotMiss( UINT16 ubAttackerID, INT32 iBullet )
|
|||||||
if ( ubAttackerID == NOBODY )
|
if ( ubAttackerID == NOBODY )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pAttacker = MercPtrs[ ubAttackerID ];
|
pAttacker = ubAttackerID;
|
||||||
|
|
||||||
if ( pAttacker->ubOppNum != NOBODY )
|
if ( pAttacker->ubOppNum != NOBODY )
|
||||||
{
|
{
|
||||||
@@ -9086,7 +9086,7 @@ void ShotMiss( UINT16 ubAttackerID, INT32 iBullet )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( Weapon[ MercPtrs[ ubAttackerID ]->usAttackingWeapon ].ubWeaponClass )
|
switch( Weapon[ ubAttackerID->usAttackingWeapon ].ubWeaponClass )
|
||||||
{
|
{
|
||||||
case HANDGUNCLASS:
|
case HANDGUNCLASS:
|
||||||
case RIFLECLASS:
|
case RIFLECLASS:
|
||||||
@@ -9095,11 +9095,11 @@ void ShotMiss( UINT16 ubAttackerID, INT32 iBullet )
|
|||||||
case MGCLASS:
|
case MGCLASS:
|
||||||
|
|
||||||
// Guy has missed, play random sound
|
// Guy has missed, play random sound
|
||||||
if ( MercPtrs[ ubAttackerID ]->bTeam == gbPlayerNum )
|
if ( ubAttackerID->bTeam == gbPlayerNum )
|
||||||
{
|
{
|
||||||
if ( Random(40) == 0 )
|
if ( Random(40) == 0 )
|
||||||
{
|
{
|
||||||
MercPtrs[ ubAttackerID ]->DoMercBattleSound( BATTLE_SOUND_CURSE1 );
|
ubAttackerID->DoMercBattleSound( BATTLE_SOUND_CURSE1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fDoMissForGun = TRUE;
|
fDoMissForGun = TRUE;
|
||||||
@@ -9142,7 +9142,7 @@ void ShotMiss( UINT16 ubAttackerID, INT32 iBullet )
|
|||||||
// PLAY SOUND AND FLING DEBRIS
|
// PLAY SOUND AND FLING DEBRIS
|
||||||
// RANDOMIZE SOUND SYSTEM
|
// RANDOMIZE SOUND SYSTEM
|
||||||
|
|
||||||
if ( !DoSpecialEffectAmmoMiss( ubAttackerID, MercPtrs[ ubAttackerID ]->usAttackingWeapon, NOWHERE, 0, 0, 0, TRUE, TRUE, 0 ) )
|
if ( !DoSpecialEffectAmmoMiss( ubAttackerID, ubAttackerID->usAttackingWeapon, NOWHERE, 0, 0, 0, TRUE, TRUE, 0 ) )
|
||||||
{
|
{
|
||||||
PlayJA2Sample( MISS_1 + Random(8), RATE_11025, HIGHVOLUME, 1, MIDDLEPAN );
|
PlayJA2Sample( MISS_1 + Random(8), RATE_11025, HIGHVOLUME, 1, MIDDLEPAN );
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -459,7 +459,7 @@ extern void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStat
|
|||||||
extern void WindowHit( INT32 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth, BOOLEAN fLargeForce );
|
extern void WindowHit( INT32 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth, BOOLEAN fLargeForce );
|
||||||
// HEADROCK HAM 5.1: Moved to Bullets.h
|
// HEADROCK HAM 5.1: Moved to Bullets.h
|
||||||
extern BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
extern BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||||
extern void ShotMiss( UINT16 ubAttackerID, INT32 iBullet );
|
extern void ShotMiss( SoldierID ubAttackerID, INT32 iBullet );
|
||||||
extern UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
|
extern UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
|
||||||
extern UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
|
extern UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos );
|
||||||
extern UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos, INT8 bTargetLevel, UINT16 usAnimState);//dnl ch59 180813
|
extern UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos, INT8 bTargetLevel, UINT16 usAnimState);//dnl ch59 180813
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ void RecountBullets(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
INT32 CreateBullet( UINT16 ubFirerID, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem )
|
INT32 CreateBullet( SoldierID ubFirerID, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem )
|
||||||
{
|
{
|
||||||
INT32 iBulletIndex;
|
INT32 iBulletIndex;
|
||||||
BULLET *pBullet;
|
BULLET *pBullet;
|
||||||
@@ -245,7 +245,7 @@ void LocateBullet( INT32 iBulletIndex )
|
|||||||
// Check if a bad guy fired!
|
// Check if a bad guy fired!
|
||||||
if ( gBullets[ iBulletIndex ].ubFirerID != NOBODY )
|
if ( gBullets[ iBulletIndex ].ubFirerID != NOBODY )
|
||||||
{
|
{
|
||||||
if ( MercPtrs[ gBullets[ iBulletIndex ].ubFirerID ]->bSide == gbPlayerNum )
|
if ( gBullets[ iBulletIndex ].ubFirerID->bSide == gbPlayerNum )
|
||||||
{
|
{
|
||||||
if ( !gBullets[ iBulletIndex ].fLocated )
|
if ( !gBullets[ iBulletIndex ].fLocated )
|
||||||
{
|
{
|
||||||
@@ -633,7 +633,7 @@ BOOLEAN LoadBulletStructureFromSavedGameFile( HWFILE hFile )
|
|||||||
//Set some parameters
|
//Set some parameters
|
||||||
gBullets[usCnt].uiLastUpdate = 0;
|
gBullets[usCnt].uiLastUpdate = 0;
|
||||||
if( gBullets[usCnt].ubFirerID != NOBODY )
|
if( gBullets[usCnt].ubFirerID != NOBODY )
|
||||||
gBullets[usCnt].pFirer = &Menptr[ gBullets[usCnt].ubFirerID ];
|
gBullets[usCnt].pFirer = gBullets[usCnt].ubFirerID;
|
||||||
else
|
else
|
||||||
gBullets[usCnt].pFirer = NULL;
|
gBullets[usCnt].pFirer = NULL;
|
||||||
|
|
||||||
|
|||||||
+10
-10
@@ -5670,7 +5670,7 @@ BOOLEAN DuskLight(void)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID)
|
||||||
{
|
{
|
||||||
INT8 bPersonalKnowledge;
|
INT8 bPersonalKnowledge;
|
||||||
INT8 bPublicKnowledge;
|
INT8 bPublicKnowledge;
|
||||||
@@ -5694,7 +5694,7 @@ BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
INT8 Knowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID)
|
||||||
{
|
{
|
||||||
if (!pSoldier || ubOpponentID == NOBODY)
|
if (!pSoldier || ubOpponentID == NOBODY)
|
||||||
{
|
{
|
||||||
@@ -5709,7 +5709,7 @@ INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
|||||||
return PublicKnowledge(pSoldier->bTeam, ubOpponentID);
|
return PublicKnowledge(pSoldier->bTeam, ubOpponentID);
|
||||||
}
|
}
|
||||||
|
|
||||||
INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
INT32 KnownLocation(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID)
|
||||||
{
|
{
|
||||||
if (!pSoldier || ubOpponentID == NOBODY)
|
if (!pSoldier || ubOpponentID == NOBODY)
|
||||||
{
|
{
|
||||||
@@ -5724,7 +5724,7 @@ INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
|||||||
return KnownPublicLocation(pSoldier->bTeam, ubOpponentID);
|
return KnownPublicLocation(pSoldier->bTeam, ubOpponentID);
|
||||||
}
|
}
|
||||||
|
|
||||||
INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
INT8 KnownLevel(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID)
|
||||||
{
|
{
|
||||||
if (!pSoldier || ubOpponentID == NOBODY)
|
if (!pSoldier || ubOpponentID == NOBODY)
|
||||||
{
|
{
|
||||||
@@ -5739,7 +5739,7 @@ INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
|||||||
return KnownPublicLevel(pSoldier->bTeam, ubOpponentID);
|
return KnownPublicLevel(pSoldier->bTeam, ubOpponentID);
|
||||||
}
|
}
|
||||||
|
|
||||||
INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID)
|
||||||
{
|
{
|
||||||
if (!pSoldier || ubOpponentID == NOBODY)
|
if (!pSoldier || ubOpponentID == NOBODY)
|
||||||
{
|
{
|
||||||
@@ -5749,7 +5749,7 @@ INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
|||||||
return pSoldier->aiData.bOppList[ubOpponentID];
|
return pSoldier->aiData.bOppList[ubOpponentID];
|
||||||
}
|
}
|
||||||
|
|
||||||
INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID)
|
||||||
{
|
{
|
||||||
if (!pSoldier || ubOpponentID == NOBODY)
|
if (!pSoldier || ubOpponentID == NOBODY)
|
||||||
{
|
{
|
||||||
@@ -5763,7 +5763,7 @@ INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
|||||||
return gsLastKnownOppLoc[pSoldier->ubID][ubOpponentID];
|
return gsLastKnownOppLoc[pSoldier->ubID][ubOpponentID];
|
||||||
}
|
}
|
||||||
|
|
||||||
INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID)
|
||||||
{
|
{
|
||||||
if (!pSoldier || ubOpponentID == NOBODY)
|
if (!pSoldier || ubOpponentID == NOBODY)
|
||||||
{
|
{
|
||||||
@@ -5773,7 +5773,7 @@ INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID)
|
|||||||
return gbLastKnownOppLevel[pSoldier->ubID][ubOpponentID];
|
return gbLastKnownOppLevel[pSoldier->ubID][ubOpponentID];
|
||||||
}
|
}
|
||||||
|
|
||||||
INT8 PublicKnowledge(UINT8 bTeam, UINT16 ubOpponentID)
|
INT8 PublicKnowledge(UINT8 bTeam, SoldierID ubOpponentID)
|
||||||
{
|
{
|
||||||
if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY)
|
if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY)
|
||||||
{
|
{
|
||||||
@@ -5783,7 +5783,7 @@ INT8 PublicKnowledge(UINT8 bTeam, UINT16 ubOpponentID)
|
|||||||
return gbPublicOpplist[bTeam][ubOpponentID];
|
return gbPublicOpplist[bTeam][ubOpponentID];
|
||||||
}
|
}
|
||||||
|
|
||||||
INT32 KnownPublicLocation(UINT8 bTeam, UINT16 ubOpponentID)
|
INT32 KnownPublicLocation(UINT8 bTeam, SoldierID ubOpponentID)
|
||||||
{
|
{
|
||||||
if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY)
|
if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY)
|
||||||
{
|
{
|
||||||
@@ -5797,7 +5797,7 @@ INT32 KnownPublicLocation(UINT8 bTeam, UINT16 ubOpponentID)
|
|||||||
return gsPublicLastKnownOppLoc[bTeam][ubOpponentID];
|
return gsPublicLastKnownOppLoc[bTeam][ubOpponentID];
|
||||||
}
|
}
|
||||||
|
|
||||||
INT8 KnownPublicLevel(UINT8 bTeam, UINT16 ubOpponentID)
|
INT8 KnownPublicLevel(UINT8 bTeam, SoldierID ubOpponentID)
|
||||||
{
|
{
|
||||||
if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY)
|
if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY)
|
||||||
{
|
{
|
||||||
|
|||||||
+10
-10
@@ -387,19 +387,19 @@ BOOLEAN AICheckSpecialRole(SOLDIERTYPE *pSoldier);
|
|||||||
// Knowledge functions
|
// Knowledge functions
|
||||||
// *************************************************************
|
// *************************************************************
|
||||||
|
|
||||||
INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID);
|
INT8 Knowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID);
|
||||||
INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID);
|
INT32 KnownLocation(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID);
|
||||||
INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID);
|
INT8 KnownLevel(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID);
|
||||||
|
|
||||||
BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID);
|
BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID);
|
||||||
|
|
||||||
INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID);
|
INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID);
|
||||||
INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID);
|
INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID);
|
||||||
INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID);
|
INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID);
|
||||||
|
|
||||||
INT8 PublicKnowledge(UINT8 bTeam, UINT16 ubOpponentID);
|
INT8 PublicKnowledge(UINT8 bTeam, SoldierID ubOpponentID);
|
||||||
INT32 KnownPublicLocation(UINT8 bTeam, UINT16 ubOpponentID);
|
INT32 KnownPublicLocation(UINT8 bTeam, SoldierID ubOpponentID);
|
||||||
INT8 KnownPublicLevel(UINT8 bTeam, UINT16 ubOpponentID);
|
INT8 KnownPublicLevel(UINT8 bTeam, SoldierID ubOpponentID);
|
||||||
|
|
||||||
#define MAX_FLANKS_RED 25
|
#define MAX_FLANKS_RED 25
|
||||||
#define MAX_FLANKS_YELLOW 25
|
#define MAX_FLANKS_YELLOW 25
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ BOOLEAN HookerInRoom( UINT16 usRoom );
|
|||||||
// MODULE FOR EXPLOSIONS
|
// MODULE FOR EXPLOSIONS
|
||||||
|
|
||||||
// Spreads the effects of explosions...
|
// Spreads the effects of explosions...
|
||||||
BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, UINT16 ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID );
|
BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, SoldierID ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID );
|
||||||
|
|
||||||
// Flashbang effect on soldier
|
// Flashbang effect on soldier
|
||||||
UINT8 DetermineFlashbangEffect( SOLDIERTYPE *pSoldier, INT8 ubExplosionDir, BOOLEAN fInBuilding);
|
UINT8 DetermineFlashbangEffect( SOLDIERTYPE *pSoldier, INT8 ubExplosionDir, BOOLEAN fInBuilding);
|
||||||
@@ -192,7 +192,7 @@ UINT32 guiNumExplosions = 0;
|
|||||||
INT32 GetFreeExplosion( void );
|
INT32 GetFreeExplosion( void );
|
||||||
void RecountExplosions( void );
|
void RecountExplosions( void );
|
||||||
void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion );
|
void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion );
|
||||||
void HandleBuldingDestruction( INT32 sGridNo, UINT16 ubOwner );
|
void HandleBuldingDestruction( INT32 sGridNo, SoldierID ubOwner );
|
||||||
|
|
||||||
#ifdef JA2UB
|
#ifdef JA2UB
|
||||||
//JA25 UB
|
//JA25 UB
|
||||||
@@ -650,13 +650,13 @@ void HandleFencePartnerCheck( INT32 sStructGridNo )
|
|||||||
|
|
||||||
INT8 ExplosiveDamageStructureAtGridNo( STRUCTURE * pCurrent, STRUCTURE **ppNextCurrent, INT32 sGridNo, INT16 sWoundAmt,
|
INT8 ExplosiveDamageStructureAtGridNo( STRUCTURE * pCurrent, STRUCTURE **ppNextCurrent, INT32 sGridNo, INT16 sWoundAmt,
|
||||||
UINT32 uiDist,
|
UINT32 uiDist,
|
||||||
BOOLEAN *pfRecompileMovementCosts, BOOLEAN fOnlyWalls, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT16 ubOwner, INT8 bLevel,
|
BOOLEAN *pfRecompileMovementCosts, BOOLEAN fOnlyWalls, BOOLEAN fSubSequentMultiTilesTransitionDamage, SoldierID ubOwner, INT8 bLevel,
|
||||||
UINT8 ubReason )
|
UINT8 ubReason )
|
||||||
{
|
{
|
||||||
#ifdef JA2BETAVERSION
|
#ifdef JA2BETAVERSION
|
||||||
if (is_networked) {
|
if (is_networked) {
|
||||||
CHAR tmpMPDbgString[512];
|
CHAR tmpMPDbgString[512];
|
||||||
sprintf(tmpMPDbgString,"ExplosiveDamageStructureAtGridNo ( sGridNo : %i , sWoundAmt : %i , uiDist : %i , fRecompMoveCosts : %i , fOnlyWalls : %i , SubsMulTilTransDmg : %i , ubOwner : %i , bLevel : %i )\n", sGridNo, sWoundAmt , uiDist, (int)*pfRecompileMovementCosts , (int)fOnlyWalls , (int)fSubSequentMultiTilesTransitionDamage , ubOwner , bLevel );
|
sprintf(tmpMPDbgString,"ExplosiveDamageStructureAtGridNo ( sGridNo : %i , sWoundAmt : %i , uiDist : %i , fRecompMoveCosts : %i , fOnlyWalls : %i , SubsMulTilTransDmg : %i , ubOwner : %i , bLevel : %i )\n", sGridNo, sWoundAmt , uiDist, (int)*pfRecompileMovementCosts , (int)fOnlyWalls , (int)fSubSequentMultiTilesTransitionDamage , ubOwner.i , bLevel );
|
||||||
MPDebugMsg(tmpMPDbgString);
|
MPDebugMsg(tmpMPDbgString);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1329,14 +1329,14 @@ STRUCTURE *gStruct;
|
|||||||
|
|
||||||
void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist,
|
void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist,
|
||||||
BOOLEAN *pfRecompileMovementCosts,
|
BOOLEAN *pfRecompileMovementCosts,
|
||||||
BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT16 ubOwner,
|
BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, SoldierID ubOwner,
|
||||||
INT8 bLevel,
|
INT8 bLevel,
|
||||||
UINT8 ubReason )
|
UINT8 ubReason )
|
||||||
{
|
{
|
||||||
#ifdef JA2BETAVERSION
|
#ifdef JA2BETAVERSION
|
||||||
if (is_networked) {
|
if (is_networked) {
|
||||||
CHAR tmpMPDbgString[512];
|
CHAR tmpMPDbgString[512];
|
||||||
sprintf(tmpMPDbgString,"ExplosiveDamageGridNo ( sGridNo : %i , sWoundAmt : %i , uiDist : %i , fRecompileMoveCosts : %i , fOnlyWalls : %i , MultiStructSpecialFlag : %i ,fSubsequentMultiTilesTransDmg : %i , ubOwner : %i , bLevel : %i )\n", sGridNo, sWoundAmt ,uiDist, (int)*pfRecompileMovementCosts , (int)fOnlyWalls , bMultiStructSpecialFlag , (int)fSubSequentMultiTilesTransitionDamage , ubOwner , bLevel );
|
sprintf(tmpMPDbgString,"ExplosiveDamageGridNo ( sGridNo : %i , sWoundAmt : %i , uiDist : %i , fRecompileMoveCosts : %i , fOnlyWalls : %i , MultiStructSpecialFlag : %i ,fSubsequentMultiTilesTransDmg : %i , ubOwner : %i , bLevel : %i )\n", sGridNo, sWoundAmt ,uiDist, (int)*pfRecompileMovementCosts , (int)fOnlyWalls , bMultiStructSpecialFlag , (int)fSubSequentMultiTilesTransitionDamage , ubOwner.i , bLevel );
|
||||||
MPDebugMsg(tmpMPDbgString);
|
MPDebugMsg(tmpMPDbgString);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1511,12 +1511,12 @@ void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient )
|
BOOLEAN DamageSoldierFromBlast( SoldierID ubPerson, SoldierID ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient )
|
||||||
{
|
{
|
||||||
// OJW - 20091028
|
// OJW - 20091028
|
||||||
if (is_networked && is_client)
|
if (is_networked && is_client)
|
||||||
{
|
{
|
||||||
SOLDIERTYPE* pSoldier = MercPtrs[ubPerson];
|
SOLDIERTYPE* pSoldier = ubPerson;
|
||||||
if (pSoldier != NULL)
|
if (pSoldier != NULL)
|
||||||
{
|
{
|
||||||
// only the owner of a merc may send damage (as this takes into account equipped armor)
|
// only the owner of a merc may send damage (as this takes into account equipped armor)
|
||||||
@@ -1532,9 +1532,9 @@ BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGrid
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef JA2BETAVERSION
|
#ifdef JA2BETAVERSION
|
||||||
CHAR tmpMPDbgString[512];
|
CHAR tmpMPDbgString[512];
|
||||||
sprintf(tmpMPDbgString,"DamageSoldierFromBlast ( ubPerson : %i , ubOwner : %i , sBombGridNo : %i , sWoundAmt : %i , sBreathAmt : %i , uiDist : %i , usItem : %i , sSubs : %i , fFromRemoteClient : %i )\n",ubPerson, ubOwner , sBombGridNo , sWoundAmt , sBreathAmt , uiDist , usItem , sSubsequent , fFromRemoteClient );
|
sprintf(tmpMPDbgString,"DamageSoldierFromBlast ( ubPerson : %i , ubOwner : %i , sBombGridNo : %i , sWoundAmt : %i , sBreathAmt : %i , uiDist : %i , usItem : %i , sSubs : %i , fFromRemoteClient : %i )\n",ubPerson.i, ubOwner.i , sBombGridNo , sWoundAmt , sBreathAmt , uiDist , usItem , sSubsequent , fFromRemoteClient );
|
||||||
MPDebugMsg(tmpMPDbgString);
|
MPDebugMsg(tmpMPDbgString);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1547,7 +1547,7 @@ BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGrid
|
|||||||
BOOLEAN fFlashbang = Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_FLASHBANG;
|
BOOLEAN fFlashbang = Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_FLASHBANG;
|
||||||
UINT16 usHalfExplosionRadius;
|
UINT16 usHalfExplosionRadius;
|
||||||
|
|
||||||
pSoldier = MercPtrs[ ubPerson ]; // someone is here, and they're gonna get hurt
|
pSoldier = ubPerson; // someone is here, and they're gonna get hurt
|
||||||
|
|
||||||
if (!pSoldier->bActive || !pSoldier->bInSector || !pSoldier->stats.bLife )
|
if (!pSoldier->bActive || !pSoldier->bInSector || !pSoldier->stats.bLife )
|
||||||
return( FALSE );
|
return( FALSE );
|
||||||
@@ -1612,29 +1612,29 @@ BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGrid
|
|||||||
// SANDRO - STOMP traits
|
// SANDRO - STOMP traits
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( ubOwner < TOTAL_SOLDIERS && (MercPtrs[ ubOwner ] != NULL) && gGameOptions.fNewTraitSystem)
|
if ( ubOwner < TOTAL_SOLDIERS && gGameOptions.fNewTraitSystem)
|
||||||
{
|
{
|
||||||
// Demolitions damage bonus with bombs and mines
|
// Demolitions damage bonus with bombs and mines
|
||||||
if ( HAS_SKILL_TRAIT( MercPtrs[ ubOwner ], DEMOLITIONS_NT ) &&
|
if ( HAS_SKILL_TRAIT( ubOwner, DEMOLITIONS_NT ) &&
|
||||||
Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL && Item[usItem].usItemClass == IC_BOMB &&
|
Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL && Item[usItem].usItemClass == IC_BOMB &&
|
||||||
(!ItemIsAttachment(usItem) || ItemIsMine(usItem)))
|
(!ItemIsAttachment(usItem) || ItemIsMine(usItem)))
|
||||||
{
|
{
|
||||||
sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubDEDamageOfBombsAndMines) / 100.0f + 0.5f);
|
sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubDEDamageOfBombsAndMines) / 100.0f + 0.5f);
|
||||||
}
|
}
|
||||||
// Heavy Weapons trait bonus damage to tanks
|
// Heavy Weapons trait bonus damage to tanks
|
||||||
if ( HAS_SKILL_TRAIT( MercPtrs[ubOwner], HEAVY_WEAPONS_NT ) && (ARMED_VEHICLE( pSoldier ) || ENEMYROBOT( pSoldier )) &&
|
if ( HAS_SKILL_TRAIT( ubOwner, HEAVY_WEAPONS_NT ) && (ARMED_VEHICLE( pSoldier ) || ENEMYROBOT( pSoldier )) &&
|
||||||
Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL )
|
Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL )
|
||||||
{
|
{
|
||||||
sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageTanksBonusPercent * NUM_SKILL_TRAITS( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT )) / 100.0f + 0.5f); // +30%
|
sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageTanksBonusPercent * NUM_SKILL_TRAITS( ubOwner, HEAVY_WEAPONS_NT )) / 100.0f + 0.5f); // +30%
|
||||||
}
|
}
|
||||||
// Heavy Weapons trait bonus damage with rocket, grenade launchers and mortar
|
// Heavy Weapons trait bonus damage with rocket, grenade launchers and mortar
|
||||||
else if ( HAS_SKILL_TRAIT( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT ) &&
|
else if ( HAS_SKILL_TRAIT( ubOwner, HEAVY_WEAPONS_NT ) &&
|
||||||
Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL &&
|
Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL &&
|
||||||
((Item[usItem].usItemClass == IC_BOMB && ItemIsAttachment(usItem) && !ItemIsMine(usItem) ) || // mortar shells
|
((Item[usItem].usItemClass == IC_BOMB && ItemIsAttachment(usItem) && !ItemIsMine(usItem) ) || // mortar shells
|
||||||
(Item[usItem].usItemClass == IC_GRENADE && (ItemIsGLgrenade(usItem) || ItemIsElectronic(usItem)) ) || // rockets for rocketlaunchers (I haven't found any other way)
|
(Item[usItem].usItemClass == IC_GRENADE && (ItemIsGLgrenade(usItem) || ItemIsElectronic(usItem)) ) || // rockets for rocketlaunchers (I haven't found any other way)
|
||||||
(Item[usItem].usItemClass == IC_LAUNCHER ) || ItemIsRocketLauncher(usItem) || ItemIsSingleShotRocketLauncher(usItem) ) )
|
(Item[usItem].usItemClass == IC_LAUNCHER ) || ItemIsRocketLauncher(usItem) || ItemIsSingleShotRocketLauncher(usItem) ) )
|
||||||
{
|
{
|
||||||
sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageBonusPercentForHW * NUM_SKILL_TRAITS( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT )) / 100.0f + 0.5f); // +15%
|
sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageBonusPercentForHW * NUM_SKILL_TRAITS( ubOwner, HEAVY_WEAPONS_NT )) / 100.0f + 0.5f); // +15%
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1890,9 +1890,9 @@ BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGrid
|
|||||||
|
|
||||||
pSoldier->ubMiscSoldierFlags |= SOLDIER_MISC_HURT_BY_EXPLOSION;
|
pSoldier->ubMiscSoldierFlags |= SOLDIER_MISC_HURT_BY_EXPLOSION;
|
||||||
|
|
||||||
if ( ubOwner != NOBODY && MercPtrs[ ubOwner ]->bTeam == gbPlayerNum && pSoldier->bTeam != gbPlayerNum )
|
if ( ubOwner != NOBODY && ubOwner->bTeam == gbPlayerNum && pSoldier->bTeam != gbPlayerNum )
|
||||||
{
|
{
|
||||||
ProcessImplicationsOfPCAttack( MercPtrs[ ubOwner ], &pSoldier, REASON_EXPLOSION );
|
ProcessImplicationsOfPCAttack( ubOwner, &pSoldier, REASON_EXPLOSION );
|
||||||
}
|
}
|
||||||
|
|
||||||
return( TRUE );
|
return( TRUE );
|
||||||
@@ -2163,7 +2163,7 @@ BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, IN
|
|||||||
return( fRecompileMovementCosts );
|
return( fRecompileMovementCosts );
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, UINT16 ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID )
|
BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, SoldierID ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID )
|
||||||
{
|
{
|
||||||
#ifdef JA2BETAVERSION
|
#ifdef JA2BETAVERSION
|
||||||
if (is_networked) {
|
if (is_networked) {
|
||||||
@@ -2174,7 +2174,7 @@ BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usIte
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
INT16 sWoundAmt = 0,sBreathAmt = 0, /* sNewWoundAmt = 0, sNewBreathAmt = 0, */ sStructDmgAmt;
|
INT16 sWoundAmt = 0,sBreathAmt = 0, /* sNewWoundAmt = 0, sNewBreathAmt = 0, */ sStructDmgAmt;
|
||||||
UINT16 ubPerson;
|
SoldierID ubPerson;
|
||||||
SOLDIERTYPE *pSoldier;
|
SOLDIERTYPE *pSoldier;
|
||||||
EXPLOSIVETYPE *pExplosive;
|
EXPLOSIVETYPE *pExplosive;
|
||||||
INT16 sX, sY;
|
INT16 sX, sY;
|
||||||
@@ -2533,7 +2533,7 @@ BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usIte
|
|||||||
return( fRecompileMovementCosts );
|
return( fRecompileMovementCosts );
|
||||||
}
|
}
|
||||||
|
|
||||||
pSoldier = MercPtrs[ ubPerson ]; // someone is here, and they're gonna get hurt
|
pSoldier = ubPerson; // someone is here, and they're gonna get hurt
|
||||||
|
|
||||||
// silversurfer: Gas now only has an effect when the container had time to emit some. Initially it will do nothing.
|
// silversurfer: Gas now only has an effect when the container had time to emit some. Initially it will do nothing.
|
||||||
// This prevents the problem that we have to suffer two times without a chance to react (1st when the grenade hits our position, 2nd when our turn starts)
|
// This prevents the problem that we have to suffer two times without a chance to react (1st when the grenade hits our position, 2nd when our turn starts)
|
||||||
@@ -2918,11 +2918,11 @@ void GetRayStopInfo( UINT32 uiNewSpot, UINT8 ubDir, INT8 bLevel, BOOLEAN fSmokeE
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID, BOOL fFromRemoteClient, BOOL fNewSmokeEffect )
|
void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, SoldierID ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID, BOOL fFromRemoteClient, BOOL fNewSmokeEffect )
|
||||||
{
|
{
|
||||||
if (is_networked && is_client)
|
if (is_networked && is_client)
|
||||||
{
|
{
|
||||||
SOLDIERTYPE* pAttacker = MercPtrs[ubOwner];
|
SOLDIERTYPE* pAttacker = ubOwner;
|
||||||
if (pAttacker != NULL)
|
if (pAttacker != NULL)
|
||||||
{
|
{
|
||||||
if (IsOurSoldier(pAttacker) || (pAttacker->bTeam == 1 && is_server))
|
if (IsOurSoldier(pAttacker) || (pAttacker->bTeam == 1 && is_server))
|
||||||
@@ -2932,7 +2932,7 @@ void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner,
|
|||||||
{
|
{
|
||||||
// let all the other clients know we are spawning this effect
|
// let all the other clients know we are spawning this effect
|
||||||
// and align them with our random number generator
|
// and align them with our random number generator
|
||||||
send_spreadeffect(sGridNo,ubRadius,usItem,ubOwner,fSubsequent,bLevel,iSmokeEffectID);
|
send_spreadeffect(sGridNo, ubRadius, usItem, ubOwner, fSubsequent, bLevel, iSmokeEffectID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!fFromRemoteClient)
|
else if (!fFromRemoteClient)
|
||||||
@@ -3803,7 +3803,7 @@ void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemo
|
|||||||
if (IsOurSoldier((SOLDIERTYPE*)gubPersonToSetOffExplosions) || IsOurSoldier((SOLDIERTYPE*)soldierID))
|
if (IsOurSoldier((SOLDIERTYPE*)gubPersonToSetOffExplosions) || IsOurSoldier((SOLDIERTYPE*)soldierID))
|
||||||
{
|
{
|
||||||
// we set off the bomb (could be failed disarm) or we own it, tell the other clients we are setting it off
|
// we set off the bomb (could be failed disarm) or we own it, tell the other clients we are setting it off
|
||||||
send_detonate_explosive(iWorldIndex,gubPersonToSetOffExplosions);
|
send_detonate_explosive(iWorldIndex, gubPersonToSetOffExplosions);
|
||||||
}
|
}
|
||||||
else if (gWorldBombs[uiWorldBombIndex].bIsFromRemotePlayer && !fFromRemoteClient)
|
else if (gWorldBombs[uiWorldBombIndex].bIsFromRemotePlayer && !fFromRemoteClient)
|
||||||
{
|
{
|
||||||
@@ -3932,10 +3932,10 @@ BOOLEAN ActivateSurroundingTripwire( SoldierID ubID, INT32 sGridNo, INT8 bLevel,
|
|||||||
|
|
||||||
// SANDRO - merc records
|
// SANDRO - merc records
|
||||||
// only if we blew up somebody not in our team(no achievement for blowing our guys :)), only if owner exists and have profile
|
// only if we blew up somebody not in our team(no achievement for blowing our guys :)), only if owner exists and have profile
|
||||||
if ( (MercPtrs[ubID]->bTeam != gbPlayerNum) && ((*pObj)[0]->data.misc.ubBombOwner > 1) )
|
if ( (ubID->bTeam != gbPlayerNum) && ((*pObj)[0]->data.misc.ubBombOwner > 1) )
|
||||||
{
|
{
|
||||||
if ( MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->ubProfile != NO_PROFILE && MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->bTeam == gbPlayerNum )
|
if ( ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile != NO_PROFILE && ((*pObj)[0]->data.misc.ubBombOwner - 2)->bTeam == gbPlayerNum )
|
||||||
gMercProfiles[ MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->ubProfile ].records.usExpDetonated++;
|
gMercProfiles[ ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile ].records.usExpDetonated++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (pObj->usItem != ACTION_ITEM || (*pObj)[0]->data.misc.bActionValue == ACTION_ITEM_BLOW_UP)
|
/*if (pObj->usItem != ACTION_ITEM || (*pObj)[0]->data.misc.bActionValue == ACTION_ITEM_BLOW_UP)
|
||||||
@@ -3962,7 +3962,7 @@ BOOLEAN ActivateSurroundingTripwire( SoldierID ubID, INT32 sGridNo, INT8 bLevel,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Flugente: A special function for tripwire gun traps. Search if pObj has a gun attached. If so, fire a shot from that gun in a specific direction. Afterwards place the gun on the ground
|
// Flugente: A special function for tripwire gun traps. Search if pObj has a gun attached. If so, fire a shot from that gun in a specific direction. Afterwards place the gun on the ground
|
||||||
void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT16 ubId, UINT8 ubDirection )
|
void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, SoldierID ubId, UINT8 ubDirection )
|
||||||
{
|
{
|
||||||
if ( !pObj )
|
if ( !pObj )
|
||||||
return;
|
return;
|
||||||
@@ -3980,7 +3980,7 @@ void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT
|
|||||||
gTacticalStatus.uiFlags |= (DISALLOW_SIGHT | CHECK_SIGHT_AT_END_OF_ATTACK);
|
gTacticalStatus.uiFlags |= (DISALLOW_SIGHT | CHECK_SIGHT_AT_END_OF_ATTACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
FireFragmentsTrapGun( MercPtrs[ubId], sGridNo, 0, pObj, ubDirection );
|
FireFragmentsTrapGun( ubId, sGridNo, 0, pObj, ubDirection );
|
||||||
|
|
||||||
// this is important... if not set, the game will remain in a loop
|
// this is important... if not set, the game will remain in a loop
|
||||||
gTacticalStatus.ubAttackBusyCount = 0;
|
gTacticalStatus.ubAttackBusyCount = 0;
|
||||||
@@ -4055,11 +4055,11 @@ void HandleExplosionQueue( void )
|
|||||||
if ( sSoundID > NO_ALT_SOUND )
|
if ( sSoundID > NO_ALT_SOUND )
|
||||||
PlayJA2Sample( sSoundID, RATE_11025, SoundVolume( HIGHVOLUME, sGridNo ), 1, SoundDir( sGridNo ) );
|
PlayJA2Sample( sSoundID, RATE_11025, SoundVolume( HIGHVOLUME, sGridNo ), 1, SoundDir( sGridNo ) );
|
||||||
|
|
||||||
UINT16 ubID = WhoIsThere2( sGridNo, ubLevel );
|
SoldierID ubID = WhoIsThere2( sGridNo, ubLevel );
|
||||||
|
|
||||||
if ( ubID != NOBODY )
|
if ( ubID != NOBODY )
|
||||||
{
|
{
|
||||||
SOLDIERTYPE* pSoldier = MercPtrs[ubID];
|
SOLDIERTYPE* pSoldier = ubID;
|
||||||
|
|
||||||
INT16 damage = Explosive[Item[pObj->usItem].ubClassIndex].ubDamage * 0.67f + Random( Explosive[Item[pObj->usItem].ubClassIndex].ubDamage * 0.67f );
|
INT16 damage = Explosive[Item[pObj->usItem].ubClassIndex].ubDamage * 0.67f + Random( Explosive[Item[pObj->usItem].ubClassIndex].ubDamage * 0.67f );
|
||||||
INT16 breathdamage = Explosive[Item[pObj->usItem].ubClassIndex].ubStunDamage * 0.67f + Random( Explosive[Item[pObj->usItem].ubClassIndex].ubStunDamage * 0.67f );
|
INT16 breathdamage = Explosive[Item[pObj->usItem].ubClassIndex].ubStunDamage * 0.67f + Random( Explosive[Item[pObj->usItem].ubClassIndex].ubStunDamage * 0.67f );
|
||||||
@@ -4172,7 +4172,7 @@ void HandleExplosionQueue( void )
|
|||||||
INT16 sX, sY;
|
INT16 sX, sY;
|
||||||
ConvertGridNoToCenterCellXY(sGridNo, &sX, &sY);
|
ConvertGridNoToCenterCellXY(sGridNo, &sX, &sY);
|
||||||
|
|
||||||
fAttFound=HandleAttachedExplosions( (UINT8) ((*pObj)[0]->data.misc.ubBombOwner - 2), sX, sY, 0,
|
fAttFound = HandleAttachedExplosions( ((*pObj)[0]->data.misc.ubBombOwner - 2), sX, sY, 0,
|
||||||
sGridNo, (*pObj)[0]->data.misc.usBombItem, FALSE, ubLevel, (*pObj)[0]->data.ubDirection, pObj);
|
sGridNo, (*pObj)[0]->data.misc.usBombItem, FALSE, ubLevel, (*pObj)[0]->data.ubDirection, pObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4219,7 +4219,7 @@ void HandleExplosionQueue( void )
|
|||||||
// determine gridno to attack - smoke signal required. Otherwise, it is assumed the radio operator ordered the bombing of his OWN position
|
// determine gridno to attack - smoke signal required. Otherwise, it is assumed the radio operator ordered the bombing of his OWN position
|
||||||
// if we cannot even find a radio operator, all bets are off - target a random gridno
|
// if we cannot even find a radio operator, all bets are off - target a random gridno
|
||||||
// the usual +/- 2 shenanigans
|
// the usual +/- 2 shenanigans
|
||||||
UINT16 usOwner = NOBODY;
|
SoldierID usOwner = NOBODY;
|
||||||
if ( (*pObj)[0]->data.misc.ubBombOwner > 1 )
|
if ( (*pObj)[0]->data.misc.ubBombOwner > 1 )
|
||||||
usOwner = (*pObj)[0]->data.misc.ubBombOwner - 2;
|
usOwner = (*pObj)[0]->data.misc.ubBombOwner - 2;
|
||||||
|
|
||||||
@@ -4251,7 +4251,7 @@ void HandleExplosionQueue( void )
|
|||||||
// bomb objects only store the SIDE who placed the bomb! :-(
|
// bomb objects only store the SIDE who placed the bomb! :-(
|
||||||
if ( (*pObj)[0]->data.misc.ubBombOwner > 1 )
|
if ( (*pObj)[0]->data.misc.ubBombOwner > 1 )
|
||||||
{
|
{
|
||||||
IgniteExplosion( (UINT8) ((*pObj)[0]->data.misc.ubBombOwner - 2), sX, sY, 0, sGridNo, (*pObj)[0]->data.misc.usBombItem, ubLevel, (*pObj)[0]->data.ubDirection, pObj);
|
IgniteExplosion( ((*pObj)[0]->data.misc.ubBombOwner - 2), sX, sY, 0, sGridNo, (*pObj)[0]->data.misc.usBombItem, ubLevel, (*pObj)[0]->data.ubDirection, pObj);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -4704,12 +4704,12 @@ void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency )
|
|||||||
// SANDRO - added merc records and some exp
|
// SANDRO - added merc records and some exp
|
||||||
if ( ((*pObj)[0]->data.misc.ubBombOwner) > 1 )
|
if ( ((*pObj)[0]->data.misc.ubBombOwner) > 1 )
|
||||||
{
|
{
|
||||||
if ( MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->ubProfile != NO_PROFILE &&
|
if ( ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile != NO_PROFILE &&
|
||||||
MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->bTeam == gbPlayerNum )
|
((*pObj)[0]->data.misc.ubBombOwner - 2)->bTeam == gbPlayerNum )
|
||||||
{
|
{
|
||||||
gMercProfiles[MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->ubProfile].records.usExpDetonated++;
|
gMercProfiles[((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile].records.usExpDetonated++;
|
||||||
|
|
||||||
StatChange( MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)], EXPLODEAMT, ( 5 ), FALSE );
|
StatChange( ((*pObj)[0]->data.misc.ubBombOwner - 2), EXPLODEAMT, ( 5 ), FALSE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4804,12 +4804,12 @@ void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency )
|
|||||||
// SANDRO - added merc records and some exp
|
// SANDRO - added merc records and some exp
|
||||||
if ( ((*pObj)[0]->data.misc.ubBombOwner) > 1 )
|
if ( ((*pObj)[0]->data.misc.ubBombOwner) > 1 )
|
||||||
{
|
{
|
||||||
if ( MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->ubProfile != NO_PROFILE &&
|
if ( ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile != NO_PROFILE &&
|
||||||
MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->bTeam == gbPlayerNum )
|
((*pObj)[0]->data.misc.ubBombOwner - 2)->bTeam == gbPlayerNum )
|
||||||
{
|
{
|
||||||
gMercProfiles[MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->ubProfile].records.usExpDetonated++;
|
gMercProfiles[((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile].records.usExpDetonated++;
|
||||||
|
|
||||||
StatChange( MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)], EXPLODEAMT, ( 5 ), FALSE );
|
StatChange( ((*pObj)[0]->data.misc.ubBombOwner - 2), EXPLODEAMT, ( 5 ), FALSE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4979,8 +4979,8 @@ BOOLEAN SetOffBombsInGridNo( SoldierID ubID, INT32 sGridNo, BOOLEAN fAllBombs, I
|
|||||||
// only if we blew up somebody not in our team(no achievement for blowing our guys :)), only if owner exists and have profile
|
// only if we blew up somebody not in our team(no achievement for blowing our guys :)), only if owner exists and have profile
|
||||||
if ( (ubID->bTeam != gbPlayerNum) && ((*pObj)[0]->data.misc.ubBombOwner > 1) )
|
if ( (ubID->bTeam != gbPlayerNum) && ((*pObj)[0]->data.misc.ubBombOwner > 1) )
|
||||||
{
|
{
|
||||||
if ( MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->ubProfile != NO_PROFILE && MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->bTeam == gbPlayerNum )
|
if ( ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile != NO_PROFILE && ((*pObj)[0]->data.misc.ubBombOwner - 2)->bTeam == gbPlayerNum )
|
||||||
gMercProfiles[ MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->ubProfile ].records.usExpDetonated++;
|
gMercProfiles[ ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile ].records.usExpDetonated++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (pObj->usItem != ACTION_ITEM || (*pObj)[0]->data.misc.bActionValue == ACTION_ITEM_BLOW_UP)
|
/*if (pObj->usItem != ACTION_ITEM || (*pObj)[0]->data.misc.bActionValue == ACTION_ITEM_BLOW_UP)
|
||||||
@@ -5305,7 +5305,7 @@ void UpdateSAMDoneRepair( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
|||||||
// loop through civ team and find
|
// loop through civ team and find
|
||||||
// anybody who is an NPC and
|
// anybody who is an NPC and
|
||||||
// see if they get angry
|
// see if they get angry
|
||||||
void HandleBuldingDestruction( INT32 sGridNo, UINT16 ubOwner )
|
void HandleBuldingDestruction( INT32 sGridNo, SoldierID ubOwner )
|
||||||
{
|
{
|
||||||
SOLDIERTYPE * pSoldier;
|
SOLDIERTYPE * pSoldier;
|
||||||
UINT16 cnt;
|
UINT16 cnt;
|
||||||
@@ -5315,7 +5315,7 @@ void HandleBuldingDestruction( INT32 sGridNo, UINT16 ubOwner )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( MercPtrs[ ubOwner ]->bTeam != gbPlayerNum )
|
if ( ubOwner->bTeam != gbPlayerNum )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -5339,7 +5339,7 @@ void HandleBuldingDestruction( INT32 sGridNo, UINT16 ubOwner )
|
|||||||
|
|
||||||
if ( DoesNPCOwnBuilding( pSoldier, sGridNo ) )
|
if ( DoesNPCOwnBuilding( pSoldier, sGridNo ) )
|
||||||
{
|
{
|
||||||
MakeNPCGrumpyForMinorOffense( pSoldier, MercPtrs[ ubOwner ] );
|
MakeNPCGrumpyForMinorOffense( pSoldier, ubOwner );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5624,9 +5624,9 @@ void HavePersonAtGridnoStop( UINT32 sGridNo )
|
|||||||
SoldierID ubID = WhoIsThere2( sGridNo, 0 );
|
SoldierID ubID = WhoIsThere2( sGridNo, 0 );
|
||||||
|
|
||||||
//is it a valid person
|
//is it a valid person
|
||||||
if ( (ubID != NOBODY) && (MercPtrs[ ubID ]->bTeam == gbPlayerNum) )
|
if ( (ubID != NOBODY) && (ubID->bTeam == gbPlayerNum) )
|
||||||
{
|
{
|
||||||
SOLDIERTYPE *pSoldier = MercPtrs[ ubID ];
|
SOLDIERTYPE *pSoldier = ubID;
|
||||||
|
|
||||||
//Stop the merc
|
//Stop the merc
|
||||||
pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection );
|
pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection );
|
||||||
@@ -5732,10 +5732,10 @@ void HandleDestructionOfPowerGenFan()
|
|||||||
// Have a qualified merc say a quote
|
// Have a qualified merc say a quote
|
||||||
//
|
//
|
||||||
//Get a random qualified merc to say the quote
|
//Get a random qualified merc to say the quote
|
||||||
INT16 bID = RandomSoldierIdFromNewMercsOnPlayerTeam();
|
SoldierID bID = RandomSoldierIdFromNewMercsOnPlayerTeam();
|
||||||
if( bID != -1 )
|
if( bID != NOBODY )
|
||||||
{
|
{
|
||||||
DelayedMercQuote( Menptr[ bID ].ubProfile, QUOTE_ACCEPT_CONTRACT_RENEWAL, GetWorldTotalSeconds() + 2 );
|
DelayedMercQuote( bID->ubProfile, QUOTE_ACCEPT_CONTRACT_RENEWAL, GetWorldTotalSeconds() + 2 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5773,8 +5773,8 @@ void HandleSeeingFortifiedDoor( UINT32 sGridNo )
|
|||||||
gJa25SaveStruct.uiJa25GeneralFlags |= JA_GF__PLAYER_HAS_SEEN_FORTIFIED_DOOR;
|
gJa25SaveStruct.uiJa25GeneralFlags |= JA_GF__PLAYER_HAS_SEEN_FORTIFIED_DOOR;
|
||||||
|
|
||||||
//find out whos is the one walking across the trap
|
//find out whos is the one walking across the trap
|
||||||
INT16 sID = WhoIsThere2( sGridNo, 0 );
|
SoldierID sID = WhoIsThere2( sGridNo, 0 );
|
||||||
if( sID != NOBODY && IsSoldierQualifiedMerc( &Menptr[ sID ] ) )
|
if( sID != NOBODY && IsSoldierQualifiedMerc( sID ) )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -5783,10 +5783,10 @@ void HandleSeeingFortifiedDoor( UINT32 sGridNo )
|
|||||||
sID = RandomSoldierIdFromNewMercsOnPlayerTeam();
|
sID = RandomSoldierIdFromNewMercsOnPlayerTeam();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( sID != -1 )
|
if( sID != NOBODY )
|
||||||
{
|
{
|
||||||
//say the quote
|
//say the quote
|
||||||
TacticalCharacterDialogue( &Menptr[ sID ], QUOTE_LENGTH_OF_CONTRACT );
|
TacticalCharacterDialogue( sID, QUOTE_LENGTH_OF_CONTRACT );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5801,11 +5801,11 @@ void HandleSwitchToOpenFortifiedDoor( UINT32 sGridNo )
|
|||||||
//remeber that the switch to open the forified door on level 1, has been pulled
|
//remeber that the switch to open the forified door on level 1, has been pulled
|
||||||
gJa25SaveStruct.ubStatusOfFortifiedDoor = FD__OPEN;
|
gJa25SaveStruct.ubStatusOfFortifiedDoor = FD__OPEN;
|
||||||
|
|
||||||
INT16 bID = RandomSoldierIdFromNewMercsOnPlayerTeam();
|
SoldierID bID = RandomSoldierIdFromNewMercsOnPlayerTeam();
|
||||||
|
|
||||||
if( bID != -1 )
|
if( bID != NOBODY )
|
||||||
{
|
{
|
||||||
TacticalCharacterDialogue( &Menptr[ bID ], QUOTE_COMMENT_BEFORE_HANG_UP );
|
TacticalCharacterDialogue( bID, QUOTE_COMMENT_BEFORE_HANG_UP );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5834,7 +5834,7 @@ void HandleSeeingPowerGenFan( UINT32 sGridNo )
|
|||||||
|
|
||||||
if( ubPerson != NOBODY )
|
if( ubPerson != NOBODY )
|
||||||
{
|
{
|
||||||
pSoldier = &Menptr[ ubPerson ];
|
pSoldier = ubPerson;
|
||||||
|
|
||||||
//if the fan is stopped And is this merc is a qualified merc but Not a power gen fan qualified merc?
|
//if the fan is stopped And is this merc is a qualified merc but Not a power gen fan qualified merc?
|
||||||
if( IsSoldierQualifiedMerc( pSoldier ) && fFanIsStopped )
|
if( IsSoldierQualifiedMerc( pSoldier ) && fFanIsStopped )
|
||||||
@@ -5886,7 +5886,7 @@ void HandleSeeingPowerGenFan( UINT32 sGridNo )
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void HandleBuddyExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection )
|
void HandleBuddyExplosions(SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection )
|
||||||
{
|
{
|
||||||
// Flugente: Items can have secondary explosions
|
// Flugente: Items can have secondary explosions
|
||||||
if ( Item[usItem].usBuddyItem )
|
if ( Item[usItem].usBuddyItem )
|
||||||
@@ -5907,7 +5907,7 @@ void HandleBuddyExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sG
|
|||||||
}
|
}
|
||||||
|
|
||||||
// sevenfm: handle explosive items from attachments
|
// sevenfm: handle explosive items from attachments
|
||||||
BOOLEAN HandleAttachedExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj)
|
BOOLEAN HandleAttachedExplosions( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj)
|
||||||
{
|
{
|
||||||
BOOLEAN binderFound = FALSE;
|
BOOLEAN binderFound = FALSE;
|
||||||
BOOLEAN detonator = FALSE;
|
BOOLEAN detonator = FALSE;
|
||||||
@@ -6264,10 +6264,10 @@ void RoofDestruction( INT32 sGridNo, BOOLEAN fWithExplosion )
|
|||||||
|
|
||||||
// if there is anybody at the floor level, damage them with the debris
|
// if there is anybody at the floor level, damage them with the debris
|
||||||
// we have to do this BEFORE people drop down. It would otherwise be possible for a falling person to avoid this damage, depending on order of collapsing and possible gridno-shifts.
|
// we have to do this BEFORE people drop down. It would otherwise be possible for a falling person to avoid this damage, depending on order of collapsing and possible gridno-shifts.
|
||||||
UINT16 ubId = WhoIsThere2( sGridNo, 0 );
|
SoldierID ubId = WhoIsThere2( sGridNo, 0 );
|
||||||
if ( ubId != NOBODY )
|
if ( ubId != NOBODY )
|
||||||
{
|
{
|
||||||
pSoldier = MercPtrs[ubId];
|
pSoldier = ubId;
|
||||||
|
|
||||||
pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection );
|
pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection );
|
||||||
|
|
||||||
@@ -6283,7 +6283,7 @@ void RoofDestruction( INT32 sGridNo, BOOLEAN fWithExplosion )
|
|||||||
ubId = WhoIsThere2( sGridNo, 1 );
|
ubId = WhoIsThere2( sGridNo, 1 );
|
||||||
if ( ubId != NOBODY )
|
if ( ubId != NOBODY )
|
||||||
{
|
{
|
||||||
pSoldier = MercPtrs[ubId];
|
pSoldier = ubId;
|
||||||
|
|
||||||
INT32 soldierdropoffgridno = sGridNo;
|
INT32 soldierdropoffgridno = sGridNo;
|
||||||
if ( !IsLocationSittable( soldierdropoffgridno, FALSE ) )
|
if ( !IsLocationSittable( soldierdropoffgridno, FALSE ) )
|
||||||
|
|||||||
@@ -132,16 +132,16 @@ void RemoveActiveExplosionMarkers();
|
|||||||
#define GASMASK_MIN_STATUS 70
|
#define GASMASK_MIN_STATUS 70
|
||||||
|
|
||||||
// OJW - 20091028 - Explosion damage sync
|
// OJW - 20091028 - Explosion damage sync
|
||||||
BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient = FALSE );
|
BOOLEAN DamageSoldierFromBlast( SoldierID ubPerson, SoldierID ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient = FALSE );
|
||||||
BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner, BOOL fFromRemoteClient = FALSE );
|
BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner, BOOL fFromRemoteClient = FALSE );
|
||||||
void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectNum, BOOL fFromRemoteClient = FALSE, BOOL fNewSmokeEffect = FALSE );
|
void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, SoldierID ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectNum, BOOL fFromRemoteClient = FALSE, BOOL fNewSmokeEffect = FALSE );
|
||||||
void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemoteClient = FALSE );
|
void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemoteClient = FALSE );
|
||||||
|
|
||||||
// Flugente: activate everything connected to a tripwire in the surrounding if sGridNo on level bLevel with regard to the tripwire netwrok and hierarchy determined by ubFlag
|
// Flugente: activate everything connected to a tripwire in the surrounding if sGridNo on level bLevel with regard to the tripwire netwrok and hierarchy determined by ubFlag
|
||||||
BOOLEAN ActivateSurroundingTripwire( SoldierID ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag );
|
BOOLEAN ActivateSurroundingTripwire( SoldierID ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag );
|
||||||
|
|
||||||
// Flugente: A special function for tripwire gun traps. Search if pObj has a gun attached. If so, fire a shot from that gun in a specific direction. Afterwards place the gun on the ground
|
// Flugente: A special function for tripwire gun traps. Search if pObj has a gun attached. If so, fire a shot from that gun in a specific direction. Afterwards place the gun on the ground
|
||||||
void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT16 ubId, UINT8 ubDirection );
|
void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, SoldierID ubId, UINT8 ubDirection );
|
||||||
|
|
||||||
extern void ToggleActionItemsByFrequency( INT8 bFrequency );
|
extern void ToggleActionItemsByFrequency( INT8 bFrequency );
|
||||||
extern void PerformItemAction( INT32 sGridNo, OBJECTTYPE * pObj );
|
extern void PerformItemAction( INT32 sGridNo, OBJECTTYPE * pObj );
|
||||||
@@ -166,15 +166,15 @@ extern void HandleSeeingFortifiedDoor( UINT32 sGridNo );//Ja25 UB
|
|||||||
|
|
||||||
void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist,
|
void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist,
|
||||||
BOOLEAN *pfRecompileMovementCosts,
|
BOOLEAN *pfRecompileMovementCosts,
|
||||||
BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT16 ubOwner,
|
BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, SoldierID ubOwner,
|
||||||
INT8 bLevel,
|
INT8 bLevel,
|
||||||
UINT8 ubReason );
|
UINT8 ubReason );
|
||||||
|
|
||||||
// Flugente: handle secondary explosive effects
|
// Flugente: handle secondary explosive effects
|
||||||
void HandleBuddyExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection );
|
void HandleBuddyExplosions( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection );
|
||||||
|
|
||||||
// sevenfm: handle explosive items from attachments
|
// sevenfm: handle explosive items from attachments
|
||||||
BOOLEAN HandleAttachedExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj );
|
BOOLEAN HandleAttachedExplosions( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj );
|
||||||
void CheckForBuriedBombsAndRemoveFlags( INT32 sGridNo, INT8 bLevel );
|
void CheckForBuriedBombsAndRemoveFlags( INT32 sGridNo, INT8 bLevel );
|
||||||
UINT16 CalcTotalVolatility(OBJECTTYPE * pObj);
|
UINT16 CalcTotalVolatility(OBJECTTYPE * pObj);
|
||||||
BOOLEAN FindBinderAttachment (OBJECTTYPE * pObj);
|
BOOLEAN FindBinderAttachment (OBJECTTYPE * pObj);
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner,
|
|||||||
return( iSmokeIndex );
|
return( iSmokeIndex );
|
||||||
}
|
}
|
||||||
|
|
||||||
INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, BOOLEAN fFromRemoteClient, UINT8 ubDuration, UINT8 ubRadius, UINT8 ubGeneration)
|
INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwner, BOOLEAN fFromRemoteClient, UINT8 ubDuration, UINT8 ubRadius, UINT8 ubGeneration)
|
||||||
{
|
{
|
||||||
SMOKEEFFECT *pSmoke;
|
SMOKEEFFECT *pSmoke;
|
||||||
INT32 iSmokeIndex;
|
INT32 iSmokeIndex;
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ void AddSmokeEffectToTile( INT32 iSmokeEffectID, INT8 bType, INT32 sGridNo, INT8
|
|||||||
|
|
||||||
void RemoveSmokeEffectFromTile( INT32 sGridNo, INT8 bLevel );
|
void RemoveSmokeEffectFromTile( INT32 sGridNo, INT8 bLevel );
|
||||||
|
|
||||||
INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, BOOLEAN fFromRemoteClient = 0, UINT8 ubDuration = 0, UINT8 ubRadius = 0, UINT8 ubGeneration = 0);
|
INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwner, BOOLEAN fFromRemoteClient = 0, UINT8 ubDuration = 0, UINT8 ubRadius = 0, UINT8 ubGeneration = 0);
|
||||||
|
|
||||||
BOOLEAN SaveSmokeEffectsToSaveGameFile( HWFILE hFile );
|
BOOLEAN SaveSmokeEffectsToSaveGameFile( HWFILE hFile );
|
||||||
BOOLEAN LoadSmokeEffectsFromLoadGameFile( HWFILE hFile );
|
BOOLEAN LoadSmokeEffectsFromLoadGameFile( HWFILE hFile );
|
||||||
@@ -77,4 +77,4 @@ BOOLEAN CheckSmokeEffect(INT32 sGridNo, INT8 bLevel, INT8 bType);
|
|||||||
// find smoke effect on visible screen
|
// find smoke effect on visible screen
|
||||||
BOOLEAN FindVisibleSmokeEffect(INT8 bType);
|
BOOLEAN FindVisibleSmokeEffect(INT8 bType);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+50
-50
@@ -38,70 +38,70 @@
|
|||||||
|
|
||||||
typedef struct TAG_anitile
|
typedef struct TAG_anitile
|
||||||
{
|
{
|
||||||
struct TAG_anitile *pNext;
|
struct TAG_anitile *pNext;
|
||||||
UINT32 uiFlags; // flags struct
|
UINT32 uiFlags; // flags struct
|
||||||
UINT32 uiTimeLastUpdate; // Stuff for animated tiles
|
UINT32 uiTimeLastUpdate; // Stuff for animated tiles
|
||||||
|
|
||||||
LEVELNODE *pLevelNode;
|
LEVELNODE *pLevelNode;
|
||||||
UINT8 ubLevelID;
|
UINT8 ubLevelID;
|
||||||
INT16 sCurrentFrame;
|
INT16 sCurrentFrame;
|
||||||
INT16 sStartFrame;
|
INT16 sStartFrame;
|
||||||
INT16 sDelay;
|
INT16 sDelay;
|
||||||
UINT16 usTileType;
|
UINT16 usTileType;
|
||||||
UINT16 usNumFrames;
|
UINT16 usNumFrames;
|
||||||
|
|
||||||
UINT16 usMissAnimationPlayed;
|
UINT16 usMissAnimationPlayed;
|
||||||
UINT16 ubAttackerMissed;
|
SoldierID ubAttackerMissed;
|
||||||
INT16 sRelativeX;
|
INT16 sRelativeX;
|
||||||
INT16 sRelativeY;
|
INT16 sRelativeY;
|
||||||
INT16 sRelativeZ;
|
INT16 sRelativeZ;
|
||||||
INT32 sGridNo;
|
INT32 sGridNo;
|
||||||
UINT16 usTileIndex;
|
UINT16 usTileIndex;
|
||||||
|
|
||||||
UINT16 usCachedTileSubIndex; // sub Index
|
UINT16 usCachedTileSubIndex; // sub Index
|
||||||
INT16 sCachedTileID; // Index into cached tile ID
|
INT16 sCachedTileID; // Index into cached tile ID
|
||||||
|
|
||||||
UINT8 ubOwner;
|
UINT8 ubOwner;
|
||||||
UINT8 ubKeyFrame1;
|
UINT8 ubKeyFrame1;
|
||||||
UINT32 uiKeyFrame1Code;
|
UINT32 uiKeyFrame1Code;
|
||||||
UINT8 ubKeyFrame2;
|
UINT8 ubKeyFrame2;
|
||||||
UINT32 uiKeyFrame2Code;
|
UINT32 uiKeyFrame2Code;
|
||||||
|
|
||||||
UINT32 uiUserData;
|
UINT32 uiUserData;
|
||||||
UINT8 ubUserData2;
|
UINT8 ubUserData2;
|
||||||
UINT32 uiUserData3;
|
UINT32 uiUserData3;
|
||||||
|
|
||||||
INT8 bFrameCountAfterStart;
|
INT8 bFrameCountAfterStart;
|
||||||
INT32 lightSprite;
|
INT32 lightSprite;
|
||||||
} ANITILE;
|
} ANITILE;
|
||||||
|
|
||||||
|
|
||||||
typedef struct TAG_anitile_params
|
typedef struct TAG_anitile_params
|
||||||
{
|
{
|
||||||
UINT32 uiFlags; // flags struct
|
UINT32 uiFlags; // flags struct
|
||||||
UINT8 ubLevelID; // Level ID for rendering layer
|
UINT8 ubLevelID; // Level ID for rendering layer
|
||||||
INT16 sStartFrame; // Start frame
|
INT16 sStartFrame; // Start frame
|
||||||
INT16 sDelay; // Delay time
|
INT16 sDelay; // Delay time
|
||||||
UINT16 usTileType; // Tile databse type ( optional )
|
UINT16 usTileType; // Tile databse type ( optional )
|
||||||
UINT16 usTileIndex; // Tile database index ( optional )
|
UINT16 usTileIndex; // Tile database index ( optional )
|
||||||
INT16 sX; // World X ( optional )
|
INT16 sX; // World X ( optional )
|
||||||
INT16 sY; // World Y ( optional )
|
INT16 sY; // World Y ( optional )
|
||||||
INT16 sZ; // World Z ( optional )
|
INT16 sZ; // World Z ( optional )
|
||||||
INT32 sGridNo; // World GridNo
|
INT32 sGridNo; // World GridNo
|
||||||
|
|
||||||
LEVELNODE *pGivenLevelNode; // Levelnode for existing tile ( optional )
|
LEVELNODE *pGivenLevelNode; // Levelnode for existing tile ( optional )
|
||||||
CHAR8 zCachedFile[ 100 ]; // Filename for cached tile name ( optional )
|
CHAR8 zCachedFile[ 100 ]; // Filename for cached tile name ( optional )
|
||||||
|
|
||||||
UINT8 ubOwner; // UBID for the owner
|
UINT8 ubOwner; // UBID for the owner
|
||||||
UINT8 ubKeyFrame1; // Key frame 1
|
UINT8 ubKeyFrame1; // Key frame 1
|
||||||
UINT32 uiKeyFrame1Code; // Key frame code
|
UINT32 uiKeyFrame1Code; // Key frame code
|
||||||
UINT8 ubKeyFrame2; // Key frame 2
|
UINT8 ubKeyFrame2; // Key frame 2
|
||||||
UINT32 uiKeyFrame2Code; // Key frame code
|
UINT32 uiKeyFrame2Code; // Key frame code
|
||||||
|
|
||||||
UINT32 uiUserData;
|
UINT32 uiUserData;
|
||||||
UINT8 ubUserData2;
|
UINT8 ubUserData2;
|
||||||
UINT32 uiUserData3;
|
UINT32 uiUserData3;
|
||||||
INT32 lightSprite;
|
INT32 lightSprite;
|
||||||
} ANITILE_PARAMS;
|
} ANITILE_PARAMS;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1764,7 +1764,7 @@ BOOLEAN StructureDensity( STRUCTURE * pStructure, UINT8 * pubLevel0, UINT8 * pub
|
|||||||
return( TRUE );
|
return( TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, UINT16 ubOwner, INT32 sAntiMaterialImpact )
|
INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, SoldierID ubOwner, INT32 sAntiMaterialImpact )
|
||||||
{
|
{
|
||||||
// do damage to a structure; returns TRUE if the structure should be removed
|
// do damage to a structure; returns TRUE if the structure should be removed
|
||||||
STRUCTURE *pBase;
|
STRUCTURE *pBase;
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ STRUCTURE* GetTallestStructureOnGridnoDrag( INT32 sGridNo, INT8 bLevel );
|
|||||||
// FUNCTIONS FOR DETERMINING STUFF THAT BLOCKS VIEW FOR TILE_bASED LOS
|
// FUNCTIONS FOR DETERMINING STUFF THAT BLOCKS VIEW FOR TILE_bASED LOS
|
||||||
INT8 GetBlockingStructureInfo( INT32 sGridNo, INT8 bDir, INT8 bNextDir, INT8 bLevel, INT8 *pStructHeight, STRUCTURE ** ppTallestStructure, BOOLEAN fWallsBlock );
|
INT8 GetBlockingStructureInfo( INT32 sGridNo, INT8 bDir, INT8 bNextDir, INT8 bLevel, INT8 *pStructHeight, STRUCTURE ** ppTallestStructure, BOOLEAN fWallsBlock );
|
||||||
|
|
||||||
INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, UINT16 ubOwner, INT32 sAntiMaterialImpact = 0 );
|
INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, SoldierID ubOwner, INT32 sAntiMaterialImpact = 0 );
|
||||||
|
|
||||||
// Material armour type enumeration
|
// Material armour type enumeration
|
||||||
enum
|
enum
|
||||||
|
|||||||
Reference in New Issue
Block a user