Changelog?
Version 1.1 released.
Just got some tiny questions, if it's alright?
1) How much health does it have, and does its health scale with number of players?
2) I guess it does but gotta ask: Does removing its head disable its special ability (teleportation), just like all decapping all other specimen also disables their special abilities?
3) Once again, I guess it is, but need to ask anyway: Is its teleportation-range limited?
4) Can it teleport vertically (or is it only "straight forward")?
5) You think TWI will add this to retail today or tomorrow?
Just got some tiny questions, if it's alright?
1) How much health does it have, and does its health scale with number of players?
2) I guess it does but gotta ask: Does removing its head disable its special ability (teleportation), just like all decapping all other specimen also disables their special abilities?
3) Once again, I guess it is, but need to ask anyway: Is its teleportation-range limited?
4) Can it teleport vertically (or is it only "straight forward")?
5) How often can it teleport / when does it teleport?
6) You think TWI will add this to retail today or tomorrow?
You know, Jack said it reminded him of the "Stasis Module Enemies" from Dead Space 1. I think they look like a mix actually, of those mentioned stasis-enemies combined with Dead Space 2's enemies "The Pack", the weird children with long nails that comes in ... well, a pack
how do i figure out which version i have?
whats the best way to replace the old files on the server?
stop server, delete files, upload to server, upload to redirect, start server?
or just upload to server/redirect (overwrite) without stop? or stop, overwrite all, start?
edit-
do the killingfloor.ini serverpackages stay the same? or do i change it to shiver11?
1) It has 650 base health, which is in contrast to the clot's 130 base health, and the siren's 300 base health. However, the fact that damaging slows it down (no matter what you hit it with) means that in a team environment it can be pretty easy to take down, or at least defend against. Its health scales in the same way as the clot, and the head health is also currently the same. It might just be a little bit strong right now, but for testing I think it's better that way.
2) Yes. When the head is removed it can't target enemies, meaning it can't teleport or start charging. Something I haven't mentioned is that it has a system whereby it'll only teleport/charge at you if you've been in its line of sight for at least 3 seconds, so if you see one you have time to hide behind something.
3) Yes. The maximum teleport range is 2000 units, and the minimum is 550. Anything below that and it'll simply charge instead.
4) Yes! As long as you're in its line of sight. Even if you're using an exploit it should be able to teleport to you.
5) When it has targeted you (which as said can take about 3 seconds of looking at you) it will teleport immediately. It has a cooldown period of about 7.5 seconds right now.
6) I'd like to think they'd add this as retail at some point, it certainly fills a niche. Try playing a game with this thing and you'll see that it really makes a difference. If I changed its teleporting to figure out a destination in front of where the player is kiting to it'd be a very good anti-berserker specimen. As it is it's already pretty effective against the berserker since you can't really outrun it (at least, you can't gain any decent distance).
So, if I simply add MutAddShivers.MutAddShivers to my mutator line, will Shiver appear in Sandbox Mode? Or I have to specify him in MonsterSquads like I did with Brute? If so, I just need to know, how many sould I add for each wave, so that it won't result in unbalanced gameplay.
Ok then) Well, when I tried to put Brute into the Sandbox, Webley gave me this well-balanced specification:
Squad #24 Husk, Brute
Squad #25 Clot, Clot, GoreFast, Husk, Brute, Brute
Squad #26 Husk, Husk, Brute,
Could you provide me with similiar stuff on Shiver, so that I won't ruin the balance?
// Teleporting
var byte FadeStage; // int can be replaced with byte for smaller replication.
var byte OldFadeStage;
...
replication
{
reliable if( Role==ROLE_Authority )
FadeStage;
}
simulated function PostBeginPlay()
{
Super.PostBeginPlay();
if( Level.NetMode!=NM_DedicatedServer )
{
MatAlphaSkin = ColorModifier(Level.ObjectPool.AllocateObject(class'ColorModifier'));
MatAlphaSkin.Color = class'Canvas'.static.MakeColor(255, 255, 255, 255);
MatAlphaSkin.RenderTwoSided = false;
MatAlphaSkin.AlphaBlend = true;
MatAlphaSkin.Material = Skins[0];
Skins[0] = MatAlphaSkin;
}
}
simulated function ZombieCrispUp()
{
Super.ZombieCrispUp();
if( Level.NetMode!=NM_DedicatedServer )
{
MatAlphaSkin.Material = Skins[0];
Skins[0] = MatAlphaSkin;
}
}
simulated function Tick(float delta)
{
local float Alpha;
Super.Tick(delta);
if (Health > 0)
{
if( Level.NetMode!=NM_DedicatedServer )
{
// Handle head twitch
if (NextHeadTime < Level.TimeSeconds)
{
CurHeadRot = NextHeadRot;
NextHeadRot.Pitch = Rand(MaxTilt) - (MaxTilt * 0.5);
NextHeadRot.Roll = Rand(MaxTurn) - (MaxTurn * 0.5);
NextHeadTime = Level.TimeSeconds + MaxHeadTime;
}
Alpha = 1.0 - ((NextHeadTime - Level.TimeSeconds) / MaxHeadTime);
SetBoneRotation('CHR_Head', CurHeadRot + (NextHeadRot - CurHeadRot) * Alpha);
// Pick movement animation according to speed
if (VSizeSquared(Velocity) > 16900) // 130^2 = 16900
MovementAnims[0] = RunAnim;
else
MovementAnims[0] = WalkAnim;
}
// Handle targetting
if( !bDecapitated && Level.NetMode!=NM_Client )
{
if (Controller == none || Controller.Target == none || !Controller.LineOfSightTo(Controller.Target))
{
if (bCanSeeTarget)
bCanSeeTarget = false;
}
else
{
if (!bCanSeeTarget)
{
bCanSeeTarget = true;
SeeTargetTime = Level.TimeSeconds;
}
else if (Level.TimeSeconds > SeeTargetTime + PeriodSeeTarget)
{
if (VSize(Controller.Target.Location - Location) < MaxTeleportDist)
{
if (VSize(Controller.Target.Location - Location) > MinTeleportDist || !Controller.ActorReachable(Controller.Target))
{
if (CanTeleport())
StartTelePort();
}
else
{
if (CanRun())
GotoState('Running');
}
}
}
}
}
}
// Handle teleport fading
if (FadeStage == 1) // Fade out (pre-teleport)
{
if( OldFadeStage!=FadeStage )
{
OldFadeStage = FadeStage;
AlphaFader = 255;
}
AlphaFader = FMax(AlphaFader - Delta * 512, 0);
if( Level.NetMode!=NM_DedicatedServer )
MatAlphaSkin.Color.A = AlphaFader;
if ( Level.NetMode!=NM_Client && AlphaFader==0 )
{
SetCollision(true, true);
FlashTeleport();
SetCollision(false, false);
FadeStage = 2;
}
}
else if (FadeStage == 2) // Fade in (post-teleport)
{
if( OldFadeStage!=FadeStage )
{
OldFadeStage = FadeStage;
AlphaFader = 0;
}
AlphaFader = FMin(AlphaFader + Delta * 512, 255);
if( Level.NetMode!=NM_DedicatedServer )
MatAlphaSkin.Color.A = AlphaFader;
if ( Level.NetMode!=NM_Client && AlphaFader==255 )
{
FadeStage = 0;
SetCollision(true, true);
GotoState('Running');
}
}
else if( OldFadeStage!=FadeStage )
{
OldFadeStage = FadeStage;
if( Level.NetMode!=NM_DedicatedServer )
MatAlphaSkin.Color.A = 255;
}
}