From 5d141e074619d8dbb2c29b97fc28ab99fe53fcb0 Mon Sep 17 00:00:00 2001 From: Wanne Date: Sat, 23 Feb 2013 09:44:05 +0000 Subject: [PATCH] - Fixed reduced max range for explosives that has 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 --- TileEngine/physics.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/TileEngine/physics.cpp b/TileEngine/physics.cpp index 0971061d..26897a82 100644 --- a/TileEngine/physics.cpp +++ b/TileEngine/physics.cpp @@ -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;