English · Русский · Español · Português · Lietuvių · Polski · Français · 中文 · 日本語
A desktop app (Windows / macOS / Linux) for viewing Killing Floor game maps (*.rom, Unreal Engine 2.5). It draws the world with textures and lets you fly around, without opening the heavy KFEd editor. The same viewer also runs as a single viewer.html page in the browser. I worked the .rom format out by hand; the details are in RESEARCH.md.
- A local Killing Floor game install (the viewer reads your own game files:
.rommaps and the.utx/.usxpackages next to them). - Either the desktop app below, or a recent Chromium-based browser (Chrome / Edge) — the viewer uses the folder picker and the S3TC compressed-texture extension.
No game content ships with this repo. You point the viewer at your own install.
Prebuilt, self-contained apps are on the Releases page — no browser needed:
- Windows —
…-setup.exe(installer) or…-portable.exe(run without installing). - macOS —
…-mac-x64.dmg(Intel) or…-mac-arm64.dmg(Apple Silicon). - Linux —
…-linux-x86_64.AppImage(run anywhere) or…-linux-amd64.deb.
They wrap the exact same viewer in Electron; the controls and workflow are identical to the browser version below. The builds are unsigned, so the OS may warn on first launch (Windows SmartScreen → More info → Run anyway; macOS → right-click → Open).
pnpm install
pnpm start # run the app from source
pnpm run dist # build installers for the current OS into dist/- Open the desktop app, or open
viewer.htmlin a browser (double-click it). It runs offline; Three.js is vendored undervendor/. - Click Game folder and pick your KF install root (
…/common/KillingFloor). Only the package names are indexed up front;.utx/.usxfiles are read on demand. - Click Map .rom and choose a map (or drag a
.romonto the window).
Controls: click to capture the mouse, WASD to move, Space/Ctrl for up/down, Shift to sprint, R (or the Reset view button) to return to the start, Esc to release the mouse.
The left panel has toggles for wireframe, BSP, meshes, terrain, sky and light, plus overlay toggles for spawns, trader and paths (player starts, trader spots, monster path nodes), and a movement-speed slider.
What it draws: the world BSP (walls/floor/ceiling), static meshes (props and detail — for the CS-port maps this is nearly all the geometry), and heightmap terrain, all textured. Cutout textures (foliage, grilles, fences) use an alpha test; glass, rain and other blended effects follow the material's blend mode. The skybox is the map's real SkyZoneInfo zone drawn as a camera-locked backdrop, with the placeholder "sky window" surfaces dropped so it shows through. The light toggle bakes an approximate lighting pass from the map's Light/Spotlight actors — it is off by default and is not the game's exact baked lightmaps.
A few rough edges are listed at the end of RESEARCH.md. Notably: meshes whose .usx isn't installed are skipped (shown in the log), and terrain height uses the standard UE2 mapping, so if a map's terrain looks too flat or too tall the divisor in the code is the knob.
node cli.js <map.rom> # package version, geometry counts, referenced texture packages
node cli.js <map.rom> out.obj # + export the BSP as OBJ (opens in Blender / Windows 3D Viewer)The OBJ has positions, faces and UVs but no textures — a quick way to check geometry in any 3D tool.
| File | What it is |
|---|---|
viewer.html |
the viewer (Three.js + a small pointer-lock/WASD fly camera) |
kfrom.js |
the core: UE2.5 package parsing, world BSP, static meshes, terrain, textures (browser & Node) |
cli.js |
Node CLI: stats and OBJ export |
electron/main.js |
Electron shell that hosts viewer.html as a desktop app |
vendor/three.min.js |
Three.js r136 (bundled so the viewer works offline) |
RESEARCH.md |
notes on the .rom format and how the viewer renders it |
This project is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later). See LICENSE for the full text.
vendor/three.min.js— three.js r136, © three.js authors, MIT license. Bundled unmodified; its license notice is kept in the file.
Killing Floor and Unreal are trademarks of their respective owners (Tripwire Interactive and Epic Games). This is an unofficial, fan-made tool and is not affiliated with or endorsed by them. It ships no game assets; it only reads files from a copy of the game you already own.
