Skip to content

Commit 1594474

Browse files
authored
bugfix(physics): Prevent dead units from repeatedly dealing crash damage on collision with non-buildings (TheSuperHackers#2204)
1 parent 5ef7985 commit 1594474

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

Generals/Code/GameEngine/Source/GameLogic/Object/Update/PhysicsUpdate.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@
3232
#define NO_DEBUG_CRC
3333

3434
#include "Common/PerfTimer.h"
35+
#include "Common/Player.h"
3536
#include "Common/ThingTemplate.h"
3637
#include "Common/Xfer.h"
38+
#include "GameClient/FXList.h"
3739
#include "GameLogic/GameLogic.h"
3840
#include "GameLogic/Module/AIUpdate.h"
3941
#include "GameLogic/Module/BodyModule.h"
@@ -1262,7 +1264,26 @@ void PhysicsBehavior::onCollide( Object *other, const Coord3D *loc, const Coord3
12621264
// fall into a nonbuilding -- whatever. if we're a vehicle, quietly do a little damage.
12631265
if (obj->isKindOf(KINDOF_VEHICLE))
12641266
{
1267+
#if RETAIL_COMPATIBLE_CRC
12651268
TheWeaponStore->createAndFireTempWeapon(getPhysicsBehaviorModuleData()->m_vehicleCrashesIntoNonBuildingWeaponTemplate, obj, obj->getPosition());
1269+
#else
1270+
// TheSuperHackers @bugfix Stubbjax 19/04/2026 Prevent non-building collisions from repeatedly dealing collateral damage to other objects.
1271+
const WeaponTemplate* weaponTemplate = getPhysicsBehaviorModuleData()->m_vehicleCrashesIntoNonBuildingWeaponTemplate;
1272+
if (weaponTemplate != nullptr)
1273+
{
1274+
WeaponBonus nullBonus;
1275+
1276+
DamageInfo damageInfo;
1277+
damageInfo.in.m_damageType = weaponTemplate->getDamageType();
1278+
damageInfo.in.m_deathType = weaponTemplate->getDeathType();
1279+
damageInfo.in.m_sourceID = obj->getID();
1280+
damageInfo.in.m_sourcePlayerMask = obj->getControllingPlayer() ? obj->getControllingPlayer()->getPlayerMask() : 0;
1281+
damageInfo.in.m_amount = weaponTemplate->getPrimaryDamage(nullBonus);
1282+
1283+
other->attemptDamage(&damageInfo);
1284+
FXList::doFXObj(weaponTemplate->getFireFX(obj->getVeterancyLevel()), obj);
1285+
}
1286+
#endif
12661287
}
12671288
}
12681289
}

GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/PhysicsUpdate.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@
3232
#define NO_DEBUG_CRC
3333

3434
#include "Common/PerfTimer.h"
35+
#include "Common/Player.h"
3536
#include "Common/ThingTemplate.h"
3637
#include "Common/Xfer.h"
38+
#include "GameClient/FXList.h"
3739
#include "GameLogic/GameLogic.h"
3840
#include "GameLogic/Module/AIUpdate.h"
3941
#include "GameLogic/Module/BodyModule.h"
@@ -1387,7 +1389,26 @@ void PhysicsBehavior::onCollide( Object *other, const Coord3D *loc, const Coord3
13871389
// fall into a nonbuilding -- whatever. if we're a vehicle, quietly do a little damage.
13881390
if (obj->isKindOf(KINDOF_VEHICLE))
13891391
{
1392+
#if RETAIL_COMPATIBLE_CRC
13901393
TheWeaponStore->createAndFireTempWeapon(getPhysicsBehaviorModuleData()->m_vehicleCrashesIntoNonBuildingWeaponTemplate, obj, obj->getPosition());
1394+
#else
1395+
// TheSuperHackers @bugfix Stubbjax 19/04/2026 Prevent non-building collisions from repeatedly dealing collateral damage to other objects.
1396+
const WeaponTemplate* weaponTemplate = getPhysicsBehaviorModuleData()->m_vehicleCrashesIntoNonBuildingWeaponTemplate;
1397+
if (weaponTemplate != nullptr)
1398+
{
1399+
WeaponBonus nullBonus;
1400+
1401+
DamageInfo damageInfo;
1402+
damageInfo.in.m_damageType = weaponTemplate->getDamageType();
1403+
damageInfo.in.m_deathType = weaponTemplate->getDeathType();
1404+
damageInfo.in.m_sourceID = obj->getID();
1405+
damageInfo.in.m_sourcePlayerMask = obj->getControllingPlayer() ? obj->getControllingPlayer()->getPlayerMask() : 0;
1406+
damageInfo.in.m_amount = weaponTemplate->getPrimaryDamage(nullBonus);
1407+
1408+
other->attemptDamage(&damageInfo);
1409+
FXList::doFXObj(weaponTemplate->getFireFX(obj->getVeterancyLevel()), obj);
1410+
}
1411+
#endif
13911412
}
13921413
}
13931414
}

0 commit comments

Comments
 (0)