Wolfenstein Modloader Buy me a coffeeKaffee spendieren

In plain wordsIn einfachen Worten

This report describes a new small level, 'Atriumhall', built from existing wall, floor and prop pieces to replace a DLC map (c2v1) in Wolfenstein II (TNC). A design tool places the pieces plus enemies, pickups and lights, and automatic checks confirm the layout is walkable, closed and fits the original map's footprint. The level is structurally valid, but none of it has been loaded in the game yet.

  • Layout: entrance, an 8.5 m tall atrium with a red monolith and gallery ring, a corridor, two offices and a courtyard.
  • The latest build has 927 kit placements plus 9 enemies, 12 pickups and 12 lights.
  • Enemies stand only where the original navigation mesh exists, because it can only be reused.
  • All checks pass, and 13 deliberately broken layouts are caught.
  • Open: enemies have no spawners, there is no level end without a new script, and nothing is tested in the game.

Der Bericht beschreibt ein neues kleines Level, „Atriumhall“, das aus vorhandenen Wand-, Boden- und Möbelteilen gebaut ist und eine DLC-Karte (c2v1) in Wolfenstein II (TNC) ersetzt. Ein Design-Werkzeug platziert die Teile samt Gegnern, Pickups und Lichtern, und automatische Prüfungen bestätigen, dass der Grundriss begehbar, geschlossen und innerhalb der Originalkarte ist. Das Level ist strukturell gültig, wurde aber noch nie im Spiel geladen.

  • Aufbau: Eingang, ein 8,5 m hohes Atrium mit rotem Monolithen und Galerie-Ring, ein Korridor, zwei Büros und ein Hof.
  • Der neueste Stand hat 927 Bauteil-Platzierungen plus 9 Gegner, 12 Pickups und 12 Lichter.
  • Gegner stehen nur dort, wo das originale Navigationsnetz liegt, weil es nur wiederverwendet werden kann.
  • Alle Prüfungen bestehen, und 13 absichtlich kaputte Varianten werden erkannt.
  • Offen: Gegner haben keine Spawner, ohne neues Skript gibt es kein Levelende, und im Spiel ist nichts getestet.

Technical detailsTechnische Details

Der technische Teil ist auf Englisch – so, wie er im Wiki steht. Unterstrichene Begriffe haben eine Erklärung auf Deutsch.

Date 2026-09-24. Generated by tools/design_kitmap.py. Outputs: layout.json (each part, each entity, all checker results) and plan.svg (top view of both levels with legend).

Status: structurally valid, runtime unconfirmed. None of this has been loaded in the game.

Addendum 2 (Build d5867113…, replacing refuted 6ea27aec…): - Wall Base: Retail places the skirting board (local y −0.25) on the floor edge, while the cornice (−0.4) projects 0.15 m into the room (172 of 209 c2v1 walls). Every exterior wall now has its pivot point 0.25 m behind the floor edge. Previously, the cornice stood on the edge, and the skirting lay 0.15 m behind it over nothing. base_gap_check verifies this by shooting rays downward, 2 cm before every skirting board; in the old layout it finds 38 modules (304 samples). - Gallery Level: The exterior walls of the galleries stand at 0 m (0–4 m below the roof), no longer at −0.5 m. The coverings at 3.5 m and the north covering under the gallery are removed. Consequently, there is no gap anymore between the gallery floor and the wall. - Corners and Wall Ends: At every visible wall end stands a pilaster man_pillar_50x400_b (24 pieces), centered on the skirting line like retail c2v1_geo_lobby_func_staticinstance_3962/3964, or at double walls, centered on the pivot line. junction_check shoots 2D rays just past the module end; in the old layout there are 40 open ends, now 0 of 54. - Corridor Ends: The partition wall Gallery|Corridor is now at y −166.175, and the partition wall Offices|Courtyard at −145.825. Thus, the rearmost surface of the frame or wall lies exactly where the corridor and office walls end, and the corners are without pilasters. In the 4 m wide Retail neck, a pilaster would not fit. - Shutters in Air Space (z-fighting): North and South shutters sit like retail 2142 with the pivot on the edge. The last floor row is man_floor_175x200_a (1.75 m, hole-free per Mesh) and ends at the inner edge of the shutter. cap_floor_check: 0 coplanar pairs, in the old layout 26. - Office East: The east wall stands at x 11.0 (skirting 10.75), so that the corner pilaster remains in the Retail footprint. - Threshold of Closed Door: The door leaf sits retail-compliant at frame-local y −0.1, i.e., 0.15 m behind the floor edge. A man_floor_200x50 closes the floor up to under the leaf. base_gap_check therefore also scans every door opening down to the leaf level (counter-check: strip removed). - Bookcases: bookcase_100cm_c is open at its end local x = 0; retail places them in rows, mirrored in 5 of 10 cases. Per office there are now two bookcases in a row: the open end 1 cm before the skirting line, the second at the closed end of the first. - Dog (kitmap_ai_6): It stands now in the corridor at (1.2 / −161.5) in front of the gallery door. Office East has no Navmesh that connects via walkable floor with the start (0 of 48.5 m²). - navmesh_check: now floods cell by cell (0.1 m) over Navmesh on new walkable floor. An area that passes under a wall thus connects nothing anymore. Connected from start: Corridor 30.5/30.5 m², Office West 56.1/56.1, Galleries fully, Courtyard 53.1/182.7, Office East 0/48.5. - New Counter-tests: Wall 0.15 m outward, threshold strips removed, pilasters removed, shutter back on floor, dog back into Office East. All new tests run on the refuted layout old_layout_6ea27aec.json; each fails. - 927 Kit placements: 362 Floor, 308 Ceiling, 132 Wall, 24 Pilasters, 14 Shutters, 13 Door frames, 38 Props, 36 Stairs/Railings/Door.

Addendum (Fix Round, Build 6ea27aec…): The sections below describe the refuted build d60640b0 and are superseded in these points: - Walls: every room wall shows its lit side into the room, partitions are doubled (facing_check, 0 back sides; in old layout 86). - Door frames sit on the pivot line of their neighbor walls (0.000 m instead of −0.048 m). The door leaf sits like retail at an unmirrored frame: (1.4 / −0.1), unmirrored. - Gallery floor: man_floor_200x200_a instead of man_floor_200x200_b, i.e., without hole. - The 4 retail sky entities are taken over unchanged. - Stairs: It is now the retail stairs at its retail location, with man_stairs_layout_d. In addition comes the retail back wall man_wall_400x400_d at y −170 and shutters (man_cap_400x50_a) at the gallery edges. The gallery ceilings lie at −0.5 m like retail. The space under the side runs and under the north gallery is sealed like retail: the hall ends down at y −174.4. stair_flank_check verifies that every stair flank which retail seals is also sealed here. - Enemies stand on Navmesh component 0 (component of start), on real new floor (navmesh_check). - New are: 928 Kit placements, 9 enemies and 12 pickups. The numbers below (915 parts, "Enemies do not climb the stairs", Oversoldier Navmesh) no longer apply. - All counter-tests stand in layout.json → checks.negative_controls.

Summary

The level is newly built and replaces the contents of game/dlc/c02/c2v1. It consists of:

  • a Windfang serving as the player spawn area
  • an 8.5 m high atrium hall with a red monolith and a gallery ring at 0 m
  • a two-sided staircase
  • a green-lit corridor
  • two offices
  • an open courtyard with a locked door

Only kit parts from re_probes/kitmap/kit/kit.json are used: 915 placements from 26 models. This is supplemented by 4 custom boxes (Monolith, Base, 2 Obelisks). The boxes carry a CLIPMODEL_BOX and therefore do not require cm files.

Placed items include:

  • 3 player spawns: the two retained from the Skeleton and the recommended clone, all at the same location
  • 9 enemies
  • 12 pickups
  • 12 lights
  • 1 invisible "locked" hint

All tests are green, all 13 control samples pass, and the 1.0 m positive control succeeds.

The Flow (approx. 3–6 minutes)

  1. Windfang (10 × 4 m, −4.5 m): The player starts facing North. In front lies a 2 m wide passage; to the left and right are ammunition and armor, with cold-white lighting. Here, the player is safe.
  2. Atrium hall (20 × 28 m, −4.5 m, 8.5 m high): The line of sight leads to the red monolith. It is 7 m high, stands on a black base over the floor mosaic, and is flanked by two black obelisks. Two red strip lights illuminate it from below. Above the hall runs a gallery ring at 0 m around an open air space of 12 × 20 m.
    • Below the hall: two light soldiers and one heavy soldier under the North gallery.
    • Above: the Nagler on the West gallery and a light soldier on the East gallery. They shoot down into the hall.
  3. Staircase: Two sides along the East edge of the air space, −4.5 → Podest −2.25 → 0 m. At the top, one arrives at the North gallery. MP ammunition is located at the staircase, MP at the West end.
  4. Corridor (4 × 20 m, 0 m): The door in the North wall of the gallery leads into a hallway with pale green lighting. Side doors lead to both offices.
  5. West Office with warm lighting: one heavy soldier, large medikit, helmet. East Office with cold lighting: one combat dog and the combat rifle.
  6. Courtyard (20 × 20 m, open, moonlight): It is accessible via three doors, from the corridor and from both offices. This creates a loop: Office – Courtyard – Office – Corridor.
    • Enemies: the Overseer with Cannon and an Elite soldier.
    • Cover: four columns and crates.
    • On the North wall hangs a static door under red alarm light. It bears a "locked" hint; retail has no door in c2v1 that opens.

There is no level end. The Skeleton removes mission scripts, so it is missing until a new script is written.

Rooms

Room Rectangle x0,y0 – x1,y1 (m) Floor z Accessible (m², 0.8-m body) Retail floor / free at this height
Windfang −5,−194 – 5,−190 −4.5 29.9 98 % / 68 %
Entrance hall (without Windfang) −9,−194 – 11,−166 −4.5 406.4 98 % / 69 %
Staircase podest 3,−178.5 – 7,−174.5 −2.25 14.0 0 % (player only)
North gallery −9,−170 – 11,−166 0 57.8 98 % / 65 %
West gallery −9,−190 – −5,−170 0 62.0 94 % / 67 %
East gallery 7,−190 – 11,−170 0 62.0 100 % / 70 %
South gallery −9,−194 – 11,−190 0 62.6 98 % / 63 %
Corridor −1,−166 – 3,−146 0 51.5 44 % / 34 %
West office −9,−162 – −1,−146 0 90.9 61 % / 41 %
East office 3,−162 – 11,−146 0 92.3 54 % / 36 %
Courtyard (open) −9,−146 – 11,−126 0 344.8 65 % / 42 %

All passages are kit door frames. Their clear width was measured from collision (cm), not from the name:

  • 5 × Frame c with 2.0 m (Windfang → Hall, Gallery → Corridor, Corridor → both offices, Corridor → Courtyard)
  • 2 × Frame b with 1.6 m (Offices → Courtyard)
  • 1 × Frame a with 1.2 m (the locked door)

The Navmesh can only be reused (see mapmanifest.md). Enemies run only where the retail floor existed. The retail collision for c2v1 shows a ring exactly at 0 m above the lobby surrounding an air space (x −5…7, y −190,5…−170) with no floor above it.

The first version had only a North Gallery. The new navmesh_islands measurement showed there 163 m² of "Phantom Floor": retail Navmesh at 0 m where the new level has air. Enemies viewed from above would want to "run" across the hall. With the ring, that is 3 m², a 0.5–1 m wide remainder behind the railings.

The hall therefore deliberately follows the retail ring. Everything else is new floor plan:

  • Windfang
  • Monolith Axis
  • Staircase in the air space
  • Corridor
  • Offices
  • Courtyard

These rooms lie where retail had completely different walls.

Footprint and Heights

  • The entire level was shifted 1 m west compared to the first draft. The offices begin at y −162 and the corridor walls stand inside. The reason: the retail footprint (floor at any height) ends at x 12 (lobby) and at x 11 (north block). Between them, it has only a 4 m wide neck at y −166…−163 (x −1…3).
  • Now every part, every box, and every entity lies above retail floor. The list outside_retail_footprint is empty, and everything lies within the retail core bbox.
  • Floor heights: −4.5 m has 546.8 m² of retail floor in the level rectangle, 0 m has 763.3 m². The platform at −2.25 m is explicitly only for the player (PLAYER_ONLY_HEIGHTS). No enemy stands there; this is checked.

Enemies and the Floor They Rely On

All defs come from retail-c2v1-Entities (Donor blocks, drop_refs = references to removed scene points that must be deleted upon cloning). Retail has hide = true for all of them (they are generated by spawners). We set hide = false; precedent is the c2v2 Takedown Dummy.

# Def Location (x, y, z), View Relies On
1 soldier_light Hall −4, −177.5, −4.5 Hall South: retail island 251 m², completely on our floor
2 soldier_light Hall 9.5, −180, −4.5 (under East Gallery) same island
3 soldier_heavy Hall −4, −169.5, −4.5 (under North Gallery) Hall North: island 131 m²
4 soldier_nailgun West Gallery −7, −184, 0 Ring + Corridor Neck + Offices + West Courtyard: island 377.5 m², of which 370.8 m² is on our floor
5 soldier_heavy West Office −2.5, −158, 0 same island
6 kampfhund East Office 5.5, −157, 0 same island
7 ubersoldat_cannon Courtyard 8, −143.5, 0 East strip of courtyard (x 5.5…11): own island
8 elite_heavy Courtyard −5, −144, 0 Island like 4
9 soldier_light East Gallery 9, −181, 0 Island like 4

What this means for the game:

  • Retail separates the hall at y ≈ −174.5 with a continuous barrier. Therefore, for enemies it breaks into a South island (1, 2) and a North island (3). The player can pass freely.
  • Enemies do not climb up or down the new staircase; the staircase and platform have no Navmesh. Above and below they fight over the air space at range.
  • The Uber Soldier (7) cannot run to the west part of the courtyard. The center of the courtyard has no retail Navmesh at 0 m, making it cover for the player.
  • New obstacles on retail Navmesh:
Area Area What is there
Hall South 28.75 m² lower staircase run 15 m², plinth 9 m², desks 3 m², Windfang door frame, obelisks
above 12.25 m² desks, chairs, bench, radiator, pillar, door frame posts
Courtyard East 6.25 m² pillars, furniture

Enemies can collide there.

Components

Role Count Models
Floor 400 man_floor_200x200_a/b, neumond floor_200x200cm_d (Offices), studio floor_200x200cm_a (Courtyard), 1 × man_floor_mural_b (6 × 6 m under the Monolith)
Ceiling 308 man_ceiling_200x200cm_a, Scale z = −1 like retail (only there does it have a cm)
Wall 110 man_wall_400x400_b, _300x400_a, _200x400_a
Cover 30 man_cap_400x50_a, man_cap_100x50_a
Railing 16 man_railing_400x100_a around the air space and at the platform
Door Frame 8 man_door_frame_400x400_a/b/c
Stairs 2 + 2 Runners man_stairs_225x450_a + man_stairs_carpet_225x450
Door Leaf 1 man_door_a
Props 38 Desks, Chairs, Bookshelves, Benches, Radiators, Boxes, Cartons, 4 Columns

Additions to the Components:

  • All parts have a cm at their scale.
  • 25 of the 26 models are located in chunk_22.resources, with the carton in gameresources.resources. A newly built chunk_22 must retain these entries.
  • For 3 models, c2v1 lacks an example block: studio floor_200x200cm_a, man_cap_100x50_a, man_door_frame_400x400_c. The block type is the same (func/staticinstance): Take an example of a sibling part and swap the model name.

Door Group: The door leaf and sign sit exactly as retail sets them. The test reads the viewer data:

  • The leaf sits at Frame + local (1,4; 0,1), same yaw angle, scale (1, −1, 1). 7 of 40 retail man_door_a stand exactly like this.
  • The sign sits at Leaf + local (0,6; 0,06; 1,23), yaw angle −90°, like sacramento_gameplay_prop_doors_locked_7.

Custom Boxes: func/dynamic with CLIPMODEL_BOX (size + offset), Precedent submarine.entities gp_func_dynamic_2_715006291. The boxes are built via probe_meshfmt.build_box and pass check_geometry and the Byte Round-trip (1502–1508 Bytes). Materials: textures/common/flatcolour/red|black, both present in c2v1-Mount.

Alternative path if new model entries fail: models/editor/box.lwo with customMaterial, like retail c2v1_geo_lobby_func_staticinstance_1. The scale is stored in fallback_render.scale (Box is 1 m).

Lights (12)

Light Type Color Purpose
monolith_w / monolith_e Spot Red (1, 0,08, 0,05) Strip light from below onto the Monolith
hall_fill Point Warm White Base lighting of the hall
windfang Point Cool White Safe start
galerie / galerie_s Point Amber North and South Gallery
korridor_s / korridor_n Point Pale Green "Interrogation Corridor"
buero_w Point Warm Desk lamp
buero_o Point Cool Blue Filing cabinet light
hof_mond Spot Blue, from above Moonlight
hof_alarm Point Red Above the locked door

Donor blocks are the retail lights c2v1_lights_lights_light_point_1603252612 and …_spot_1557246881.

Pickups (12)

  • Windfang: Small armor, Medium pistol ammo
  • Hall: Medium medkit, Small pistol ammo
  • North Gallery: MP, MP Ammo
  • Corridor: Small medkit
  • West Office: Large medkit, Helmet
  • East Office: Assault Rifle
  • Courtyard: Medium medkit, Small armor

Tests

python tools/design_kitmap.py builds, checks, and writes the output in approximately 25 seconds; the result is OK: 0 failure(s), negatives all caught. It checks the following, and each point fails if it is incorrect:

  • No two wall parts (wall, cover, jamb/post/overhang, door leaf, railing, columns, own boxes) overlap in volume; floors do not overlap with each other; props do not intersect walls.
  • Every cell of every room (0,1-m grid, 0.25 m inset) has a floor part at room height.
  • Every room is reachable from the player start for an 0.8 m wide body; stairs count as ramps, steps are at most 0.35 m high. This allows passing every gap ≥ 1.0 m and prevents gaps ≤ 0.8 m.
  • Player start, enemies, and pickups stand on a floor part and are reachable.
  • Everything lies within the retail core bbox and above the retail floor footprint; floor heights are retail floor heights.
  • Every enemy stands on retail-free floor of its height, with ≥ 6 m² contiguous area in the room.
  • Every part has a cm at its scale.
  • 6–12 lights and 6–10 enemies; no duplicate names.
  • Game cross-section, read-only:
    • The defs of all 41 entities (including own boxes) are mounted entityDefs; all donors exist in retail c2v1 with the same def.
    • Frame openings exist in the cm (cuts at z 1.0 and at the overhang).
    • Materials and own boxes are correct.
  • Skeleton fallback path: If retail world.hkshape remains, 6 of its invisible blockers are in our rooms: on Gallery West, Gallery South, in the corridor, and 3 areas above head height. All rooms and entities remain reachable nonetheless.

Negative tests (--negative, 13 items, all detected), plus a positive control:

Negative Test Expected Message
Wall before the only door Gallery → Corridor "korridor is not reachable"
Floating enemy (+2 m) "does not stand on a floor piece"
Double, offset wall "wall overlap"
Missing floor slab "cells without a floor piece"
Passage narrowed to 0.8 m "korridor is not reachable"
Enemy on retail-adjusted floor "retail had no clear floor"
Pickup at x −30 "outside the retail core bbox"
Floor slab in retail neck at x 5 "outside the retail floor footprint"
Floor slab at −3.0 m "not a retail floor height"
Ceiling at scale 1 "has no cm at scale"
Additional hkshape blocker before corridor door unreachable in fallback check
Door leaf offset by 10 cm no retail equivalent
Sign 23 cm lower deviates from donor

Positive Control: The same passage narrowed to exactly 1.0 m remains passable.

python tools/design_kitmap.py --check re-checks the written layout.json with 0 errors.

For the Master: reading layout.json

  • pieces[]: kit (model name from kit.json), pos, yaw (degrees), scale, aabb, room, role. Each part becomes an idStaticInstanceEntity (inherits func/staticinstance) after the example_entity from kit.json. Formula: World = t + x·A0 + y·A1 + z·A2, A_i = scale_i · mat[i], mat[0] = (cos, sin, 0), mat[1] = (−sin, cos, 0).
  • authored[]: own boxes with model name, material, box dimensions, generating properties and the alternate path.
  • entities[]: def, class, pos, yaw, properties (spawnPosition, spawnOrientation, light color/intensity/radius or target), donor (retail block as template) and drop_refs.
  • checks: This section contains all check results:
    • navmesh_proxy and navmesh_islands
    • retail_hkshape_fallback
    • game.retail_door_relation
    • the negative tests

Risks and open points

  • Unconfirmed at runtime. Nothing has been loaded in the game.
  • Enemies without spawners and without scripts (hide = false): Whether they perceive and attack is only shown by testing. Retail sets all enemies in c2v1 via spawners.
  • Navmesh:
    • The obstacle and phantom counts are an offline substitute from retail collision (0.5m grid), not the real Navmesh.
    • Enemies can get stuck on new obstacles, especially on the lower staircase.
    • The sergeant has 609 m² of Navmesh beyond our walls. He could run against the courtyard wall if he does not reach the player.
  • New model entries (own boxes) require a tool that adds entries to the container. Such a tool does not yet exist; currently, only rebuild replaces them. The alternative is the replacement path models/editor/box.lwo.
  • megatexturedModel: All retail instances have true. Whether new instance names need data for this is open (kit risk).
  • Blocker: Does the master retain retail world.hkshape? There are 3 invisible crates on walkable areas, on Gallery West, Gallery South, and in the corridor. The path remains free everywhere, but one bumps into them. Exchanging against c06p2 from the Skeleton report is recommended.
  • No level end without a new mission script.