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 refuted6ea27aec…): - 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_checkverifies 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 pilasterman_pillar_50x400_b(24 pieces), centered on the skirting line like retailc2v1_geo_lobby_func_staticinstance_3962/3964, or at double walls, centered on the pivot line.junction_checkshoots 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 isman_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. Aman_floor_200x50closes the floor up to under the leaf.base_gap_checktherefore also scans every door opening down to the leaf level (counter-check: strip removed). - Bookcases:bookcase_100cm_cis 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 layoutold_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 buildd60640b0and 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_ainstead ofman_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, withman_stairs_layout_d. In addition comes the retail back wallman_wall_400x400_dat 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_checkverifies 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 inlayout.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)
- 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.
- 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.
- 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.
- 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.
- West Office with warm lighting: one heavy soldier, large medikit, helmet. East Office with cold lighting: one combat dog and the combat rifle.
- 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
cwith 2.0 m (Windfang → Hall, Gallery → Corridor, Corridor → both offices, Corridor → Courtyard) - 2 × Frame
bwith 1.6 m (Offices → Courtyard) - 1 × Frame
awith 1.2 m (the locked door)
Why the hall is an atrium with a gallery ring
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_footprintis 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 ingameresources.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_astand 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.hkshaperemains, 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 anidStaticInstanceEntity(inheritsfunc/staticinstance) after theexample_entityfrom 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, generatingpropertiesand the alternate path.entities[]:def,class,pos,yaw,properties(spawnPosition, spawnOrientation, light color/intensity/radius or target),donor(retail block as template) anddrop_refs.checks: This section contains all check results:navmesh_proxyandnavmesh_islandsretail_hkshape_fallbackgame.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.