Help:Creating a mission map

From Killing Floor Wiki
Jump to: navigation, search

This tutorial will take you step by step and show you how to make a Perkable, Wave based Mission map. So lets get started shall we?

Download the Example Map Used in this Tutorial here[1]


Setting the map up[edit]

Ok, so 1st off we are going to have to set up the map so that it can run how we want it.

Create a ShopVolume somewhere outside the map. Make the event name SHOPEVENT.

__ Events

We are going to use this ShopVolume to control almost everything in the map.


Also you need to make another room located outside the map, inside this room put in a ZombieZoneVolume and a KFSPZombieKillVolume underneath. The reason why we do this is because when you spawn zombies into the map, it will raise the Zombie count. So once the zombies are all dead, we are left with the "normal" zombies to kill. With this, the normal zombies die off, and we are left with only the Triggered zombies to kill. So your gonna want to make it look something like this:


Now we must create some triggers so we can open the doors that we need to in the proper order. Create off the map a scripted trigger.


  • Open up the Scripted Trigger properties (F4).

You will see a tab that says AIScript. Expand that tab. On the right side it will say Empty/ Add. Click add 5 times to create 5 slots and you will see Action 0-4. On action 0, click the pull down tab and look for Action_WaitForEvent Click New and enter SHOPEVENT under ExternalEvent.

This trigger is gonna be controlled by the TraderVolume, The trader will activate this trigger 2 times. Once all the zombies are dead, and when the trader period ends. Enter the rest as follows:

  • Action 1 : Action_TriggerEvent Event: BeforeWaveCounter
  • Action 2 : Action_WaitForEvent Event: SHOPEVENT (trader period ends)
  • Action 3 : Action_TriggerEvent Event: AfterWaveCounter
  • Action 4: Action_GotoAction Action #: 0

It should now look like this:


BeforeWave will happen when the enemies die. It will then wait for the SHOPEVENT again, then Trigger the AfterWave event. Both of these events are used to control the doors.

Place two doors in the map. One with the tag: Wave1Door1, and the other Wave1DoorB, then create 2 Counters.


Open up the properties. For the Door you want to open after the wave, set it up like this: BeforeWaveCounter Event Name: Wave1DoorA

__ Events

And for the other door...

__ Events


Now when the wave ends the door should open, and when the trader period ends, then next door will open. To make it so you can have more doors for more waves. Copy and paste the counter. Then Set NumToCount to 2, and Event to: Wave2Door Same with Wave2DoorB

Ok, lets move onto Spawning zombies:

Creating the Zombie Spawns[edit]

In order to accomplish this task, we need 2 things. Place a regular trigger in the area you want to trigger the 1st set of spawns.


Set it up like this:

__ Events
__ Collision
__ Trigger

Now we must create some spawns. Create a ScriptedTrigger in the location you want the zombies to spawn from. Open the AIscript and add 3 slots.

  • Action 0: Action_WaitForEvent Event: Wave1SpawnA (Don't worry about this new event name, ill explain later)
  • Action 1: Action_SpawnActorClass Now there are a few properties in here. Actor Class: SCroll all the way to the bottom until you see KFChar.ZombieClotAnd because this is wave 1, set the actor tag to...Wave1
  • Action 2: Action_GotoAction Action # 0 (This tells the trigger to go back to action 0 and wait for the event again.)

Once you have this made, copy about 6-10 of them and place them around in the spawn locations for that area. You can change the Zombie Class type to w/e you want. Here I have 3 Clots and 2 Gorefests, and 3 Crawlers and 2 Stalkers:


Now that we have the spawn trigger made, we now need to make a trigger that activates it.

Create another scripted trigger and place it near the rest of the ones that are outside the map. Make like 10 or so open slots (however long you want this wave area to be)

  • Action 0: Action_WaitForEvent Event: Wave1SpawnZombiesA
  • Action 1 : Action_TriggerEvent Event: Wave1OutsideZombies ( I will explain this later)
  • Action 2 : Action_WaitForTimer Pause Time: Whatever
  • Action 3 : Action_TriggerEvent Event: Wave1SpawnA
  • Action 4 : Action_WaitForTimer Pause Time: Whatever
  • Action 5 : Action_TriggerEvent Event: Wave1SpawnA
  • Final Action: Action_GotoAction Action #: 0

The goal to spawning zombies is not to have too many zombies, or too few at once. Since we are going to be spawning about 10 zombies at a time, we want 20 or so zombies for the player to kill at all times. So, we must have a short wait 1st so we can spawn 20 or so zombies, then have it wait long enough for the player to kill them. This all depends on what the area is and how close the zombie spawns are. So Messing with the wait timers is good to get it just right.

Here is an example:


Ok, let's move onto the next part. So, we know what happens when all the zombies die. The wave ends. But what if we don't want the wave to end just yet? well there is a way around it.

Make a room outside the map near the wave 1 area. Add a ScriptedTrigger like the one you did before with a monster spawn. Set Action 0 to Action_WaitForEvent Event:Wave1OutsideSpawn. Under the Tag for the monster spawn (inside the AIScript), type Wave1Outside. Now copy and paste that scripted trigger in that room about 9 times. This way when the zombies all die, there will still be 10 left, until we decide to kill them. Thus ending the wave.


When the player triggers the wave 1A trigger, 10 zombies will be kept outside the map until the last area. So when all the enemies you can kill are dead, there's still 10 left in that room, holding a change of wave.

Let's continue the Spawns. Create another trigger for the next area you want the zombies to spawn from. Be sure to set the event name to Wave1SpawnZombiesB. Do the same thing that you did for wave 1. Make a few scripted trigger for the zombies in the spawn location, but this time do this:

  • Action 0: Action_WaitForEvent Event: Wave1SpawnB

We are going to need a trigger to control these spawns now. Create a ScriptedTrigger. Try and keep this organized. Once you get a huge map, theres gonna be way too many triggers to keep track of.

Set it up like this:

  • Action 0: Action_WaitForEvent Event: Wave1SpawnZombiesB
  • Action 1 : Action_TriggerEvent Event: Wave1OutsideZombies (Not shown in the picture, Ill retake it in a bit)
  • Action 2 : Action_WaitForTimer Pause Time: Whatever
  • Action 3 : Action_TriggerEvent Event: Wave1SpawnA
  • Action 4 : Action_WaitForTimer Pause Time: Whatever
  • Action 5 : Action_TriggerEvent Event: Wave1SpawnA
  • 2nd to last Action: Action_DestroyActor ActorTag: wave1Outside (guess what this does)
  • Final Action: Action_GotoAction Action #: 0


Sometimes if it's a long wave area I will put in a "wait timer" after the destroy actor with a pause time of about 60. Then add another DestroyActor with the tag wave1. This way any zombies that are far behind will die at the end of the wave. A kind of a fail safe. Here's is whats gonna happen: The player is going to trigger the wave1A trigger. this will put 10 zombies into the outside of the lvl. Once the player kills all the zombies, there is 10 still left. so the player could bacisly just stand there and the wave would never end. Then the player will go activate the Wave1B trigger, this will pump out zombies in the next area. Once all of them are activated, the trigger kill the zombies outside the map, leaving only the zombies inside. Once they all die. SHOPEVENT is activated and Wave1Door Opens. Then the player go through and finds weps for 60 secs. Then SHOPEVENT is triggered again, and Wave1DoorB Opens, Leading into the next area.

All you have to do to make more areas is Copy the triggers, and change all the 1's to 2's Since that is all in the wave 2 area now.

I hope that explains spawning the zombies. Now im going to move onto the next part.

Moving the PlayerStarts[edit]

Moving the player starts is an easy concept. We are not going to be using regular player starts, but TriggeredPlayerStarts.


Place six of these at the start of the map.

Select all and open the Properties. Go into the PlayerStart tab, and make sure they're all set to:

__ Events
__ PlayerStart

Near the end of the current wave area, place another six TriggeredPlayerStarts. Set these up like this:

__ Events
__ PlayerStart

Now place two regular triggers in the map. One in the middle of the wave 1 area, and the 2nd near the End of wave 1 area. Set both of them to bTriggerOnceOnly to True under the Trigger tab. Set the first one to:

__ Events
__ Trigger

And the second to:

__ Events
__ Trigger

There you go. When the wave is completed players will start near the wave 1 trader area.

Here is an Example:


Ending the Game With a Patriarch[edit]

Now I don't feel like making a ton of wave areas, so we are gonna put the boss at the beg of wave 2

Ok, so first we are gonna have to create a new zombie type.

Open the ActorClassBrowser>Pawn>UnrealPawn>XPawn>Monster>Sk aarj>ZombieBossBase>ZombieBoss

DONT add the ZombieBoss

Right click ZombieBoss then select New.

Here a window will pop up. Of course the Package is MyLevel, and leave the name the same. Click Ok

This will take you to the script compiler. This may be intimidating, but don't worry about it. Before you close this window, click on Compile Changed Scripts. Ok now you can close the window.

Ok Open your ActorClassBrowser again.

ActorClassBrowser>Pawn>UnrealPawn>XPawn>Monster>Sk aarj>ZombieBossBase>ZombieBoss>MyZombieBoss

Don't add it yet.

Right click MyZombieBoss and select Default Properties.

Recognize this window?

Ok under Event: PatDied.

We are almost done.

Now, we can do this 2 ways, You can create the Pat boss (MyZombieBoss) by right clicking and placing him in the lvl, or we can do it my way. Spawn him with a trigger.

So set up the trigger, and under Actor Class, choose MyZombieBoss.

Now all we need is scripted trigger that waits to end the game.

  • Action 0 : Action_WaitForEvent Event: PatDied
  • Action 1 : Action_WaitForTimer Pause Time: 3
  • Action 2: Action_ChangeLevel URL: BioticsLab.Rom (that's what i use) BShowLoad True

That should do it.

Now TW said that if you call even EndGame, that wold work too, but I've never gotten that to work, so I do it this way for now.

Now that you have a working map, you should go test it out. Make Fp's spawn on wave 1, or whatever you want.

Here is the end Trigger for CandleSmoke:



Its alot better when you can choose what zombies you want to spawn, where, and when. Means that the map is complealty custom, EXACTALLY how you want it.

I hope all this help. Don't forget to download the Example map, and also to read the Tips and Tricks

Tips and Tricks[edit]

Sometimes people will stand around at the beg of the game, doing this will make the zombie count decrease (the zombie volume over the kill volume) and the wave will end early.

What I like to do is put a trigger right infront of the playerstarts, then have it wait 15secs, then trigger Wave1outside. This way, all they have to do is move an inch, and the outside zombies will spawn, holding the wave

To prevent people from going back and collecting more ammo, set the respawn time of the ammo to 30 secs. Then tag all the ammo in the area EX: Wave1Ammo.

Then using a counter triggered by the before wave, have that tragger a scripted trigger. Then on the scripted trigger, just have it DestroyActor Tag: Wave1Ammo

Close doors behind the players about halfway though the map, so they cant go back and just hold the wave 1 area, when they are supposed to be in wave 5

You can control the outside spawns using the Afterwave counters as well. Just have each of the counters, activated the specific wave's scripted trigger, to place the outside spawns.


Counter: Tag: Afterwave Event: Wave2OS Num to Count: 2

Scripted Trigger: WaitForEvent: Wave2OS TriggerEvent: Wave2OutsideSpawn

This wont work for wave 1 since the shop volume isn't activated until the end of wave 1 for the 1st time.

When placing the player start movers, set the triggers somewhere in that wave area. Not the traders area. Because if someone dies, and the playerstarts were triggered during the trader period, the player will spawn in the next area.

Keep your triggers organized. Like i said before, once the map gets big, there will be a ton of triggers to keep track of, it is a lot easier to know what is what if its all organized.

Example of CandleSmoke: