57 lines
1.6 KiB
Ucode
57 lines
1.6 KiB
Ucode
class MeanZombieCrawler extends NiceZombieCrawler;
|
|
#exec OBJ LOAD FILE=MeanZedSkins.utx
|
|
simulated function PostBeginPlay() {
|
|
super.PostBeginPlay();
|
|
PounceSpeed = Rand(221)+330;
|
|
MeleeRange = Rand(41)+50;
|
|
}
|
|
/**
|
|
* Copied from ZombieCrawler.Bump() but changed damage type
|
|
* to be the new poison damage type
|
|
*/
|
|
event Bump(actor Other) {
|
|
if(bPouncing && KFHumanPawn(Other) != none)
|
|
Poison(KFHumanPawn(Other));
|
|
super.Bump(Other);
|
|
}
|
|
function bool MeleeDamageTarget(int hitdamage, vector pushdir) {
|
|
local bool result;
|
|
result= super.MeleeDamageTarget(hitdamage, pushdir);
|
|
if(result && KFHumanPawn(Controller.Target) != none)
|
|
Poison(KFHumanPawn(Controller.Target));
|
|
return result;
|
|
}
|
|
|
|
function Poison(KFHumanPawn poisonedPawn)
|
|
{
|
|
local Inventory I;
|
|
local bool bFoundPoison;
|
|
|
|
if (poisonedPawn.Inventory != none)
|
|
{
|
|
for (I = poisonedPawn.Inventory; I != none; I = I.Inventory)
|
|
{
|
|
// why we double check Inv != none here???
|
|
if (I != none && MeanPoisonInventory(I) != none)
|
|
{
|
|
bFoundPoison = true;
|
|
MeanPoisonInventory(I).poisonStartTime = Level.TimeSeconds;
|
|
}
|
|
}
|
|
}
|
|
if (!bFoundPoison)
|
|
{
|
|
I = Controller.Spawn(class<Inventory>(DynamicLoadObject(string(class'MeanPoisonInventory'), class'Class')));
|
|
MeanPoisonInventory(I).poisonStartTime = Level.TimeSeconds;
|
|
I.GiveTo(poisonedPawn);
|
|
}
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
GroundSpeed=190.000000
|
|
WaterSpeed=175.000000
|
|
MenuName="Mean Crawler"
|
|
Skins(0)=Combiner'MeanZedSkins.crawler_cmb'
|
|
}
|