mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +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 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;
|
||||
|
||||
Reference in New Issue
Block a user