So I've made an instagib gun that has the shield as secondary fire.view here The instagib beam is reflected by the shield, but i want to cause a pawn hit by the reflected beam to be gibbed. i thought that there was a reference that needed to be changed since i subclassed the shockbeamfire/shockbeameffect, but the shock beam does not deal damage when reflected either. does anyone know how i could go about doing this??? here is the code for the reflection of the shield gun: if ( CheckReflect(HitLocation, HitNormal, 0) )

{

Drain = Min( AmmoAmount(1)*2, Damage );

Drain = Min(Drain,DamageMax);

Reflect = MirrorVectorByNormal( Normal(Location - HitLocation), Vector(Instigator.Rotation) );

Damage -= Drain;

Momentum *= 1.25;

if ( (Instigator != None) && (Instigator.PlayerReplicationInfo != None) && (Instigator.PlayerReplicationInfo.HasFlag != None) )

{

Drain = Min(AmmoAmount(1), Drain);

ConsumeAmmo(1,Drain);

DoReflectEffect(Drain);

}

else

{

ConsumeAmmo(1,Drain/2);

DoReflectEffect(Drain/2);

}

}

}

function DoReflectEffect(int Drain)

{

PlaySound(ShieldHitSound, SLOT_None);

ShieldAltFire(FireMode[1]).TakeHit(Drain);

ClientTakeHit(Drain);

}

simulated function ClientTakeHit(int Drain)

{

ClientPlayForceFeedback(ShieldHitForce);

ShieldAltFire(FireMode[1]).TakeHit(Drain);

}

simulated function float AmmoStatus(optional int Mode) // returns float value for ammo amount

{

if ( Instigator == None || Instigator.Weapon != self )

{

if ( (FireMode[1].TimerInterval != 0.f) && (FireMode[1].NextTimerPop < Level.TimeSeconds) )

{

FireMode[1].Timer();

if ( FireMode[1].bTimerLoop )

FireMode[1].NextTimerPop = FireMode[1].NextTimerPop + FireMode[1].TimerInterval;

else

FireMode[1].TimerInterval = 0.f;

}

}

return Super.AmmoStatus(Mode);

}

function bool CheckReflect( Vector HitLocation, out Vector RefNormal, int AmmoDrain )

{

local Vector HitDir;

local Vector FaceDir;

if (!FireMode[1].bIsFiring || AmmoAmount(0) == 0) return false;

FaceDir = Vector(Instigator.Controller.Rotation);

HitDir = Normal(Instigator.Location - HitLocation + Vect(0,0,8));

//Log(self@"HitDir"@(FaceDir dot HitDir));

RefNormal = FaceDir;

if ( FaceDir dot HitDir < -0.37 ) // 68 degree protection arc

{

if (AmmoDrain > 0)

ConsumeAmmo(0,AmmoDrain);

return true;

}

return false;

}

function AnimEnd(int channel)

{

if (FireMode[0].bIsFiring)

{

LoopAnim('Charged');

}

else if (!FireMode[1].bIsFiring)

{

Super.AnimEnd(channel);

}

I'm just not sure how i would go about telling the engine that the reflected beam should deal damage and have the same damage type properties of the beamfire. Is it even possible, since the beam is instant hit? is the reflected beam just an emitter and not the beamfire itself? questions i need answers to! any help would be much appreciated!

{

Drain = Min( AmmoAmount(1)*2, Damage );

Drain = Min(Drain,DamageMax);

Reflect = MirrorVectorByNormal( Normal(Location - HitLocation), Vector(Instigator.Rotation) );

Damage -= Drain;

Momentum *= 1.25;

if ( (Instigator != None) && (Instigator.PlayerReplicationInfo != None) && (Instigator.PlayerReplicationInfo.HasFlag != None) )

{

Drain = Min(AmmoAmount(1), Drain);

ConsumeAmmo(1,Drain);

DoReflectEffect(Drain);

}

else

{

ConsumeAmmo(1,Drain/2);

DoReflectEffect(Drain/2);

}

}

}

function DoReflectEffect(int Drain)

{

PlaySound(ShieldHitSound, SLOT_None);

ShieldAltFire(FireMode[1]).TakeHit(Drain);

ClientTakeHit(Drain);

}

simulated function ClientTakeHit(int Drain)

{

ClientPlayForceFeedback(ShieldHitForce);

ShieldAltFire(FireMode[1]).TakeHit(Drain);

}

simulated function float AmmoStatus(optional int Mode) // returns float value for ammo amount

{

if ( Instigator == None || Instigator.Weapon != self )

{

if ( (FireMode[1].TimerInterval != 0.f) && (FireMode[1].NextTimerPop < Level.TimeSeconds) )

{

FireMode[1].Timer();

if ( FireMode[1].bTimerLoop )

FireMode[1].NextTimerPop = FireMode[1].NextTimerPop + FireMode[1].TimerInterval;

else

FireMode[1].TimerInterval = 0.f;

}

}

return Super.AmmoStatus(Mode);

}

function bool CheckReflect( Vector HitLocation, out Vector RefNormal, int AmmoDrain )

{

local Vector HitDir;

local Vector FaceDir;

if (!FireMode[1].bIsFiring || AmmoAmount(0) == 0) return false;

FaceDir = Vector(Instigator.Controller.Rotation);

HitDir = Normal(Instigator.Location - HitLocation + Vect(0,0,8));

//Log(self@"HitDir"@(FaceDir dot HitDir));

RefNormal = FaceDir;

if ( FaceDir dot HitDir < -0.37 ) // 68 degree protection arc

{

if (AmmoDrain > 0)

ConsumeAmmo(0,AmmoDrain);

return true;

}

return false;

}

function AnimEnd(int channel)

{

if (FireMode[0].bIsFiring)

{

LoopAnim('Charged');

}

else if (!FireMode[1].bIsFiring)

{

Super.AnimEnd(channel);

}

I'm just not sure how i would go about telling the engine that the reflected beam should deal damage and have the same damage type properties of the beamfire. Is it even possible, since the beam is instant hit? is the reflected beam just an emitter and not the beamfire itself? questions i need answers to! any help would be much appreciated!

## Comment