Getting Started with Mapping (Killing Floor 2)

From Killing Floor 2 Wiki
Jump to navigation Jump to search

Introduction

This page includes a comprehensive guide on getting started with the Killing Floor 2 SDK for creating Maps and uploading them to the Steam Workshop. This page will only cover the essentials, further elaboration will need to be done at your own discretion; it is recommended that any new Level Designer should begin by looking at Official Maps and seeing how they approach particular scenarios.

Installation and First Launch

Installation

To install the SDK:

  1. Open up Steam, hover over 'Library' and select the 'Tools' option.
  2. From here locate 'Killing Floor 2 - SDK' and install it as you would any game on Steam
  3. Once the download is complete, launch it as you would any other game.
!--T:1--> Note Note: If an opt-in Beta/preview is happening at the time, both the game and the SDK need to be on the same branch. Otherwise the SDK will crash on launch.
i.e. If you are in the opt-in Beta for an update, the SDK also needs to be on the opt-in Beta.

Interface Guide

!--T:1--> Important Important: The SDK Interface is very laggy on launch - using up a lot of resources on your computer. To prevent the UI lag, simply create an empty save file or open up an existing map
e.g. KF-TempMapName

First Launch and Glance

On first launch you may be prompted with a couple of dialogs. They are things that don't affect the editor or its performance so you can ignore and click past them. See Figures 1.1.

Past all the error dialogs your Editor should look something like Figure 1.2 below.

Figure 1.2: Default State of the Editor


!--T:1--> Note Note: For new users, I highly recommend reading the Startup Tips and not disabling the prompt, they often contain useful tips on how to use different aspects of the SDK.

Figure 1.1a: Checking will always result in error, so just ignore and wait a week
Figure 1.1b: Can safely ignore, you can put "-NoGADWarning" as the warning suggests into the Steam launch options for the SDK to suppress the warning
Figure 1.1c: Common error in the SDK, can safely ignore

SDK and Viewport Overview

Below is a breakdown of the core elements that you will be using in the SDK

Figure 1.3: Interface Overview

There are 2 crossed out buttons on the side menu:

  1. The Terrain Tool - Obsolete, use the Landscape tool instead.
  2. Foliage Paint Tool - Not supported, will crash the Editor when you build Lighting.

Content Browser Overview

The Content Browser is large enough to break it down in its own image. The Content Browser is where you will be grabbing all Assets (Actors, Meshes, Materials, Sounds, Decals, etc). It also serves as a tool for managing and organising your map's own individual assets, and also organising assets into Layers.

Common Hotkeys

Hotkey Function Hotkey Function
Left Click Select actor Spacebar Toggle between Movement/Rotation/Scaling
Right Click Open Context Menu ~ Toggle between World and Local space transforms
Ctrl + Left Click Multiple select N Toggle Pathnodes
Right Click + Scroll Wheel Change movement speed around viewport P Toggle Paths
Alt+Drag with Widget Duplicate and move with widget T Toggle Lanscape/Terrain
Ctrl+Z Undo O Toggle Volumes
Ctrl+Y Redo B Toggle Builder Brush
H Hide selected actors Alt+C Toggle Collision Wireframes
Shift + H Hide all but selected actors ] Increase grid snap size
Ctrl + H Unhide all actors [ Descrease grid snap size
G Toggle Game View mode in viewport Ctrl + number Set a bookmark
F4 Open actor properties number Snap to bookmark

There are a lot more hotkeys for the editor, these are the main ones people usually have issue with when first starting out. You can check for others here: https://sites.google.com/site/lessonsdarrenmckinsey/udk-hotkeys

Additional Preferences

These are some additional options you may or may not want to use based on your personal preferences:

  • Preferences > Flight Camera Controls
    • Default is 'Use WASD for Camera Controls' - Standard FPS controls
    • 'Never use WASD for Camera Controls' - KF1 Editor Controls
  • Preferences > Highlight Objects Under Mouse Cursor
  • Preferences > Editor Language
  • View > Change Autosave Options > Autosave Interval

Your First Map

Naming

Your first map can be named anything however a Killing Floor 2 map MUST be prefixed with 'KF-'. If it isn't, it cannot be played or recognized within the game.

Your map file name should also match your map's name.

If your map name has spaces, it is common naming convention to use UpperCamelCase. Avoid using underscores or dashes to represent spaces.You should also avoid publishing a map with numbers or 'versions' at the end, this can be a pain for server owners if they want to host your map on their server.

Map Name Good File Name Bad File Names
Burning Paris KF-BurningParis.kfm KF-Burning_Paris.kfm

KF-Burning-Paris.kfm

KF-Paris.kfm

Zed's Diner KF-ZedsDiner.kfm KF-Zeds_Diner.kfm

KF-Zeds-Diner.kfm

KF-ZesDinner.kfm

KF-ZedsDinerTestingV3.kfm


File Save Location

You can save and load your map from any location. However the best recommended location is:

C:\Users\UserName\Documents\My Games\KillingFloor2\KFGame\Unpublished\BrewedPC

The main reason is, when you plan to upload your map to the workshop, the Workshop Front-End will look specifically in only this location for files to upload. Additionally if you plan to cook your map, it needs to be in this location for it to successfully cook.

I would avoid placing your working map file under the steam game directory as well (C:\Program Files (x86)\Steam\steamapps\common\killingfloor2\KFGame\BrewedPC\Maps). This directory may confuse your editor if you plan to import, move, rename or edit assets within your map's own directory.

World Settings

World Settings can set important information for your map such as: Map Name, Map Author, Spawning Modifiers, Objectives and Collectibles, What game mode is played in the Editor, what in-game music the game uses and Optimization options.

To access it go to: View > World Properties.

For the moment, just leave most of the variables default, but you can:

  • Input your map name and your user name in the appropriate areas under the 'World Info' section.
  • Change the 'Default Game Type' and 'Game Type for PIE' to "KFGameInfo_Survival" under the 'Game Type' section.


Further information on World Info can be found here: Setting Up World Info (Killing Floor 2)

Important Tip Before Moving Forward

The SDK is stable for the most part, but it is not uncommon to encounter crashes at any point in its usage. In fact its something you need to be prepared for and goes without saying that:

!--T:1--> Important Important: YOU SHOULD SAVE AS FREQUENTLY AS POSSIBLE

While the auto-save function is useful for beginners, most users that become familiar opt to turn it off as it can interrupt workflow, bloat your game directory and also on large maps, take a long time to save.

Here are some recommended times to save:

  • After any minor, moderate to large changes done in any aspect to your map
  • Every 10 minutes
  • If you plan to step away from the computer for a bit (e.g. going to the toilet)
  • Before every Build (Lighting, Pathing, etc.)
  • Planning to use or work with BSP Brushes
  • Before importing new Assets (textures, meshes, sounds, etc.)
  • Before placing down any newly imported Mesh
  • Before moving/copying/duplicating assets in your map's directory
  • Before combining meshes and/or applying collisions from the Builder Brush


After losing significant progress once or twice, saving frequently will become second habit.

Placing Assets and Props

Using the Content Browser

The Content Browser is where you will get all the meshes, textures/materials and any other assets needed to make your map. The general process of using the content browser is drag and drop or selecting and asset and right clicking in the scene to place or replace assets.

The Content Browser can be located at "View > Browser Windows > Content Browser"

Figure 3.1: Default State of the Content Browser

The Important Tabs to other Windows in the image above is important to remember, you can quickly navigate between important windows that will aid in understanding maps.

Tab Description
Content Browser What you currently see
Actor Classes All placeable classes, usually if you need a specific KFActor to place in your scene you can look for it here.
Levels Will show the currently loaded level and its sublevels on official maps
Scene Contains all the actors/assets in the scene. If you are looking for a specific actor and cant find it look here.
Layers Works just like in Photoshop, allows you to assign specific assets to layers to organize and hide. A lot of official maps have some layers turned off (such as Skylights in Burning Paris) by default when you load the map. Simply turn them on to make the assets visible in the scene.


Most of the assets you see are default user interface and cosmetic items that cannot really be used for mapping. Assets for mapping are located in the Package/File Directory in the "KFGame > BrewedPC > Packages > Environment" subfolders.

!--T:1--> Note Note: Assets are not located in the "Maps" subfolder - with exception to Biolapse and Desolation assets which will be unusable for you project unless you migrate them into your map package


To load assets you wish to use in your project right click on the "ENV_" package and right click "Fully Load". This will take a second as the SDK loads in the assets into memory. If you want to use assets from maps simply locate the corresponding "ENV_" package and load it or alternatively open the map which will also load the assets and any other assets it uses not contained in its own ENV_ package. To get started fully load the "ENV_Modular_StaticSet" package.

!--T:1--> Warning Warning: It is usually not a good idea to fully load the entire "Environment" folder as it will often crash the Editor.


Using the Modular Static Mesh Set

All maps in KF2 start from and are built from the Modular Static Mesh Set instead of BSP Brushes like in traditional Unreal Engine maps. The meshes are very carefully modelled and texture unwrapped to work with tiling textures without any seams.

You can find resources on how to use the Modular kit here:

Comprehensive Wiki Guide: Setting Up Modular Static Set (Killing Floor 2)

Community Tutorial Playlist (by Kuebic): Killing Floor 2 SDK Tutorials

C:\SteamLibrary\steamapps\common\killingfloor2\KFGame\BrewedPC\Maps\SDK\Mod_Tools_Modular_Template
C:\SteamLibrary\steamapps\common\killingfloor2\KFGame\BrewedPC\Maps\SDK\Mod_Tools_Demo_Map
!--T:1--> Important Important: Tips for working with the Modular Kit
  • ALWAYS use snapping when using the modular kit. If you do not, it will be impossible align meshes correctly.
  • ALWAYS work in World Space.
    • You can toggle between World and Local space using ~
  • You DO NOT need to scale meshes for the modular kit, just add more segments
  • NEVER EVER rotate in Local Space. Even if you have angle snapping on, Local space has inaccurate decimal rounding and will always inaccurately rotate with snapped angles.
  • You only need to rotate walls or stairs. You usually do not need to rotate floors or ceilings, there are segments for every scenario you might have to avoid rotating these pieces (check the Mod_Tools_Modular_Template map for example).
    • Stick to 90 degree snap rotations for walls, there are specific walls available for 45 degree angles.
!--T:1--> Important Important: Advice from an Experienced Mapper
When you first start using the modular kit, you may feel compelled to have corners perfectly aligned with the corresponding Corner-In and Corner-Out pieces. But this is a waste of time. It is good to understand how these pieces work together, but in practice you often do not need to worry about them. When we start to add pillars, set-dressings and other assets to make the map visually interesting you will find that corners often get hidden. The time spent meticulously getting corners set up correctly is often wasted or never noticed by players; it is better to spend time elsewhere. If the corner is bare or where players will spend a lot of time, then it would be appropriate to use them correctly. But otherwise do not worry about it too much until you start to polish the map.


Changing Materials (Textures)

To change the look of the modular mesh pieces (or any mesh in the SDK), you apply a Material Instances onto them. A Material is a shader that combines the textures (diffuse, normal, specular, etc) so it can be applied onto a mesh within the editor.

The SDK already has a large library of materials that you have access to:

  1. Load up a Map or an ENV_ package, and find a Material Instance Constant (MIC)
    1. You can also right click the prop and select Materials > Find Instance in Content Browser to locate it in the packages.
  2. Drag and drop it onto the mesh you want it applied to.
    1. Alternatively, select the MIC in the Content Browser and right click the prop within the scene and select Materials > Assign from Content Browser.

You can also create custom variations of the MICs specifically for your map!

  1. Right click on the prop in the scene and select Materials > Create New Instance (Constant)
  2. Give it a new name and a new window will pop up
  3. Click the checkbox on the properties you want to change so it can be applied (See Figure 3.2).
    1. Depending on the MIC you selected you may be given a number of options to change the look of the Material. These usually allow you to change the tint of the texture, the UV scaling and even replacing the textures completely to different ones in the SDK or even ones you imported yourself.
  4. You should experiment to see what you can make!

You may notice that some props have more than one slot for a material, just experiment to see which areas the materials affect.

!--T:1--> Note Note: If you create a new MIC, you will need to have it used in your Map/Scene somewhere. If you do not, it will not be saved when you load the map the next time. This is a quirk of the Editor to reduce file size by dropping unused assets. This applies to all assets, not just MICs

Figure 3.2: Left: Original MIC from Volter Manor. Right: New Custom MIC, note the highlighted ticked sections that change the MIC scale and color


Creating Interesting Levels with Props

If you are just starting out, it is highly recommended that you go and spend some time looking at the official maps to see how they place props, materials and lighting around the level. You can mix and match and even copy+paste assets directly from those maps into yours. If you want a comprehensive guide on how to place props and change materials the video below does an amazing job:

Community Tutorial (by Seanchaoz): KF2 SDK - Guide to making interesting room geometry

!--T:1--> Note Note: When you copy objects in the Editor, it copies it as plaintext. You can paste this into notepad just in case the editor crashes when you load another level.


Creating Landscapes

!--T:1--> Warning Warning: Currently Landscapes are bugged and official Materials and MIC are not working for custom maps and a workaround is required. This is a intermediate/advanced workaround and knowledge of a 3D Modelling program is required. More details are available in the link below.

If you are just starting out, I recommend making a map out of the modular kit first. The below guide will tell you everything about how to add one to your map if you wish to procede:

Comprehensive Wiki Guide: Setting Up Landscapes (Killing Floor 2)


World Lighting

If you have just been working with the Modular Kit you have most likely been in Unlit mode (Alt+3) which is unaffected by lighting. If you go to Lit mode (Alt+4), you will notice the scene is completely black. This is because there is no lighting set up in the map yet.

Adding Ambient Light - Skylights

To get basic environmental/ambient light we need to add SkyLights.

  1. Go to the "Actor Classes" Tab from the Content Browser
  2. Navigate to "Actor > Light > SkyLight"
  3. Drag and drop a Skylight into the scene (Do not use the SkyLightToggleable)

If you are in Lit Mode then you will see your scene light up. As a general rule, ambient lights should be rather subtle and not as powerful as the default value of '1'. Official Maps have values that range from 0.05 (Volter Manor) to 0.15 (Outpost) for their skylights. So values between 0.01 and 0.2 are good ranges.

So lets change the value to be what is usually more acceptable for KF2 maps:

  1. Select the SkyLight and Press F4 to open the Properties
  2. Under "Light > Light Component > Light Component > Brightness" (should be open by default), change the value to something like '0.1'
  3. You can also change the tint of the lighting to align with your map's mood by changing the "Light Color" under the Brightness setting
  4. If your ceilings are too dark you can change the "Light > Light Component > Sky Light Component > Lower Brightness" to something around '0.01'
    1. Again you want to use very low numbers here


KF2 Maps can have a total of 2 SkyLights; 1 for Outdoors and 1 for Indoors. You can select which SkyLight affects each area by making sure in the properties that you:

  1. Set "Light > Light Component > Light Component > Override Auto Lighting Channels" to True/Enabled
  2. Selecting which Channel to affect under "Light > Light Component > Light Component > Lighting Channels"
    1. Without the 'Override Auto Lighting Channels' property enabled, the SkyLight will default to whatever volume it is in. We just enable it to have greater control.

A secondary requirement for multiple Skylights is that you need a TWIndoorLightingVolume or a TWOutdoorLightingVolume. The LightingVolumes tell the editor that the assets (Props and Lights) within this volume are either Indoor or Outdoors, and will build the lighting accordingly. Since Indoors are usually contained within Outdoor environments, in most cases we just need to specify an Indoor Volume to save time.

To create lighting volumes:

  1. Select the Builder Brush (The Red Wireframe Cube in the scene)
    1. Press 'B' if you cannot so it (it may be hidden)
  2. Move the Builder Brush somewhere indoors to test
  3. On the right toolbar select "Volumes > Add Volumes" and click a TWIndoorLightingVolume (See Figure 4.1)
  4. Move the Builder Brush somewhere and you will see a pink cube left behind - this is your Volume
  5. You can change the general size of the volume by clicking Geometry Mode (Shift+2) and selecting the Volume faces and moving them where you want them
    1. You can shift back into Camera Mode with Shift+1
  6. Press the Build Geometry button to recalculate the Volume (See Figure 4.1)
  7. Press the Build Lighting button, a prompt will appear but just click OK
  8. You should notice after the game has finished building that all the meshes that intersect the Indoor Volume should be lit by the Indoor SkyLight (if you had set them up already)
Figure 4.1: Building lighting volumes action locations


General Lighting

Lighting from this point onwards is pretty easy now. There are 2 main types of light you can place into a scene. Both these lights have properties such as Brightness, Radius, Light Color which you can go creative with, you can even add flickering behaviors to them.

  • PointLights - Which provide light in a sphere like radius
    • You can place a light in the scene by holding 'L' and left clicking.
  • SpotLights - Which provide a cone of light in the direction it is facing
    • You can convert a PointLight to a SpotLight by right clicking the PointLight and selecting "Convert Light > SpotLights > SpotLight"


!--T:1--> Warning Warning: LIGHTING HAS THE LARGEST IMPACT ON PERFORMANCE
!--T:1--> Important Important: Important Tips for working with Lighting Performance:
  • ALWAYS Disable Cast Per Object Dynamic Shadows on PointLights.
    • This is Enabled by default and should ALWAYS be turned off.
    • This also does not work properly and has a SIGNIFICANT impact on performance
  • Dynamic Shadows are very expensive, try and use them very sparingly and only use them on SpotLights
  • As the radius of PointLights increase, the performance hit grows exponentially. Only have radii that is just enough for your scene
    • Performance really starts to drop once you get past a Radius of 1500
  • Try not to have a large density of lights overlapping each other. The more you overlap light radii, the larger the impact in performance
  • SpotLights perform better than PointLights. PointLights are made up of multiple SpotLights behind the scene and are 2x more costly to use. Try and use SpotLights as much as you can (eg: Ceiling Lights).

Lighting Documentation

Excellent Community Tutorial (by Seanchaoz): KF2 SDK Guide - Basic Lighting Tutorial

Shadow System Technical Documentation: Shadow System Technical Documentation (Killing Floor 2)

Building (Baking and Cooking)

Basic Building

Geometry

Lighting

Paths

Splattermaps

Common Errors

Baking VS Cooking

Using the Brushes and Volumes

BSP Modifiers

Binary Space Partitioning

CSG Modifiers

Constructive Solid Geometry

Important Volumes

KFPawnBlockingVolume

KFSpawnVolume

TriggerVolume

KFReverbVolume & KFDialogEnvironmentVolume

Important Tips

Setting up Spawns and Pathing

Spawn Volumes

Pathing

Portal Spawns

Testing Your Map

What you should be Testing for

Playing in Editor

Playing in Base Game VS on a Server

Map Optimization

Map Optimization is the arguably one of the most important steps when completing a map. Aside from having good playable spaces, the map needs to perform well on all machines; maintaining stable Frames per Second (FPS). The following guide is a comprehensive list of areas that should be addressed before publishing a map. EVERY step should be evaluated and addressed as they will all add to performance.

Comprehensive Wiki Guide: Map Optimization Guide (Killing Floor 2)

Publishing to the Workshop

!--T:1--> Important Important: Make sure your map is in the correct location; As suggested above, the recommended location for maps should be: C:\Users\UserName\Documents\My Games\KillingFloor2\KFGame\Unpublished\BrewedPC).

KFWorkshopMapSummary.ini

By default, maps natively support Survival, Weekly, and Endless game modes; If you were to upload the map directly with the Workshop Upload Tool, your map would be playable in these game modes. Objective mode is set to false so the map will not show up in selection in Objective Gamemode. To enable this you have to create and bake an additional .ini file into the map during upload. Additionally if you had a map which didn't support a game mode (eg: Progression or Holdout not being supported in Endless) this .ini will allow you to remove map selection when that game mode is active.

Create a KFWorkshopMapSummary.ini within the following location:

C:\Users\UserName\Documents\My Games\KillingFloor2\KFGame\Config\Config
!--T:1--> Note Note: The nested 'Config' folder within Config is not a mistake, you will need to create that folder within Config. If it is not located in this exact location it will not show up in the Workshop Upload Tool.

Copy and paste the following into the KFWorkshopMapSummary.ini

[KF-MAPNAME KFMapSummary]
MapName=KF-MAPNAME
MapAssociation=0
ScreenshotPathName=UI_MapPreview_TEX.UI_MapPreview_Placeholder
bPlayableInSurvival=True
bPlayableInWeekly=True
bPlayableInVsSurvival=True
bPlayableInEndless=True
bPlayableInObjective=False
  • KF-MAPNAME: Replace all instances with your own map name.
    • Cannot have any spaces or special characters. It must also be prefixed with KF-
  • MapAssociation: 0 = Custom, 1 = Official Custom, 2 = Tripwire Official. Changing these values doesn't do anything.
  • ScreenshotPathName: See below
  • bPlayableInGamemode: True or False. If False, it wont show up in map selection. As a mapper you should not blindly make everything True; if your map is not supported make it False so you don't annoy the player downloading and playing your map.


Custom Map Preview

If you want a custom map preview you will need to include a map preview image in the map:

  1. Import your preview image to any location within your map.
    1. The preview image itself MUST be 512x256 in size and in a .TGA format.
    2. The name can be anything but again I recommend sticking with the game's naming convention of 'UI_MapPreview_MapName; I used UI_MapPreview_ZedsDiner.
  2. Double click the preview image and within the texture properties change the following (See Figure 11.1):
    1. untick SRGB. (If enabled your image may appear much darker within the game)
    2. LODGroup to UI
  3. !--T:1--> Important Important: .KFM will not keep any assets that are not used in the map when you save and close the SDK. You will need to create a Material Instance, apply the Map Preview texture to it, and place it on a mesh somewhere hidden in the map.
  4. Once you have done this save your map
  5. Add your Map's name and image's name to the ScreenshotPathName within KFWorkshopMapSummary.ini
    1. In this case the line would look like this:
      ScreenshotPathName=KF-ZedsDiner.UI_MapPreview_ZedsDiner
    2. If your image is in a group (eg: ENV_ZedsDiner_TEX), you should add this to the path name as well or you will get a warning when loading the map preview.
      ScreenshotPathName=KF-ZedsDiner.ENV_ZedsDiner_TEX.UI_MapPreview_ZedsDiner

Uploading using the Workshop Upload Tool

To access the Upload Tool, open up your Steam Library Tools and right click on the Killing Floor SDK and select 'Workshop Upload Tool'. The upload steps are pretty straight forward:

  1. Create a 'New Workshop Item'
  2. Add your map under 'Packages to Brew'
  3. If you have a 'KFWorkshopMapSummary.ini' add it to 'INIs to add'
  4. Give it a workshop title; this is what the actual steam workshop item will be called.
  5. Give a description
  6. Give a preview image, it is not required for it to successfully upload however. It is recommended to make the preview a 512x512 PNG or JPEG.
  7. Provide the appropriate Tags. IMPORTANT: As with the .INI only tick the appropriate gamemodes your map supports. If it isn't a Holdout Map or doesn't have Objective support, dont spam the tags.
  8. Click on Start once you are ready to upload

Figure 11.2 shows what the Upload tool looks like with the provided .INI and MapPreview package.

Figure 11.1: Untick SRGB and change the LODGroup to UI
Figure 11.2: What the Workshop Upload Tool should look like just before you upload

Miscellaneous