- 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:
Wanne
2013-02-23 09:44:05 +00:00
parent f6274eade2
commit 5d141e0746
+16 -10
View File
@@ -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 PhysicsDeleteObject( REAL_OBJECT *pObject );
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 );
// 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
extern INT16 DirIncrementer[8];
@@ -2030,7 +2034,7 @@ void CalculateLaunchItemBasicParams( SOLDIERTYPE *pSoldier, OBJECTTYPE *pItem, I
if ( fMortar || fGLauncher )
{
// find min force
dMinForce = CalculateForceFromRange( (INT16)( sMinRange / 10 ), (FLOAT)( PI / 4 ) );
dMinForce = CalculateForceFromRange( pItem, (INT16)( sMinRange / 10 ), (FLOAT)( PI / 4 ) );
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;
INT32 sSrcGridNo, sDestGridNo;
@@ -2163,8 +2167,14 @@ FLOAT CalculateForceFromRange( INT16 sRange, FLOAT dDegrees )
// sSrcGridNo = 4408;
// sDestGridNo = 4408 + ( sRange * WORLD_COLS );
// Use a grenade objecttype
CreateItem( HAND_GRENADE, 100, &gTempObject );
// Buggler: impact explosives requiring larger force to reach desired range due to no bounce
// 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 );
@@ -2186,17 +2196,13 @@ FLOAT CalculateSoldierMaxForce( SOLDIERTYPE *pSoldier, FLOAT dDegrees , OBJECTTY
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");
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 )
{
FLOAT dForce, dDegrees;