Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
93 lines
2.4 KiB
C++
93 lines
2.4 KiB
C++
|
|
#include "MW4Headers.hpp"
|
|
|
|
#include "DamageDispatch_SinglePlayer.hpp"
|
|
#include "MWDamageObject.hpp"
|
|
|
|
extern int g_nMR;
|
|
|
|
using namespace MechWarrior4;
|
|
|
|
MWObject* GetParentVehicle(MWInternalDamageObject& internal_damage_object)
|
|
{
|
|
if ((internal_damage_object.parentEntity != 0) &&
|
|
(internal_damage_object.parentEntity->IsDerivedFrom(MWMover::DefaultData) == true))
|
|
{
|
|
MWMover* mwmover = Cast_Object(MWMover*,internal_damage_object.parentEntity);
|
|
|
|
return (mwmover->GetParentVehicle());
|
|
}
|
|
|
|
return (0);
|
|
}
|
|
|
|
void DamageDispatch_SinglePlayer::InflictCriticalHit(MWInternalDamageObject& internal_damage_object)
|
|
{
|
|
if (GetGlobalInvulnerability() == true)
|
|
{
|
|
MWObject* parent = GetParentVehicle(internal_damage_object);
|
|
|
|
if ((parent != 0) &&
|
|
(parent->IsPlayerVehicle() == true))
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
internal_damage_object._InflictCriticalHit();
|
|
}
|
|
|
|
Scalar DamageDispatch_SinglePlayer::TakeDamage(MWInternalDamageObject& internal_damage_object, Scalar damage_taken, Entity__TakeDamageMessage *message)
|
|
{
|
|
if (GetGlobalInvulnerability() == true)
|
|
{
|
|
MWObject* parent = GetParentVehicle(internal_damage_object);
|
|
|
|
if ((parent != 0) &&
|
|
(parent->IsPlayerVehicle() == true))
|
|
{
|
|
return (0);
|
|
}
|
|
}
|
|
|
|
if ((internal_damage_object.parentEntity != 0) &&
|
|
(internal_damage_object.parentEntity->IsDerivedFrom(MWObject::DefaultData) == true))
|
|
{
|
|
MWObject* mwobject = Cast_Object(MWObject*,internal_damage_object.parentEntity);
|
|
if (mwobject->FriendlyFireDamageMultiplier() != 1)
|
|
{
|
|
Connection *connection = Network::GetInstance()->GetConnection(message->inflictingEntityID.connectionID);
|
|
if (connection != 0)
|
|
{
|
|
Check_Object(connection);
|
|
|
|
Entity *entity = Cast_Object(Entity*,connection->FindReplicator(message->inflictingEntityID));
|
|
|
|
if ((entity != 0) &&
|
|
(entity->GetAlignment() == mwobject->GetAlignment()))
|
|
{
|
|
damage_taken *= mwobject->FriendlyFireDamageMultiplier();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return (internal_damage_object._TakeDamage(damage_taken,message));
|
|
}
|
|
|
|
void DamageDispatch_SinglePlayer::KillAllContainedSubsystems(MWInternalDamageObject& internal_damage_object)
|
|
{
|
|
if (GetGlobalInvulnerability() == true)
|
|
{
|
|
MWObject* parent = GetParentVehicle(internal_damage_object);
|
|
|
|
if ((parent != 0) &&
|
|
(parent->IsPlayerVehicle() == true))
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
internal_damage_object._KillAllContainedSubsystems();
|
|
}
|