• Please make sure you are familiar with the forum rules. You can find them here: https://forums.tripwireinteractive.com/index.php?threads/forum-rules.2334636/

Level Design How to make a MISSION map (Tutorial)

Fel

Grizzled Veteran
Aug 9, 2009
1,991
472
In Mission Mode
Below is the Tutorial (Updated 5-6-2012)

This KFS Testing Map Uses Alex's Story Mod, You have to download it first, click the below link.

In order to play this map 1st you need to download Alex's Mod, Click Link Here (make sure you del your user.ini file. It has to make a new one with DefUser )

This is alawys updating so make sure you keep with the current code.

Download KFS-Conatinment MAP: Click link here

Open KillingFloor, Open Console, Type In (or copy/paste) ;

open KFS-Containment?Game=KFStoryGame.KFStoryGameinfo

There is a tutorial below that shows how to make some of the features this map uses. Also how to set it up so you can make your 1st story map.

This is a very easy way to make a mission map basically point and click, so check it out.

ScreenShots

2012-05-05_00001.jpg
 
Last edited:
  • Like
Reactions: =[PMC]= breakfast
Using Alex's Story Mod To Make Your Own Mission (Based On KFS-Containment)

Ok so lets get started by mentioning that Alex has a tutorial as well for some of the features. LOCATED HERE It is good to get a couple diffrent views in order to fully understand

NOTE: We want to eleminate the use of scripted tirggers for gameplay usage. However, scripted triggers cant be used for other events, we want to try and stay away from using them to work out a problem. Try to use the KFS stuff 1st before resorting to the use of a scripted trigger.

Setting up the Map


Ok so first things first we need to get the main actors set up.
  • Place a KFLevelRules_Story (Actor>Info>LevelGameRules>KFSPLevelInfo>KFLevelRules_Story)
Lets take a look at this actor (Attachment #1)
Here is where you set up some of the main properties of the map. This includes (top to bottom) starting cash, If players keep their weapons or not when they die, What Actors get reset when the team dies and restarts from the checkpoint, And the order of your objectives.

Most of this is self explanitory, however lets look at CheckPointResetClasses.


This is used to reset numerous objects when the whole team dies. You want to reset set objects in order to have the gameplay reset. A few of the main actors that are needed to reset are;
  • KF_StoryZombieVolume
  • Trigger (for your trigger once only triggers)
You can reset anything on this list, including movers (for doors) and scripted triggers (to reset complex events)
Another Feature noted is the StoryObjectives. This is used to tell the game the order of your objectives. Even though you can trigger objectives out of order, you still need to tell the game what the basic order is going to be. (these coencide with ObjectiveName)

Setting up Objectives

Actor>NavigationPoint>KF_StoryObjective

Ok so objectives are your main controllers of the map. Using Activation Event and Completion Arrays to control multiple events as well as give the players somethign to do. There are several types of Objective however you can also controll the zombies volumes with them (explained below in next section)

One of the main things an Onjective is ment for is controlling several events at once. This eleminates the use of a scripted trigger.


Lets breifly look at Objective_Events, we will go into these more in detail later.
  • Activation events- This array will let you set all the event you want to be triggered when the objective gets activated. This can include spawns... dialogues...doors
  • Completion events- This array will let you set all the events you want to be triggered when the objective is done. This can include turning off the zombie spawns and the above sugestions.
  • Failure events- This array is used for triggering events when they failure objective (Explained Below) is not compleated.
  • Progress events- This array will trigger events when the objective is at a certain % of compleation. You can use this to trigger things like FP's and Scrakes in the middle of the wave instead of everyhtign at once. This also eleminates the use of the Scripted trigger.
Lets take a look in the Objective_HUD group in the objective actor.
  • Show on HUD - This is for showing the objective on the players screen. Maybe some objectives you might want to happen w/o players knowing just to do some map functions.
  • Whisp Trail- This will turn on/off the red trail that will go from the previous objective to the current one.
  • Manual Activate - This is for if you want to trigger the obj or to have it manuall preceede from the previous objective (Proceede to next objective)
  • Objective Hint- This will show players the objective name they have to complete (Ex: Return to trader)
Dont forget to give the objective a name. (this goes with the KF LevelRules_Story)
Objective Types

Touch Objective (attachment 2)- the touch objective is can be used for players to go from one point of the map to the next, just to move the players. The main goal of this trigger is to set off multiple events at once. This eleminates the need for scripted triggers. There are also other features that are added to this obj such as failure events (will be explained later) that can give playerse secondary goals such as "complete an event in a certain amount of time", or "Do this objecitve while staying in a certain area". These will be explained later as well.

Lets take a look at a touch objective in KFS-Containment (Attachment #2)


When players hit the objective it turns on another section of zombie spawns and an Ai for the special event that happens before the pat fight. So here is the Objective explained (top to bottom)
  • Make sure you set the colission so players can set it off =D
  • If you want the obj to automaticaly goto the next objective, then set the Success Action to Proceede to next objective. Also be sure to set your Success Condition to OBJ_Touch
  • Activation events- This array will let you set all the event you want to be triggered when the objective gets activated. This can include spawns... dialogues...doors
  • Completion events- This array will let you set all the events you want to be triggered when the objective is done. This can include turning off the zombie spawns and the above sugestions.
Timed Objective (attachment 3)- This objective will set off a timer, of course, once the timer is done it triggers the Completion Events.

Lets just take a look at one (attachment 3). This objective is triggered once players reach a touch objective. Then once the timer is done, it turns off the zombievolumes(A1SpawnA) turn off and the Dialogue Actor triggers
  • Objective Duration- Set this to however long you want this objective to last for.
  • If you want the obj to automaticaly goto the next objective, then set the Success Action to Proceede to next objective. Also be sure to set your Success Condition to OBJ_Touch
  • The rest are described in touch Objective, they are highlighted becuase they are still equally important
Use Objective (attachment 4) - This objective is as important as the touch objective. Like all other objective types it contains activation and completion evetn arrays so you can trigger multiple events at the same time, thuss eliminating scripted triggers. On top of this, the Use trigger also has another special function. It has a feature where you can make it so the player has to hold down the USE button for a certain ammount on top, on top of having to look at this. It will show a progress % as well to tell you the progress. This can be used for objectives such as hacking. (attachment 4) Lets look at this Objective;
  • HoldUseSeconds- This sets how long the player has to push Use for. If set to 0 then its instant
  • KeepUseProgress- If set to true, when the player lets go of the use key the % will stay current. If false it goes back to 0%
  • MatainUseLOS-if it's true you need to keep looking at the objective while you use it (maintain line of sight) or it will stop the use process
  • MinUseViewAngle- This is the angle leeway that the player has to be looking at the object. .5 is a good radius
Counter Objective (Attachment 5) - This objective is what is says a counter, but it counts more that just numbers. It can count Players (the number of unique players who trigger the objective), Cash (adds up the total cash of all players on the team), or zombie kills. Lets take a look at the zombie kill function.
  • Dont forget, if you want to manually activate the objective, then it needs a tag.
  • CT_Default- this is the default counter type which is zombie kills.
  • NumToCount- The Number it counts to before the objective is complete
  • SuccessCondition- Remember you have to set this to tell what type of objective your using
  • ObjectiveHint- Also remember you have to have this to tell the players what to do
NOTE: On this Objective you have to match the ZombieEvent Name in the KF_StoryZombieVolume (explained below) to the Objective's tag. Thats how you get the counter to count off of zombie kills.

Failure Objectives (attachment 4 post 2)

Upon having normal objective, each objective actor also has the option to add failure objectives. This gives each objective a secondary goal that the player has to reach. You can add secondary goals such as, Time, Defend (based on Actor HP), Stay in area, and Stay near/away from an Actor.

These failure objective are really helpfull to give more options to what palyers have to do. For example, if all you have it a touch objective where players have to reach a certain area, maybe spruse it up a bit by adding a time limit to it.

Under Objective_HUD be sure to type in the Text that will be displayed for the Failure Objective in the ObjectiveFailureHint section.


Lets take a look at the each of the objective's failure types.
  • FailureCondition- This is where you select the Condition type, Set to None if you want no secondary condition.
  • FailureAction- Tells the game what to do if the secondary condition type is not met
There are serveral options for each failure type lets go over each failure condition.

OCT_DefendActor - Defend Actor is set up so you can defend multiple actors at once. Make sure they have the same tag.
  • TargetActors- You can have the players defend things other than AI. Just type the object's name in here
  • TargetActorTags- This is used for defending AI or even Zombies. (Example; defend the crawler) Just put the Actor's tag in here.
  • MaxDeadActorPct- the maximum number of actors in the who can be considered 'dead' before you fail the objective. If you have 2 actors, and a MaxDeadActorPct of 0.5, you will be able to lose one of them and still continue
  • MinHeathPct- The minimum health the target can have before the objective is failed.
OCT_Proximity- Set up so players have to stay a certain distance either near/or away from an object.
  • ProxActor- Type in the object name to define what players have keep a proximity to.
  • ProximityType- You have 2 choices, Stay Close, or Stay Away.
  • MinDistance- The minimum distance players have to stay close, or away from an object. Based in Unreal Units.
  • TimeOutSeconds- The maximum amount of time players can be out of the proximities range.
OCT_StayInArea- This is almost like Proximity, however this used to keep players in a more defined area, such as a volume.
  • AreaVolume- Type in the ObjectName of the volume you want players to keep inside of.
  • RequiresTeam- Determins weither the whople team has to be inside the volume of just 1 player.
  • TimeOutSeconds- The maximum amout of time players can be out of the specified volume.
OCT_TimeLimit- You can set a time ammount that the players have to complete a certain objective.
  • TimeLimitSeconds- Pretty self explanitory, just put in the ammount of time you want players to have to complete the objective in.
These Failure types are really helpfully in adding more options to the objecitves, and gameplay elements, so make sure you play around with them.


Recap

So remember that the objective are your main controllers for zombies spawns (gettign to next), and also your event arrays, so you dont have to sue scripted triggers,


Also remember, these are you main items used in the objectives;
  • If you want the obj to automaticaly goto the next objective, then set the Success Action to Proceede to next objective. Also be sure to set your Success Condition to OBJ_Touch
  • Activation events- This array will let you set all the event you want to be triggered when the objective gets activated. This can include spawns... dialogues...doors
  • Completion events- This array will let you set all the events you want to be triggered when the objective is done. This can include turning off the zombie spawns and the above sugestions.
  • Show on HUD - This is for showing the objective on the players screen. Maybe some objectives you might want to happen w/o players knowing just to do some map functions.
  • Whisp Trail- This will turn on/off the red trail that will go from the previous objective to the current one.
  • Manual Activate - This is for if you want to trigger the obj or to have it manuall preceede from the previous objective (Proceede to next objective)
  • Objective Hint- This will show players the objective name they have to complete (Ex: Return to trader)
  • Dont forget to give the objective a name. (this goes with the KF LevelRules_Story)
 

Attachments

  • Picture 1.jpg
    Picture 1.jpg
    91 KB · Views: 1
  • Picture 2.jpg
    Picture 2.jpg
    98.9 KB · Views: 1
  • Picture 3.jpg
    Picture 3.jpg
    96 KB · Views: 1
  • Picture 4.jpg
    Picture 4.jpg
    96.2 KB · Views: 1
  • Picture 5.jpg
    Picture 5.jpg
    98 KB · Views: 1
Last edited:
  • Like
Reactions: =[PMC]= breakfast
Upvote 0
Zombie Volumes And Their Many Functions

Right Click Volume Button> KF_StoryZombieVolume

Ok so first im going to go over the features of the zombie volume, then I will explain how to use them with Objectives, for example Timed Objectives.

Note: the volume follows all normal zombie volume laws, so it has to have the right size and space to work. The more zombie the bigger the volume needs to be. 256x256x256 min


(Attachment 1)
  • TimerStartsDisabled-IMPORTANT- You want to have this on true, unless you want your spawns to start automatically
  • Tag- This is the tag you call with (90% of the time) the activation/completion event arrays of the objectives. This will turn on and start the volumes function. It will also turn off the volume as well.
  • ZombieEvent- This is the event that will be called when a zombie from the volume dies.
  • ZombieTag- This is the zombies tag, lol, you can use this for kill the zombie or whatever.
  • AllowPlainSightSpawns- Turn this off and it will only spawn if then player is out of sight of the volume.
  • KillZedsonDeActivate- When the volume turns off it will kill everything with the volumes ZombieTag. This includes the zombies in play as well.
  • KillZedsOnReset- This is used for when the whole team dies and map resets from check point (explained below) the zombies will die. You probably want to have this on true unless you are planning somethign crazy.
  • ResetSpawnCountOnTrigger- This is used again on team restart, it will reset the volume's NumTimedSpawns back to its oringial state.
  • MaxSpawnedZeds- The Maximum amount of zombies that will spawn in that volume.
  • NumTimedSpawns- This is how many times the volume will spawn its group of zeds. Set this to 0 and it will go non stop untill it is toggled off again.
  • SpawnInterval- the amount of seconds it takes for the spawn to spit out another group of zombies.
Next group is SpawnTypes. This is used to select how many diffrent zombie types you want and at what probibility.
  • SpawnPriority- this is telling it basically the ratio it has to spawn the zombie type. In the picture they are all even, so that the zombies all come out evenly.
  • ZedClass- Pick a class and it will spawn it ;)
  • ZedSpawnPriorityBase-This determins the % for the ratio on the zombie spawns. Its set at 0% again for even classes, however you can mess with it. EX: .15 or .65
  • ZedSquadSize-This is how many zombies that will spawn in the volume.
Using Zombie Volumes and Objectives to Create the GamePlay (Attachment 2)

Ok so the main goal again is to not use complex scripted triggers to contoll the gameplay, we want to keep it nice and simple. To do so, one way is to use the objectives to controll the zombie volumes. Lets look at the picture (attachment 2)
  • One of your activation events on the objs goes to the zombie volume's Tag
  • One of your completion events on the same objective goes to the same volumes tag
Thats it, very simple. Of course if you wanted to extend the gameplay maybe you would want to trigger the zombie volume off on a later objective all up to you.
Checkpoints and Their Functions (Attachment 3)

Right Click Volume Button> KF_StoryCheckPointVolume

Checkpoints are use to save the players progress throughout the map. To set one of these up it only needs one thing. You have to have player starts inside the volume. The checkpoint volume will only enable the player starts when it gets activated. This is used for when the team dies, and they have to respawn. They will have their position saved.

NOTE: You must have one of the checkpoint have StartEnabled True This is where the team will start the game.


Ok so lets talk about the Events Groups and its functions.
  • ActivationEvents- This is an event array that will call a list of events when the checkpoint is activated. You can also use this to trigger a zombie volume if you wanted to.
  • SecondChanceEvents- These are the events that will be called when the team dies and they respawn at that checkpoint. Use this for restarting the cenematic event, resetting movers...respawning dead ai, and whatnot.
Next up is the StoryCheckPoint array group
  • RequiresWholeTeam- If this is set to true, then the checkpoint wont activate untill everyone in the team is in.
  • RespawnPlayers- If True, when players activate the checkpoint dead players will respawn.
  • ShowActivationMessage- If true then the CheckPointName will be shown
  • StartEnabled- If true the team will start the game here.
  • TeleportStragglers- Teleports the teammembers who are outside the checkpoint into the checkpoint.
  • CheckPointName- This name will be displayed when players actiavte the check point ONLY if showActivationMessage is true.
  • CheckPointTriggerType- Set this to Touch if you want it automatic, or Triggered to have it so an event has to call it.
The Team Restart array group is used for when the team dies and they are respawned at that checkpoint.
  • CheckPointResetActors- these are actors that you want to reset specificly for that area in the map. EX: you want a door to reset. so add mover to the list.
  • ResetExcludeActors- same thing but opposite. Any actor you dont want reseting for that checkpoint you add here.
  • RestartFromCheckPoint- Enter the name of another checkpoint, if you want the team to start there instead.
  • RestartFromObjective- THIS IS IMPORTANT- Put the objective NAME (not tag) in here that you want the team to restart from for that check point. The only time you need to enter a RestartFromObjective manually is if you want to intentionally jump the player to a specific objective.
Remember checkpoint can be used in many ways and with their event arrays you can controll tons of stuff with them.
 

Attachments

  • Picture 1B.jpg
    Picture 1B.jpg
    98.5 KB · Views: 0
  • Picture 2B.jpg
    Picture 2B.jpg
    97.3 KB · Views: 0
  • Picture 3B.jpg
    Picture 3B.jpg
    98.8 KB · Views: 0
Last edited:
  • Like
Reactions: =[PMC]= breakfast
Upvote 0
Other Features Availiable

Amoung all the gameplay features KFS has, there are also other empliments that has been added.

Shop Volume (Attachment 1)

Right Click Volume Button> KFShopVolume_Story


The shop volume is designed to specifiy what weapons you want sold AT EACH VOLUME. So for one volume you can have 4 weapons that players can buy, then on another one they can buy 15. Each volume is specific.
  • ShowPerkHeader- This will let you choose if they see the change perk button or not
  • SaleItems- Here is an array where you choose the weapons the volume can sell. Make sure the weapons are pickups. You can add any item you want in there even the IJC weapons.
  • ShopName- Displays the name of the shop in the shop menu.
  • WelcomeText- Displays a message in the shop menu as well
Dialogue Actor (Attachment 2)

Actor>Triggers>KF_DialogueSpot


This is one of my favorite features of KFS. This actor displays a dialogue text on call, but on top of that it will trigger an event on activation AND play a voiceover/ sound call. Heres how it works;
  • Tag- Of course this is the name you are goign to use to trigger the dialogue.
  • CanSkipDlg-This feature is used if you want players to be able yo just skip the text.
  • OnlyShowtoInstigator-This will only show to the player who triggered it if TouchTriggered is True
  • Randomize- Plays the text out of order
Dialogue's array group
There is where all the text goes for what you want players or ai to say. You can also have a voice over, or even specifiy a certain object to play a sound (so you can localize the sound)


You can have the dialogue actor have just 1 array so it plays one text, or if you set them up with several arrays, they will go in order, or if triggered using RequiredEvent.
  • DisplayedEvent- This is the event that triggers when the dialogues array # is active
  • Duration- This is how long the text will be displayed for. If set to 0 it will be displayed based of an equation for how long the text is.
  • Message- Duh
  • RequiredEvent- if you have an event name in here, the array will only trigger if the event is called from an outside source.
  • Speaker- Displays the name of the person talkign in the text box.
Next up is the Voice Over section. Here is where you set the soudn properties for each text array.
  • SourceActor- If left blank, default is Local. However, type the name of the object you want the sound to be commign from. Make sure you set the sound info in that objects properties. Every actor has a sound propertie so you can choose anything.
  • VoiceOverSound- The sound that will be played when the text array is active.
Dialogues are usefull for keeping players aware of whats happeing in the story, and also these can be used for event and zombie spawn controll as well. Its all up to you.

Any more options that Alex adds i add in this list as well. Hope all this helps.
 

Attachments

  • Picture 1C.jpg
    Picture 1C.jpg
    100.7 KB · Views: 0
  • Picture 2C.jpg
    Picture 2C.jpg
    99.2 KB · Views: 0
Last edited:
Upvote 0
That's a great tutorial you've made there.

I'm sure I'll use it alot when I make a mission version of one of my maps.

Keep up the good work and hopefully more tutorials :D
Thank you. Probably not any tutorials from me for awhile. I made this in hopes that mappers will take this information and create their own Mission maps. It would be great, if we got enough maps, it would be a new popular game type for KF.

Let me know if its confusing. I made the example map right along with the tutorial, so make sure you take a look at that too. Its a working/ playable mission example map. Just 1 wave, then you kill the pat at wave 2
 
Last edited:
Upvote 0
Just so you don't feel you wrote this all out for nothing (good work, looks like you put a good days effort just into the guide alone)... I must say I assumed story maps were too much trouble, I read through your guide now and I'm thinking I might give it a try. Already have a start on a really big map which may be a perfect candidate. Whether or not I'll have the time to see such a project through is the real question, though.
 
Upvote 0
to trigger the end game from a pat death w/o it being (wave 5, 8, 11) you have to make a new zombie class. This is explaind at the last part of this tutorial.

There are 2 ways to end the game. TW says the event called to end the game is called
Event: EndGame
However i havent been able to get this to work.

So for your custom zombies boss, under the event, make it like... Event: KillPat

Then have a scripted trigger waiting for the event. Have it trigger a message like "You won!" wait 7 secs, "Level will change shortly" Then have it wait for 2 min, then have it change lvl to w/e you want. I use Biotics lab, since most servers have that map.


To take a look at this, Open up candlesmoke and look at the bottom most trigger (I saved the view over the triggers) Thats the end game trigger.

Make sure you read the last part of the tutorial, it explains how to make a custom zombie boss (Pat) then how to trigger events off of its death.

Click the blue arrow, right after it says, Originally posted by Fel
It will bring you to the part of the tutorial

Here is the Trigger from the custom ZombieBoss (Pat) in candlesmoke
Crap1.jpg



 
Last edited:
Upvote 0
I'm having a problem with doors, being that I cannot seem to trigger them under cetain conditions.

The main time this seems to happen is, if you open a door to say keyframe1, then some time later the wave ends and there is a trading period, then during or even well after the trading period you want to trigger that door event again (close the door), nothing happens. I've tried triggering it multiple times to no avail. This happens to every door that I try to close after trading and even half way through a wave after trading. So its not a matter of "check the spelling on your TriggerEvent action".

Its worth mentioning that I don't have regular KFUseTriggers on these doors, because I don't want the player to have any control over them.

I think the shopevent does something to screw up doors (recall that destroyed doors get replaced), I'm hoping for a solution along the lines of a property to change so that the doors don't get messed with, or some kind of process to make them work again after shopevent.
 
Last edited:
Upvote 0
The doors seem to work well if you just go to the key frames again, set them as you want them, 0 closed and 1 open, and leave it on the open frame.

Somehow it seems to make a difference which frame you leave it on when you build and save the level.

If this doesnt work, leave it on the closed frame.

It seems to be fussy about how you do this.
 
Upvote 0
Hes talking about using scripted triggers to open doors. You know what, I had the same problem with the church door in damnation. Only thing i did to get around it was

1> save the door as mesh

2> Create a door mover using your newly created mesh

3> set up triggers to open

4> Set the # of keys on the door to 1

I think that will fix it. but then again, I have like 6-8 different doors i was trying to use to manually open the church door, with a triggered emitter of smoke. So that the door acts like it is blowing up
They would all close, but not open lol
 
Upvote 0
I've fixed my problems good enough for its purpose, but it is odd. I have trouble figuring out exactly what the deal is, but it seems a little like this:

-On wave2, no opened doors can be closed again in wave 2, 3 or 5
-In wave4, I can set up one motha script to close all the doors from wave2
-Generally speaking a door triggered in one wave cannot be triggered in the next. Mostly a problem for blocking off the last part of a wave when the next wave starts. but got around it by using some additional movers
 
Upvote 0
Hes talking about using scripted triggers to open doors. You know what, I had the same problem with the church door in damnation. Only thing i did to get around it was

1> save the door as mesh

2> Create a door mover using your newly created mesh

3> set up triggers to open

4> Set the # of keys on the door to 1

I think that will fix it. but then again, I have like 6-8 different doors i was trying to use to manually open the church door, with a triggered emitter of smoke. So that the door acts like it is blowing up
They would all close, but not open lol

Did you change the Intialstate to "Triggertoggle" ?
 
Upvote 0
Okay man and what about triggeredplayerstart ?
can we use them instead your "Moving the Player starts"
You use Triggered Player starts to move the player starts around.....

Come on now, read. :rolleyes:

... This is because we are not going to be using regular player starts, but Triggered player starts.

Open the ActorClassBrowser>NavagationPoint>SmallNavigationPoint>PlayerStart>TriggeredPlayerStart

Place 6 of these at the Beg of the map. Select all and Open the Properties (F4)

...

 
Last edited:
Upvote 0