Tool: tools/survey_kitmap_kit.py, Output: re_probes/kitmap/kit/kit.json
(160 components, 422 KB). Status 2026-09-24. Structurally valid, runtime unconfirmed.
Results
- 160 components, all resolvable in the c2v1 mount, both with the Retail
chunk_22(dlc_2) and the installeddlc/dlc_0/base/chunk_22.resources. The installed dlc_0 archive contains all 6,985 Retail entries plus 143 proprietary ones. Categories: 41 walls, 40 floors, 22 ceilings, 7 trims (caps/corners), 6 pillars, 6 railings, 5 stairs, 5 door frames, 4 doors, 4 windows/glass, 5 miscellaneous, 15 props (tables, chairs, lamps, crates, bench/radiator/shelf). - 151 of the 160 models are located within
chunk_22itself, not in base. Anyone rebuildingchunk_22must retain these entries. Base contributes only 6 props fromgameresources,servicetable_01fromchunkbase_6,neumond/floor_800x800cm_afrompatch_2_chunkbase_6, andlab_pillar_afromchunk_9. - 109 components exist in c2v1 and have a real example block, copied from
c2v1.entitiesvia the byte-exact parser ofbuild_custom_map. Another 51 components lie in the mount but are only placed by c2v2/c2v3. For them,example_entity: nullapplies. - 144 / 160 have collision for placement in the example. The example placement resolves exactly via the
CmIndex.resolverule. The cm bounds match the render bounds (under the cm-specific scaling) everywhere within at most 2.4 cm. Therefore, the cm truly belongs to this model.
Dimensions and Conventions (measured from Vertices, not from Names)
Model space in meters, +Z up. The Sacramento modules (man_*, Gestapo Kit) follow a grid:
| Component | Size x·y·z | Origin |
|---|---|---|
man_wall_{100,200,300,400,600}x400_a |
B · 0.225 · 4.0 | x-min, z-min, wall lies at y −0.4..−0.175 |
man_floor_200x200_a |
2.0 · 2.0 · 0 | x-min, y-max (the tile extends +x and −y), z=0 |
man_floor_175x200_a (535× in c2v1) |
2.0 · 1.75 · 0 | as above, occupies y −2.0..−0.25 of a 2×2 cell |
man_ceiling_200x200cm_a |
2.0 · 2.0 · 0.05 | x-min, y-max, z-max. Retail sets ceilings with scale z = −1 |
man_pillar_50x400_b |
0.5 · 0.5 · 4.0 | Center, Center, z-min |
man_railing_400x100_a |
4.0 · 0.112 · 1.0 | x-min, y-center, z-min |
man_door_frame_400x400_a |
4.0 · 0.273 · 4.0 | x-min, z-min |
man_door_a |
1.2 · 0.267 · 2.5 | x-min, z-min |
man_stairs_225x450_a |
4.525 · 4.1 · 2.25 | Offset, see kit.json |
Wall and door modules are 4 m high. Widths are whole meters; the floor uses a 2-m grid with 0.25-m strips (man_floor_200x50). 38 components tile demonstrably: Retail sets identical instances edge-to-edge (tiling.abutting_same_piece_pairs), e.g., man_floor_175x200_a with 624 pairs and man_ceiling_200x200cm_a with 571 pairs.
Names lie (Negative control, real hits): For 27 components, the geometry deviates from the named size by more than 5 cm. Examples: man_ceiling_200x100cm_a is 2.0 × 0.75 (placed 672 times), man_floor_200x175_a is 2.0 × 0.75, man_pillar_50x400_c is 6.5 m high, man_pillar_50x400_a measures 0.7 × 0.7 × 4.5, neumond/floor_1600x1000cm_a measures 16 × 8. The corners (man_corner_*) are L-profiles; their name describes no rectangle. Always take sizes from size_m / bounds_*.
Collision: the cm is pre-scaled
The cm name carries the scaling ($scale=%e,%e,%e) and $filterclip. Therefore, collision exists only for a scaling from collision_scales. filterclip=18 belongs to contentsFilter { playerClip = false; monsterClip = false; }, the default of Static-Instances in c2v1.
- 48 parts have no cm with scale 1 (
unit_scale_cm: false), of which 20 are from the 22 ceilings (all exceptceiling_01_400x400cm_a/c). Adopt the example for them (example_scale, usually z = −1); otherwise, a part without collision remains. - 16 parts have no resolvable cm for any placement (
has_collision: false), such asman_wall_200x400_bor New Moon walls likewall_600x600cm_*. Use these parts only as decoration or secure them with afunc/collision_onlybox.
Entity-Defs that place
idStaticInstanceEntity/func/staticinstance: 4,533 placements of Kit parts. The example block containsrenderModelInfo.model, optionalscale, andclipModelInfowithCLIPMODEL_AUTO,clipModelName= model,contentsFilter, andincludeInNav = false.idGlassEntity/func/glass(41×, windows and glass walls): renders<model>.glassmodeland not themodelentry. It collides with.glassmodel$…$part=N.man_partition_glass_cexists only as a glassmodel. Its size is not measured because the format is not decoded. Example block underspecial_entities.idDynamicEntity/func/dynamic(35×, lamp models, one door).- Doors: c2v1 has no door that opens. All 45 door entities are invisible
idProp2Use-Prompts (prop/doors/unavaliable40×,prop/doors/locked5×). They have no model andCLIPMODEL_BOX0.2 × 1.2 × 1.0 and stand in front of a staticman_door_*. Example blocks underspecial_entities.
Risks / open
megatexturedModel = trueis present in all 4,533 Static placements of Kit parts. It is unknown whether a new instance requires data under a new name. Runtime unconfirmed.- Navmesh is only reusable (mapmanifest). AI runs only where there was already floor in c2v1. New floors and stairs are not walkable for AI.
- Lamp models are only meshes; the light comes from their own Light entities.
- Categories come from name patterns (Regex). Individual assignments are discretionary, such as
man_elevator_aunder "door" andman_blocker_a(74 × 199 × 18.5 m) under "other".
Tests (all executed, all green)
| Command | Checks | Result |
|---|---|---|
--selftest |
Name parser (cm/mm), axis assignment, pivot, edge contact including flat floors, categories | ok |
--check |
every model_resource and every cm_resource in Retail- and in dlc_0-Mount; size newly from vertices (±1.5 mm); name/size re-evaluated; unit_scale_cm newly from raw cm names; the $scale of cm = example_scale; example block places exactly this model; glassmodel names resolvable |
160/160, OK |
--check, built-in controls |
Fake model does not resolve; name+0.5 m is recognized; cm name without $simplify does not resolve |
all rejected |
--negative |
8 mutated kit.json copies (size, has_collision, unit_scale_cm, cm_scale, cm-name, example block, model name, name/size judgment) | 8/8 rejected, original accepted |