mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
- bugfix: CTD when bullets hit door
- Added ShadowWorrier's tooltip fix git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@517 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+33
-29
@@ -2468,43 +2468,47 @@ INT32 HandleBulletStructureInteraction( BULLET * pBullet, STRUCTURE * pStructure
|
||||
// Does it have a lock?
|
||||
INT16 lockBustingPower = AmmoTypes[pBullet->pFirer->inv[ pBullet->pFirer->ubAttackingHand ].ubGunAmmoType].lockBustingPower;
|
||||
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("Door info: damage = %d, pick difficulty = %d, smash difficulty = %d, lockbuster power = %d",pDoor->bLockDamage,LockTable[ pDoor->ubLockID ].ubPickDifficulty,LockTable[ pDoor->ubLockID ].ubSmashDifficulty,lockBustingPower) );
|
||||
|
||||
if ( pDoor && (( LockTable[ pDoor->ubLockID ].ubPickDifficulty < 50 && LockTable[ pDoor->ubLockID ].ubSmashDifficulty < 70 ) || lockBustingPower*2 >= LockTable[ pDoor->ubLockID ].ubSmashDifficulty ) )
|
||||
// WANNE: bugfix: No door returned, so the game crashes!
|
||||
if (pDoor)
|
||||
{
|
||||
// Yup.....
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("Door info: damage = %d, pick difficulty = %d, smash difficulty = %d, lockbuster power = %d",pDoor->bLockDamage,LockTable[ pDoor->ubLockID ].ubPickDifficulty,LockTable[ pDoor->ubLockID ].ubSmashDifficulty,lockBustingPower) );
|
||||
|
||||
// Chance that it hit the lock....
|
||||
if ( PreRandom( 2 ) == 0 || lockBustingPower > 0 )
|
||||
if ( pDoor && (( LockTable[ pDoor->ubLockID ].ubPickDifficulty < 50 && LockTable[ pDoor->ubLockID ].ubSmashDifficulty < 70 ) || lockBustingPower*2 >= LockTable[ pDoor->ubLockID ].ubSmashDifficulty ) )
|
||||
{
|
||||
// Adjust damage-- CC adjust this based on gun type, etc.....
|
||||
//sLockDamage = (INT16)( 35 + Random( 35 ) );
|
||||
sLockDamage = (INT16) (pBullet->iImpact - pBullet->iImpactReduction );
|
||||
sLockDamage += (INT16) PreRandom( sLockDamage );
|
||||
sLockDamage += lockBustingPower;
|
||||
// Yup.....
|
||||
|
||||
sLockDamage = min(sLockDamage,127);
|
||||
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ LOCK_HAS_BEEN_HIT ] );
|
||||
|
||||
//Madd: catch the overflow
|
||||
if ( sLockDamage + pDoor->bLockDamage > 127 )
|
||||
pDoor->bLockDamage = 127;
|
||||
else
|
||||
pDoor->bLockDamage+= sLockDamage;
|
||||
|
||||
// Check if it has been shot!
|
||||
if ( pDoor->bLockDamage > LockTable[ pDoor->ubLockID ].ubSmashDifficulty || sLockDamage > LockTable[ pDoor->ubLockID ].ubSmashDifficulty )
|
||||
// Chance that it hit the lock....
|
||||
if ( PreRandom( 2 ) == 0 || lockBustingPower > 0 )
|
||||
{
|
||||
// Display message!
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ LOCK_HAS_BEEN_DESTROYED ] );
|
||||
// Adjust damage-- CC adjust this based on gun type, etc.....
|
||||
//sLockDamage = (INT16)( 35 + Random( 35 ) );
|
||||
sLockDamage = (INT16) (pBullet->iImpact - pBullet->iImpactReduction );
|
||||
sLockDamage += (INT16) PreRandom( sLockDamage );
|
||||
sLockDamage += lockBustingPower;
|
||||
|
||||
// succeeded! door can never be locked again, so remove from door list...
|
||||
RemoveDoorInfoFromTable( pDoor->sGridNo );
|
||||
sLockDamage = min(sLockDamage,127);
|
||||
|
||||
// MARKSMANSHIP GAIN (marksPts): Opened/Damaged a door
|
||||
StatChange( pBullet->pFirer, MARKAMT, 10, FALSE );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ LOCK_HAS_BEEN_HIT ] );
|
||||
|
||||
//Madd: catch the overflow
|
||||
if ( sLockDamage + pDoor->bLockDamage > 127 )
|
||||
pDoor->bLockDamage = 127;
|
||||
else
|
||||
pDoor->bLockDamage+= sLockDamage;
|
||||
|
||||
// Check if it has been shot!
|
||||
if ( pDoor->bLockDamage > LockTable[ pDoor->ubLockID ].ubSmashDifficulty || sLockDamage > LockTable[ pDoor->ubLockID ].ubSmashDifficulty )
|
||||
{
|
||||
// Display message!
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ LOCK_HAS_BEEN_DESTROYED ] );
|
||||
|
||||
// succeeded! door can never be locked again, so remove from door list...
|
||||
RemoveDoorInfoFromTable( pDoor->sGridNo );
|
||||
|
||||
// MARKSMANSHIP GAIN (marksPts): Opened/Damaged a door
|
||||
StatChange( pBullet->pFirer, MARKAMT, 10, FALSE );
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user