Monster Match
Creature Match is a Free-to-Play amusement for Android robot and Apple logo dark, in which players investigate the Prismal Islands catching, gathering and developing their own Monster Team. The amusement includes a riddle based fight workman wherein players match pearls so as to make their beasts assault. There are at present more than 700 Monsters to gather in the amusement, and more are included with each occasion.
-
- Novice
- Posts: 11
- Joined: Sat Feb 27, 2016 6:39 pm
- Status: Offline
Bump >>>
Let's move this ahead. Post error, post function... then, my turn... I'll post what I think that will solve Accessed None in that function. Your move = Try new compilation and check if error occurs again.
Let's move this ahead. Post error, post function... then, my turn... I'll post what I think that will solve Accessed None in that function. Your move = Try new compilation and check if error occurs again.
-
- Novice
- Posts: 11
- Joined: Sat Feb 27, 2016 6:39 pm
- Status: Offline
Error sample:
Function content (what I have seen):
My Presumed fix - See differences
Rules ARE simple: when we access some ActorValue we have to be sure about "if (ActorValue != None)" and then everything accessed reach at target else it results only NONE.
Code: Select all
ScriptWarning: MM_Mercenary MM-TestMap.MM_Mercenary1 (Function MMGame.MM_Mercenary.SpawnCarcass:0796) Accessed None
Code: Select all
function Carcass SpawnCarcass()
{
local carcass carc;
local inventory w;
local inventory v;
local mm_mercenary s;
local float Selection;
Selection = FRand();
w = instigator.FindInventoryType(class'MM_GoldUnholyTool');
if ( w != None )
{
if ( Selection < zombiechance )
{
if (!bzombie)
{
s = Spawn(class'mm_mercenary',,,Location);
s.instigator = self.instigator;
s.playerreplicationinfo.team = self.playerreplicationinfo.team;
s.aggressiveness = self.aggressiveness * 2;
s.bhasrangedattack = false;
s.bmovingrangedattack = false;
s.bcanstrafe = false;
s.dropwhenkilled = none;
s.drawscale = self.drawscale;
s.bzombie = true;
v = instigator.FindInventoryType(class'MM_SilverImprovementTool');
if ( v != None )
{
s.groundspeed =0.7*self.groundspeed;
s.airspeed = 0.7*self.airspeed;
s.waterspeed = 2.5*self.waterspeed;
s.health = self.default.health*3;
s.fatness = 0.3*self.fatness;
}
v = instigator.FindInventoryType(class'MM_SilverImprovementTool');
if ( v == None )
{
s.groundspeed =0.5*self.groundspeed;
s.airspeed = 0.5*self.airspeed;
s.waterspeed = 2*self.waterspeed;
s.health = self.default.health*2;
s.fatness = 0.5*self.fatness;
}
s.skin = zombieskin;
s.multiskins[0] = self.zombieskin;
s.multiskins[1] = self.zombieskin;
s.multiskins[2] = self.zombieskin;
s.multiskins[3] = self.zombieskin;
s.multiskins[4] = self.zombieskin;
s.multiskins[5] = self.zombieskin;
s.multiskins[6] = self.zombieskin;
s.multiskins[7] = self.zombieskin;
}
if (bzombie)
{
carc = Spawn(CarcassType);
carc.multiskins[0] = self.multiskins[0];
carc.multiskins[1] = self.multiskins[1];
carc.multiskins[2] = self.multiskins[2];
carc.multiskins[3] = self.multiskins[3];
carc.multiskins[4] = self.multiskins[4];
carc.multiskins[5] = self.multiskins[5];
carc.multiskins[6] = self.multiskins[6];
carc.multiskins[7] = self.multiskins[7];
carc.skin = self.skin;
s.fatness = self.fatness;
if ( carc != None )
carc.Initfor(self);
}
}
else
{
carc = Spawn(CarcassType);
carc.multiskins[0] = self.multiskins[0];
carc.multiskins[1] = self.multiskins[1];
carc.multiskins[2] = self.multiskins[2];
carc.multiskins[3] = self.multiskins[3];
carc.multiskins[4] = self.multiskins[4];
carc.multiskins[5] = self.multiskins[5];
carc.multiskins[6] = self.multiskins[6];
carc.multiskins[7] = self.multiskins[7];
carc.skin = self.skin;
s.fatness = self.fatness;
if ( carc != None )
carc.Initfor(self);
}
}
w = instigator.FindInventoryType(class'MM_GoldUnholyTool');
if ( w == None )
{
carc = Spawn(CarcassType);
carc.multiskins[0] = self.multiskins[0];
carc.multiskins[1] = self.multiskins[1];
carc.multiskins[2] = self.multiskins[2];
carc.multiskins[3] = self.multiskins[3];
carc.multiskins[4] = self.multiskins[4];
carc.multiskins[5] = self.multiskins[5];
carc.multiskins[6] = self.multiskins[6];
carc.multiskins[7] = self.multiskins[7];
carc.skin = self.skin;
s.fatness = self.fatness;
if ( carc != None )
carc.Initfor(self);
return carc;
}
}
Code: Select all
function Carcass SpawnCarcass()
{
local carcass carc;
local inventory w;
local inventory v;
local mm_mercenary s;
local float Selection;
Selection = FRand();
if ( self.instigator != None ) //Added Main Sanity Check
{
w = instigator.FindInventoryType(class'MM_GoldUnholyTool');
if ( w != None )
{
if ( Selection < zombiechance )
{
if (!bzombie)
{
s = Spawn(class'mm_mercenary',,,Location); //Is only try to spawn, LOL
if ( s != None ) //Sanitycheck
{
s.instigator = self.instigator;
if ( s.PlayerReplicationInfo != None && self.PlayerReplicationInfo != None )
s.playerreplicationinfo.team = self.playerreplicationinfo.team;
s.aggressiveness = self.aggressiveness * 2;
s.bhasrangedattack = false;
s.bmovingrangedattack = false;
s.bcanstrafe = false;
s.dropwhenkilled = none;
s.drawscale = self.drawscale;
s.bzombie = true;
v = instigator.FindInventoryType(class'MM_SilverImprovementTool');
if ( v != None )
{
s.groundspeed =0.7*self.groundspeed;
s.airspeed = 0.7*self.airspeed;
s.waterspeed = 2.5*self.waterspeed;
s.health = self.default.health*3;
s.fatness = 0.3*self.fatness;
}
v = instigator.FindInventoryType(class'MM_SilverImprovementTool');
if ( v == None )
{
s.groundspeed =0.5*self.groundspeed;
s.airspeed = 0.5*self.airspeed;
s.waterspeed = 2*self.waterspeed;
s.health = self.default.health*2;
s.fatness = 0.5*self.fatness;
}
s.skin = zombieskin;
s.multiskins[0] = self.zombieskin;
s.multiskins[1] = self.zombieskin;
s.multiskins[2] = self.zombieskin;
s.multiskins[3] = self.zombieskin;
s.multiskins[4] = self.zombieskin;
s.multiskins[5] = self.zombieskin;
s.multiskins[6] = self.zombieskin;
s.multiskins[7] = self.zombieskin;
}
}
else
// if (bzombie) //Can be just an else !bzombie was before Boolean has only 2 options !bzombie or else is automated bzombie
{
carc = Spawn(CarcassType);
if ( carc != None ) //Moved - Test Spawning
{
carc.multiskins[0] = self.multiskins[0];
carc.multiskins[1] = self.multiskins[1];
carc.multiskins[2] = self.multiskins[2];
carc.multiskins[3] = self.multiskins[3];
carc.multiskins[4] = self.multiskins[4];
carc.multiskins[5] = self.multiskins[5];
carc.multiskins[6] = self.multiskins[6];
carc.multiskins[7] = self.multiskins[7];
carc.skin = self.skin;
// s.fatness = self.fatness; //=???
carc.fatness = self.fatness; //added
// if ( carc != None ) //LOL ? Move this before!
carc.Initfor(self);
}
}
}
else
{
carc = Spawn(CarcassType);
if (carc != None) //Moved
{
carc.multiskins[0] = self.multiskins[0];
carc.multiskins[1] = self.multiskins[1];
carc.multiskins[2] = self.multiskins[2];
carc.multiskins[3] = self.multiskins[3];
carc.multiskins[4] = self.multiskins[4];
carc.multiskins[5] = self.multiskins[5];
carc.multiskins[6] = self.multiskins[6];
carc.multiskins[7] = self.multiskins[7];
carc.skin = self.skin;
// s.fatness = self.fatness; //=???
carc.fatness = self.fatness; //added
// if ( carc != None ) //LOL ? Move this before!
carc.Initfor(self);
}
}
}
// w = instigator.FindInventoryType(class'MM_GoldUnholyTool'); //WHY 2 checks ?
else
{
carc = Spawn(CarcassType);
if ( carc != None ) //ADDED-MOVED
{
carc.multiskins[0] = self.multiskins[0];
carc.multiskins[1] = self.multiskins[1];
carc.multiskins[2] = self.multiskins[2];
carc.multiskins[3] = self.multiskins[3];
carc.multiskins[4] = self.multiskins[4];
carc.multiskins[5] = self.multiskins[5];
carc.multiskins[6] = self.multiskins[6];
carc.multiskins[7] = self.multiskins[7];
carc.skin = self.skin;
carc.fatness = self.fatness;
// if ( carc != None ) //NOT HERE
carc.Initfor(self);
}
}
}
return carc;
}
SpawnCarcass error is fixed with your edited code for all monsters. Thank you!
you can fix one of Flying.ProcessTouch error?
Last updated code is here
http://ultut.in/ut_dev/MMGame_v1_1_Test_Source.zip
you can fix one of Flying.ProcessTouch error?
Code: Select all
ScriptWarning: MM_BruteProjectile MM-TestMap.MM_BruteProjectile16 (Function MMGame.MM_BruteProjectile.Flying.ProcessTouch:003B) Accessed None
http://ultut.in/ut_dev/MMGame_v1_1_Test_Source.zip
-
- Novice
- Posts: 11
- Joined: Sat Feb 27, 2016 6:39 pm
- Status: Offline
Original code more readable is this one
My Solution/Proposal >>>
Go figure...
Source-code above doesn't compile because of some texture missing
Code: Select all
simulated function ProcessTouch (Actor Other, Vector HitLocation)
{
local vector momentum;
local inventory w;
local float Selection;
local int NewFatness;
Selection = FRand();
//////////////////////////////////////////
//////////////////////////////////////////
if ( other == instigator ) //Rakiayn: monster getting hit not by own meleeattack but from an other monster//
{
//Rakiayn: monster does not get hit
//Add > This check is pointless, Next check does job normally and nothing happens with instigator, if != None
}
if ( other != instigator )
{
//momentum = MomentumTransfer * Normal(Velocity);///
w = other.instigator.FindInventoryType(class'MM_GoldnalispiritTool');
if ( w != None )
{
if ( Selection < nalispirit )
{
other.style = STY_translucent;
PlaySound(sound'Teleport1',, 2.0);
other.ScaleGlow = 2.0;
other.fatness = Clamp(NewFatness, 0, 255);
playerpawn(other).weapon.Style = STY_translucent;
}
else
{
Explode(HitLocation,Vect(0,0,0));
other.style = other.default.style;
other.ScaleGlow = other.default.Scaleglow;
other.fatness = 128;
//playerpawn(other).weapon.Style = playerpawn(other).weapon.default.Style;
}
Destroy();
}
w = other.instigator.FindInventoryType(class'MM_GoldnalispiritTool');
if ( w == None )
{
Explode(HitLocation,Vect(0,0,0));
other.style = other.default.style;
other.ScaleGlow = other.default.Scaleglow;
other.fatness = 128;
//playerpawn(other).weapon.Style = playerpawn(other).weapon.default.Style;
}
Destroy();
}
}
Code: Select all
simulated function ProcessTouch (Actor Other, Vector HitLocation)
{
local vector momentum;
local inventory w;
local float Selection;
local int NewFatness;
Selection = FRand();
//////////////////////////////////////////
//////////////////////////////////////////
/*
if ( other == instigator ) //Rakiayn: monster getting hit not by own meleeattack but from an other monster//
{
//Rakiayn: monster does not get hit
//Add > This check is pointless, Next check does job normally and nothing happens with instigator, if != None
}
//Removed this chapter, doesn't make any sense.
*/
if ( other != instigator && Instigator != None )
{
//momentum = MomentumTransfer * Normal(Velocity);
w = other.instigator.FindInventoryType(class'MM_GoldnalispiritTool'); //hm, let me see #1
if ( w != None )
{
if ( Selection < nalispirit )
{
other.style = STY_translucent;
PlaySound(sound'Teleport1',, 2.0);
other.ScaleGlow = 2.0;
other.fatness = Clamp(NewFatness, 0, 255);
if ( PlayerPawn(other) != None && PlayerPawn(other).Weapon != None ) //Added sanity check
playerpawn(other).weapon.Style = STY_translucent;
}
else
{
Explode(HitLocation,Vect(0,0,0));
other.style = other.default.style;
other.ScaleGlow = other.default.Scaleglow;
other.fatness = 128;
if ( PlayerPawn(other) != None && PlayerPawn(other).Weapon != None ) //Added sanity check
PlayerPawn(other).Weapon.Style = playerpawn(other).weapon.default.Style; //Added back - remove if it is not needed
}
Destroy();
} //if not then process ELSE bellow
// w = other.instigator.FindInventoryType(class'MM_GoldnalispiritTool'); #2 WHAT For ??? Already checked..
// if ( w == None ) //pointless
else //Changed condition
{
Explode(HitLocation,Vect(0,0,0));
other.style = other.default.style;
other.ScaleGlow = other.default.Scaleglow;
other.fatness = 128;
if ( PlayerPawn(other) != None && PlayerPawn(other).Weapon != None ) //Added sanity check
PlayerPawn(other).weapon.Style = PlayerPawn(other).Weapon.Default.Style; //Back Style if changed
}
Destroy();
}
}
Source-code above doesn't compile because of some texture missing
Which textures?
Still error coming...
Compiled & playable file is here
http://ultut.in/ut_dev/MMGame_v1_1_Test_Pack.zip
Still error coming...
Code: Select all
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile360 (Function MMGame_v1_1.MM_BruteProjectile.Flying.ProcessTouch:003B) Accessed None
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile360 (Function MMGame_v1_1.MM_BruteProjectile.Flying.ProcessTouch:014D) Accessed None
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile364 (Function MMGame_v1_1.MM_BruteProjectile.Flying.ProcessTouch:003B) Accessed None
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile364 (Function MMGame_v1_1.MM_BruteProjectile.Flying.ProcessTouch:014D) Accessed None
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile394 (Function MMGame_v1_1.MM_BruteProjectile.Flying.ProcessTouch:003B) Accessed None
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile394 (Function MMGame_v1_1.MM_BruteProjectile.Flying.ProcessTouch:014D) Accessed None
Compiled & playable file is here
http://ultut.in/ut_dev/MMGame_v1_1_Test_Pack.zip
-
- Novice
- Posts: 11
- Joined: Sat Feb 27, 2016 6:39 pm
- Status: Offline
Because still codes are wrong
Old code:You should wrap it, it's not friendly readable.
New Code
Old code:
Code: Select all
simulated function ProcessTouch (Actor Other, Vector HitLocation)
{
local vector momentum;
local inventory w;
local float Selection;
local int NewFatness;
Selection = FRand();
//////////////////////////////////////////
//////////////////////////////////////////
if (other == instigator) //Rakiayn: monster getting hit not by own meleeattack but from an other monster//
{
//Rakiayn: monster does not get hit//
}
if (other != instigator)
{
//momentum = MomentumTransfer * Normal(Velocity);///
w = other.instigator.FindInventoryType(class'MM_GoldnalispiritTool');
if ( w != None )
{
if ( Selection < nalispirit )
{
other.style = STY_translucent;
PlaySound(sound'Teleport1',, 2.0);
other.ScaleGlow = 2.0;
other.fatness = Clamp(NewFatness, 0, 255);
playerpawn(other).weapon.Style = STY_translucent;
}
else
{
Explode(HitLocation,Vect(0,0,0));
other.style = other.default.style;
other.ScaleGlow = other.default.Scaleglow;
other.fatness = 128;
//playerpawn(other).weapon.Style = playerpawn(other).weapon.default.Style;
}
destroy();
}
w = other.instigator.FindInventoryType(class'MM_GoldnalispiritTool');
if ( w == None )
{
Explode(HitLocation,Vect(0,0,0));
other.style = other.default.style;
other.ScaleGlow = other.default.Scaleglow;
other.fatness = 128;
//playerpawn(other).weapon.Style = playerpawn(other).weapon.default.Style;
}
destroy();
}
}
New Code
- ....
simulated function ProcessTouch (Actor Other, Vector HitLocation)
{
local vector momentum;
local inventory w;
local float Selection;
local int NewFatness;
Selection = FRand();
//////////////////////////////////////////
//////////////////////////////////////////
/*
if ( other == instigator ) //Rakiayn: monster getting hit not by own meleeattack but from an other monster//
{
//Rakiayn: monster does not get hit
//Add > This check is pointless, Next check does job normally and nothing happens with instigator, if != None
}
//Removed this chapter, doesn't make any sense.
*/
if ( other != instigator )
{
//momentum = MomentumTransfer * Normal(Velocity);
if (other.Instigator != None) //THIS ??
w = other.instigator.FindInventoryType(class'MM_GoldnalispiritTool'); //hm, let me see #1
if ( w != None )
{
if ( Selection < nalispirit )
{
other.style = STY_translucent;
PlaySound(sound'Teleport1',, 2.0);
other.ScaleGlow = 2.0;
other.fatness = Clamp(NewFatness, 0, 255);
if ( PlayerPawn(other) != None && PlayerPawn(other).Weapon != None ) //Added sanity check
playerpawn(other).weapon.Style = STY_translucent;
}
else
{
Explode(HitLocation,Vect(0,0,0));
other.style = other.default.style;
other.ScaleGlow = other.default.Scaleglow;
other.fatness = 128;
if ( PlayerPawn(other) != None && PlayerPawn(other).Weapon != None ) //Added sanity check
PlayerPawn(other).Weapon.Style = playerpawn(other).weapon.default.Style; //Added - back - remove if it is not needed - or using PlayerReplicationInfo to involve Bot as well
}
Destroy();
} //if not then process ELSE bellow
// w = other.instigator.FindInventoryType(class'MM_GoldnalispiritTool'); #2 WHAT For ??? Already checked..
// if ( w == None ) //pointless
else //Changed condition
{
Explode(HitLocation,Vect(0,0,0));
other.style = other.default.style;
other.ScaleGlow = other.default.Scaleglow;
other.fatness = 128;
if ( PlayerPawn(other) != None && PlayerPawn(other).Weapon != None ) //Added sanity check
PlayerPawn(other).weapon.Style = PlayerPawn(other).Weapon.Default.Style; //Back Style if changed
}
Destroy();
}
}
...
Yes it works. But....
If i added this line
//PlayerPawn(other).weapon.Style = PlayerPawn(other).Weapon.Default.Style;
log comes again
Also coming...
If i added this line
//PlayerPawn(other).weapon.Style = PlayerPawn(other).Weapon.Default.Style;
log comes again
Code: Select all
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile360 (Function MMGame_v1_1.MM_BruteProjectile.Flying.ProcessTouch:003B) Accessed None
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile360 (Function MMGame_v1_1.MM_BruteProjectile.Flying.ProcessTouch:014D) Accessed None
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile364 (Function MMGame_v1_1.MM_BruteProjectile.Flying.ProcessTouch:003B) Accessed None
Code: Select all
ScriptWarning: MeleeAttack MM-Test.MeleeAttack15 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0054) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack15 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:01DA) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack15 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0288) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack19 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0054) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack19 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:01DA) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack19 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0288) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack24 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0054) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack24 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:01DA) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack24 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0288) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack29 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0054) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack29 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:01DA) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack29 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0288) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack44 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0054) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack44 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:01DA) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack44 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0288) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack46 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0054) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack46 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:01DA) Accessed None
ScriptWarning: MeleeAttack MM-Test.MeleeAttack46 (Function MMGame_v1_1.MeleeAttack.Flying.ProcessTouch:0288) Accessed None
Code: Select all
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile224 (Function MMGame_v1_1.MM_BruteProjectile.Flying.BlowUp:0017) Accessed None
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile227 (Function MMGame_v1_1.MM_BruteProjectile.Flying.BlowUp:0017) Accessed None
ScriptWarning: MM_BruteProjectile MM-Test.MM_BruteProjectile228 (Function MMGame_v1_1.MM_BruteProjectile.Flying.BlowUp:0017) Accessed None
-
- Novice
- Posts: 11
- Joined: Sat Feb 27, 2016 6:39 pm
- Status: Offline
MeleeAttack.
I see "instigator" called a lot. YOU must understand that you always need SANITIZER.
+ "Instigator.PlayerReplicationInfo != None" because you call it but you cannot be sure if exist or not. Else
Pawn(Instigator) != None if code does funky things, before that "FindInventoryType" LINE.
Also you look like did not changed that ProcessTouch - post your compiled code.
BruteProjectile.blowup need also Instigator checker
I see "instigator" called a lot. YOU must understand that you always need SANITIZER.
Code: Select all
if (Instigator != None && Instigator.PlayerReplicationInfo != None)
...
Pawn(Instigator) != None if code does funky things, before that "FindInventoryType" LINE.
Also you look like did not changed that ProcessTouch - post your compiled code.
BruteProjectile.blowup need also Instigator checker
Code: Select all
function BlowUp(vector HitLocation)
{
if ( Instigator != None ) //ADDED
HurtRadius(damage, 50 + instigator.skill * 45, 'exploded', MomentumTransfer, HitLocation);
else
HurtRadius(damage, 50 + Level.Game.Difficulty * 45, 'exploded', MomentumTransfer, HitLocation); //ELSE using Level "skill"
MakeNoise(1.0);
PlaySound(ImpactSound);
}