Mapping & SDK

KF2 SDK Editor Manual: Interface, Brushes and Static Meshes

This is a translated and condensed version of the opening of a Russian-language KF2 SDK manual. The author offers the full version as PDF and Word (with pictures and fewer typos) and posted only the first part on Steam, since reading it without images is hard. The goal is to explain the editor, spare newcomers repeated questions and help them start making their own maps sooner. If you know UDK or the first Killing Floor's editor you will have an easier time: the KF2 SDK is a heavily modified UDK and most functions work the same way. For a broader overview see modding for dummies.

Editor interface

The editor is one large work window (you can add more, but the author uses one). At first the interface looks inconvenient, but many elements repeat each other.

  • File: New level, Open, Save current level, Save as, Switch render (DirectX 10 or 11), Import/Export (only needed to port maps from other Unreal Engine games) and recent files. The rest is unused.
  • View: includes autosave; set its interval in Change autosave options (the author recommends 15 minutes after a power cut once cost about 20 minutes of work). New floating viewport and Fullscreen are here too.
  • Edit and Brush: rarely used, they duplicate other controls (Brush duplicates the CSG and Volumes tabs on the left).
  • Build and Play: the icons at top right do the same.
  • Tools and Help: little use.
  • Preferences: very useful.

Two ways to build a level

The author advises combining both.

Brushes (BSP) are the level geometry, the skeleton like a building's foundation. Although all official maps are made without brushes, they are handy and do not suffer seams like static meshes. Downsides: the KF2 blood system does not work on brushes (you can cheat by covering the floor with static meshes of the same texture), additive brushes convert easily to static meshes, and geometry does not rebuild until you click Build Geometry (the cube at top right), which can be avoided by enabling auto-updating BSP visualization in Preferences.

Static meshes are decoration: tables, chairs, lamps. They support the blood system, and the Content Browser contains building static meshes from which you can build a level as good as with brushes. Downsides: seams, especially in blood, and scaling a mesh scales the blood (a puddle instead of a drop). They are easy to give physics by turning them into KActors, and doors and movers (moving platforms) are made from them. If you want blood everywhere, build only from static meshes.

Controls and your first brush

Control is by mouse and hotkeys. Left button moves in a direction, right button looks around, both together change height; WASD also works. F11 toggles fullscreen and B brings back a lost red builder brush.

The editor space is a huge emptiness (in the first KF it was a solid mass) that you must fill. The red cube is the builder brush; right-click its icon to set dimensions. Example: set 20000 on X and Y, press Build, then Add in the CSG tab to get a huge platform. If you do not see textures, check the Unlit and P settings.

Viewport modes: P (and three others) are the views (top, bottom, side, perspective; perspective is most convenient); Brush wireframe and Wireframe; Unlit and Lit (without or with lighting; the author works in Unlit, Lit suits strong PCs or light maps); the joystick icon is Real time (useful for emitters such as fire); G shows the world as in game.

Next, create a second cube, e.g. 800x800x800, tick Hollow and set wall thickness 16-32, Build, but do not add it yet: position it first, either with the arrows on the builder brush edge or with the mouse while holding Ctrl (left button red arrow, right green, both blue). World/Local switches the axes: World is relative to the world (recommended), Local to the selected object. Recommended grid size is 8 to 32 and rotation grid 5 to 11 degrees. Space cycles modes: move, rotate, scale (the first scale mode is proportional, the second per axis).

For a doorway, create a smaller brush (e.g. 200x200x300) without Hollow, place it lower and cut with Subtract. Brushes are of two types, additive and subtractive; simple, unlike KF1.

Shapes

  • Cube: straightforward.
  • Cone and cylinder: Sides count (no more than 20 or the editor suffers) and Outer/Inner radius (only Outer really matters since Hollow is rarely used).
  • Curved staircase: radius, step height and width, angle (360 makes a circular stair), Num steps, Add to first step, Counter clockwise (rotates 180 degrees).
  • Linear staircase: straight stairs with the same settings.
  • Spiral staircase: always 360 degrees.
  • Sphere: for more polygons change Sphere extrapolation; 5 is plenty.
  • Sheet and Cards are unused.

Copying and selection

If you work only with brushes, enable auto update BSP visualization or press Build Geometry after changes (not needed for newly added brushes). Select a whole brush through its edges in Brush wireframe mode, or enable Clicking BSP selected brush in Preferences. Hold Alt while moving to make a copy; the fallback is Ctrl+W, which offsets slightly but works when axes are crooked. Ctrl+click selects several objects.

Content Browser

Sounds, objects, emitters and effects live here. Hotkey Ctrl+Shift+F. Packages are packed by default and need loading. You mostly need the text tabs at the top, search and filter, and above all Packages. Click the wrench by Packages to get the right list.

Key points: in Unreal Engine 3 only materials are applied to objects and surfaces (tag Mat; the author calls them textures). Objects are Static Meshes (tag Mesh). Official map packages have the tag Env.

Static meshes in detail

Adding. To add an object from Biotics Lab, type env mesh in the Packages search (optionally bio), pick a package (no preview), right-click and choose Fully Load. Choose a mesh and add it: right-click a surface and Add StaticMesh, or drag it from the Content Browser.

Properties window (F4). You need the Static Mesh Component tab, mainly Rendering and occasionally Lighting; sometimes Display and Collision.

  • Rendering: Materials (change skin: plus, None, pick a material in the browser, green arrow), Min and Max Draw Distance (a great optimization) and Hidden Game (for invisible stairs for ZEDs).
  • Lighting: only if lighting misbehaves; Indoor and Outdoor boxes are lighting channels.
  • Display, Draw Scale: size on all axes or per axis; a negative value mirrors the mesh. Scaling must be a multiple of 0.25 or placement causes seams or gaps.
  • Collision: only for special cases, such as when an object must not block ZED routes. Some objects have no collision by default; an invisible Blocking Volume helps (right-click the mesh, Create Blocking Volume; if inaccurate, use the last option, Auto Convex Collision, and set its accuracy, though it often crashes the editor). Creating a Blocking Volume switches the mesh's collision to BlockWeapons, so it only blocks shots and grenades; use the templates in Collision Type.
  • Can step up on: if the legs of ZEDs or players collide with an object (such as water built as a static mesh) but the body does not, ZEDs will walk in a crouch.

Experiment with static meshes, and when you are ready move on to applying textures to the level.

The boss does not show up at the end

A question from the killingfloor.ru forum thread "Как на кастомных картах заставить патриарха выходить в конце?". According to UltraKill's answer, the boss spawns only if the map has a dedicated spawn point for him: it is small, and its name contains the word BOSS. The SDK's default content collection includes every type of spawn. The thread starter told UltraKill that UltraKill's cube map had only one such spawn, which was constantly in view, so the boss would not spawn; he had to add 12 more spawn locations.

FAQ

What is the KF2 SDK based on?
It is a heavily modified UDK, so most UDK tutorials also apply to KF2, though not all.
Brushes or static meshes for the base of a level?
The author recommends building the base from brushes (no seams) and then filling the level with static meshes. Note the KF2 blood system works on static meshes but not on brushes.
Why must static mesh scale be a multiple of 0.25?
Otherwise the world grid causes seams or gaps when you place the object.