Wolfenstein Modloader Buy me a coffeeKaffee spendieren

In plain wordsIn einfachen Worten

This survey lists the modular building pieces found in the DLC map c2v1 of Wolfenstein II: The New Colossus, to help build a custom map. For each of the 160 pieces it records the real measured size, where it is stored, whether it has collision, and an example placement. The data is checked by automatic tests, but whether new maps built from it actually work in the game is not confirmed.

  • 160 pieces: 41 walls, 40 floors, 22 ceilings, 15 props and more; 151 of them are stored in chunk_22.
  • 144 of 160 pieces have collision for their example placement; 16 have none.
  • Names can mislead: 27 pieces differ from their named size by more than 5 cm.
  • No door in c2v1 actually opens; all 45 door entities are invisible prompts.
  • New floors are not walkable for AI, because the navmesh can only be reused.

Diese Erhebung listet die modularen Bauteile der DLC-Karte c2v1 von Wolfenstein II: The New Colossus, um den Bau einer eigenen Karte zu erleichtern. Für jedes der 160 Teile sind die echte gemessene Größe, der Speicherort, die Kollision und ein Platzierungsbeispiel erfasst. Die Daten sind durch automatische Tests geprüft; ob daraus gebaute neue Karten im Spiel wirklich funktionieren, ist aber nicht bestätigt.

  • 160 Teile: 41 Wände, 40 Böden, 22 Decken, 15 Requisiten und mehr; 151 davon liegen in chunk_22.
  • 144 von 160 Teilen haben Kollision für ihre Beispielplatzierung; 16 haben keine.
  • Namen können täuschen: 27 Teile weichen um mehr als 5 cm von ihrer im Namen genannten Größe ab.
  • Keine Tür in c2v1 öffnet sich wirklich; alle 45 Tür-Objekte sind unsichtbare Hinweise.
  • Neue Böden sind für die KI nicht begehbar, weil das Navmesh nur wiederverwendet werden kann.

Technical detailsTechnische Details

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

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