Skip to content

Kitmap Kit Survey

LopeKinz edited this page Sep 26, 2026 · 1 revision

Kit-Survey c2v1: Components for a New Map

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 installed dlc/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_22 itself, not in base. Anyone rebuilding chunk_22 must retain these entries. Base contributes only 6 props from gameresources, servicetable_01 from chunkbase_6, neumond/floor_800x800cm_a from patch_2_chunkbase_6, and lab_pillar_a from chunk_9.
  • 109 components exist in c2v1 and have a real example block, copied from c2v1.entities via the byte-exact parser of build_custom_map. Another 51 components lie in the mount but are only placed by c2v2/c2v3. For them, example_entity: null applies.
  • 144 / 160 have collision for placement in the example. The example placement resolves exactly via the CmIndex.resolve rule. 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 except ceiling_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 as man_wall_200x400_b or New Moon walls like wall_600x600cm_*. Use these parts only as decoration or secure them with a func/collision_only box.

Entity-Defs that place

  • idStaticInstanceEntity / func/staticinstance: 4,533 placements of Kit parts. The example block contains renderModelInfo.model, optional scale, and clipModelInfo with CLIPMODEL_AUTO, clipModelName = model, contentsFilter, and includeInNav = false.
  • idGlassEntity / func/glass (41×, windows and glass walls): renders <model>.glassmodel and not the model entry. It collides with .glassmodel$…$part=N. man_partition_glass_c exists only as a glassmodel. Its size is not measured because the format is not decoded. Example block under special_entities.
  • idDynamicEntity / func/dynamic (35×, lamp models, one door).
  • Doors: c2v1 has no door that opens. All 45 door entities are invisible idProp2 Use-Prompts (prop/doors/unavaliable 40×, prop/doors/locked 5×). They have no model and CLIPMODEL_BOX 0.2 × 1.2 × 1.0 and stand in front of a static man_door_*. Example blocks under special_entities.

Risks / open

  • megatexturedModel = true is 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_a under "door" and man_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

Clone this wiki locally