mirror of
https://github.com/1dot13/source.git
synced 2026-09-02 14:36:06 +02:00
- Fixed reduced max range for explosives that has <fExplodeOnImpact> set to 1 (by Buggler)
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5866 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+16
-10
@@ -108,10 +108,14 @@ BOOLEAN PhysicsCheckForCollisions( REAL_OBJECT *pObject, INT32 *piCollisionI
|
|||||||
void PhysicsResolveCollision( REAL_OBJECT *pObject, vector_3 *pVelocity, vector_3 *pNormal, real CoefficientOfRestitution );
|
void PhysicsResolveCollision( REAL_OBJECT *pObject, vector_3 *pVelocity, vector_3 *pNormal, real CoefficientOfRestitution );
|
||||||
void PhysicsDeleteObject( REAL_OBJECT *pObject );
|
void PhysicsDeleteObject( REAL_OBJECT *pObject );
|
||||||
BOOLEAN PhysicsHandleCollisions( REAL_OBJECT *pObject, INT32 *piCollisionID, real DeltaTime );
|
BOOLEAN PhysicsHandleCollisions( REAL_OBJECT *pObject, INT32 *piCollisionID, real DeltaTime );
|
||||||
FLOAT CalculateForceFromRange( INT16 sRange, FLOAT dDegrees );
|
FLOAT CalculateForceFromRange( OBJECTTYPE *pItem, INT16 sRange, FLOAT dDegrees );
|
||||||
|
|
||||||
INT32 RandomGridFromRadius( INT32 sSweetGridNo, INT8 ubMinRadius, INT8 ubMaxRadius );
|
INT32 RandomGridFromRadius( INT32 sSweetGridNo, INT8 ubMinRadius, INT8 ubMaxRadius );
|
||||||
|
|
||||||
|
// Parameters for item throwing
|
||||||
|
#define MAX_MISS_BY 30
|
||||||
|
#define MIN_MISS_BY 1
|
||||||
|
#define MAX_MISS_RADIUS 5
|
||||||
// Lesh: needed to fix item throwing through window
|
// Lesh: needed to fix item throwing through window
|
||||||
extern INT16 DirIncrementer[8];
|
extern INT16 DirIncrementer[8];
|
||||||
|
|
||||||
@@ -2030,7 +2034,7 @@ void CalculateLaunchItemBasicParams( SOLDIERTYPE *pSoldier, OBJECTTYPE *pItem, I
|
|||||||
if ( fMortar || fGLauncher )
|
if ( fMortar || fGLauncher )
|
||||||
{
|
{
|
||||||
// find min force
|
// find min force
|
||||||
dMinForce = CalculateForceFromRange( (INT16)( sMinRange / 10 ), (FLOAT)( PI / 4 ) );
|
dMinForce = CalculateForceFromRange( pItem, (INT16)( sMinRange / 10 ), (FLOAT)( PI / 4 ) );
|
||||||
|
|
||||||
if ( dMagForce < dMinForce )
|
if ( dMagForce < dMinForce )
|
||||||
{
|
{
|
||||||
@@ -2147,7 +2151,7 @@ BOOLEAN CalculateLaunchItemChanceToGetThrough( SOLDIERTYPE *pSoldier, OBJECTTYPE
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
FLOAT CalculateForceFromRange( INT16 sRange, FLOAT dDegrees )
|
FLOAT CalculateForceFromRange( OBJECTTYPE *pItem, INT16 sRange, FLOAT dDegrees )
|
||||||
{
|
{
|
||||||
FLOAT dMagForce;
|
FLOAT dMagForce;
|
||||||
INT32 sSrcGridNo, sDestGridNo;
|
INT32 sSrcGridNo, sDestGridNo;
|
||||||
@@ -2163,8 +2167,14 @@ FLOAT CalculateForceFromRange( INT16 sRange, FLOAT dDegrees )
|
|||||||
// sSrcGridNo = 4408;
|
// sSrcGridNo = 4408;
|
||||||
// sDestGridNo = 4408 + ( sRange * WORLD_COLS );
|
// sDestGridNo = 4408 + ( sRange * WORLD_COLS );
|
||||||
|
|
||||||
// Use a grenade objecttype
|
// Buggler: impact explosives requiring larger force to reach desired range due to no bounce
|
||||||
CreateItem( HAND_GRENADE, 100, &gTempObject );
|
// Please change the if conditions too when definition of OBJECT_DETONATE_ON_IMPACT( object ) changes
|
||||||
|
if ( ( Item[ pItem->usItem ].usItemClass == IC_BOMB ) || ( Explosive[ Item[ pItem->usItem ].ubClassIndex ].fExplodeOnImpact ) ) // && ( object->ubActionCode == THROW_ARM_ITEM || pObject->fTestObject ) )
|
||||||
|
// Use a mortar shell objecttype to simulate impact explosives
|
||||||
|
CreateItem( MORTAR_SHELL, 100, &gTempObject );
|
||||||
|
else
|
||||||
|
// Use a grenade objecttype to simulate bouncy explosives
|
||||||
|
CreateItem( HAND_GRENADE, 100, &gTempObject );
|
||||||
|
|
||||||
FindBestForceForTrajectory( sSrcGridNo, sDestGridNo, GET_SOLDIER_THROW_HEIGHT( 0 ), 0, dDegrees, &gTempObject, &sFinalGridNo, &dMagForce );
|
FindBestForceForTrajectory( sSrcGridNo, sDestGridNo, GET_SOLDIER_THROW_HEIGHT( 0 ), 0, dDegrees, &gTempObject, &sFinalGridNo, &dMagForce );
|
||||||
|
|
||||||
@@ -2186,17 +2196,13 @@ FLOAT CalculateSoldierMaxForce( SOLDIERTYPE *pSoldier, FLOAT dDegrees , OBJECTTY
|
|||||||
|
|
||||||
uiMaxRange = CalcMaxTossRange( pSoldier, pItem->usItem, fArmed );
|
uiMaxRange = CalcMaxTossRange( pSoldier, pItem->usItem, fArmed );
|
||||||
|
|
||||||
dMagForce = CalculateForceFromRange( (INT16) uiMaxRange, dDegrees );
|
dMagForce = CalculateForceFromRange( pItem, (INT16) uiMaxRange, dDegrees );
|
||||||
|
|
||||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"CalculateSoldierMaxForce: done");
|
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"CalculateSoldierMaxForce: done");
|
||||||
return( dMagForce );
|
return( dMagForce );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define MAX_MISS_BY 30
|
|
||||||
#define MIN_MISS_BY 1
|
|
||||||
#define MAX_MISS_RADIUS 5
|
|
||||||
|
|
||||||
void CalculateLaunchItemParamsForThrow( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubLevel, INT16 sEndZ, OBJECTTYPE *pItem, INT8 bMissBy, UINT8 ubActionCode, UINT32 uiActionData )
|
void CalculateLaunchItemParamsForThrow( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubLevel, INT16 sEndZ, OBJECTTYPE *pItem, INT8 bMissBy, UINT8 ubActionCode, UINT32 uiActionData )
|
||||||
{
|
{
|
||||||
FLOAT dForce, dDegrees;
|
FLOAT dForce, dDegrees;
|
||||||
|
|||||||
Reference in New Issue
Block a user