VerifiedBuild 2026.06.26.1097863.1, CU2

Blam tag data

Halo Campaign Evolved is not a Halo-themed Unreal game. It ships 12,328 genuine Blam tag files across 101 classic tag groups, wrapped one-per-Unreal-package. Rendering is fully Unreal: zero render_model tags and zero bitmap tags ship.

Simulation versus presentation

Blam owns

Bipeds, weapons, vehicles, projectiles, equipment, AI characters, squads, styles, animation graphs, collision models, physics models, skeletons, damage effects, sound definitions, Megalo, and multiplayer variant settings.

Unreal owns

Every mesh, material, texture, world, and visual effect. Object definitions bind to Blueprint actors, so an Elite is a Blam biped tag driving BP_EliteBipedActor.

The decisive check is the Elite model tag. It imports 16 packages and all 16 are Blam tags: collision model, physics model, skeleton model, animation graph, and shield effects. It references no mesh, no material, and no texture. The classic render chain was removed and replaced, while the simulation chain was kept intact.

How tags are packaged

All 28 IoStore containers are UE 5.5 TOC version 8, Oodle compressed, indexed, and not encrypted. The directory index lists 132,091 entries. There are no loose tag files and no .map cache anywhere in the install.

Entries under Content/Tags
24,618
Tag packages
12,328 (.uasset, 8.5 MiB)
Tag payloads
12,290 (.ubulk, 5,648.6 MiB)
Distinct tag groups
101

The Blam path objects\characters\elite\elite.biped becomes the Unreal package /Game/Tags/objects/characters/elite/elite-biped. The group separator changed from a dot to a hyphen because Unreal reserves the dot for object paths. The Unreal export is a thin 104-byte header; the 49,702-byte tag body lives in the bulk-data segment.

class = /Script/BlamSynchronization/BlamBipedTagDataAsset

BlamSynchronization declares 176 tag wrapper classes. 101 of them ship data. The render-side wrappers exist in the plugin but never ship instances.

Tag container format

Verified across 168 sampled payloads covering all 101 shipped groups. Every payload begins with a 0x4C-byte header, and header plus payload size equals chunk size in every sample.

OffsetFieldEvidence
0x30Group four-CC (bipd, weap, vehi, sbsp)Verified
0x34Small group-constant integerObserved
0x38Per-tag 32-bit valueObserved
0x3CBLAM signatureVerified
0x40tag! signatureVerified
0x48Payload size, equals chunk size minus 0x4CVerified
0x4CTag body beginsVerified

Shipped inventory

GroupFour-CCTags
soundsnd!5,895
effecteffe884
skeleton_modelskel460
modelhlmt451
collision_modelcoll424
physics_modelphmo421
squad_templatesqtm343
model_animation_graphjmad176
characterchar132
scenario_structure_bspsbsp122
weaponweap75
projectileproj61
bipedbipd32
vehiclevehi25
scenarioscnr13
render_modelmode0
bitmapbitm0

Level pipeline

312 tags live under a _Generated_ directory, and they are exactly the world geometry groups. The 13 generated scenario tags map one-to-one onto the 13 root Halo worlds under /Game/Levels/Halo1/Solo.

Generated groupCount
scenario_structure_bsp122
scenario_structure_lighting_info122
structure_design42
scenario13
structure_seams13
Hypothesis

Levels appear to be authored in Unreal, with the Blam scenario, BSP, seam, and soft-ceiling tags emitted from the Unreal world at cook time so the simulation gets its collision and structure representation. The _Generated_ directory name and the absence of any hand-authored scenario tag support this, but the cooker has not been observed.

Why the DLL is named tag_release

The host executable declares EBlamEngineBuildConfiguration with the members TagPlay, TagProfile, TagRelease, and TagTest. HaloSimulation_tag_release.dll is the TagRelease configuration. In classic Blam terminology a tag build consumes individual tag files rather than a compiled cache map, which matches the shipped data layout exactly.

Related: HaloSimulation_tag_release.dll.

Multiplayer relevance

319 multiplayer tags ship, of which 308 sit under game_variant_settings. Multiplayer globals, the object type list, the game engine settings definition, team names, random player names, Megalo, and Sandbox are all present as readable tag data rather than loose strings.

This does not prove a competitive mode is launchable. No multiplayer scenario tag and no competitive world package exists in this build, so a competitive map likely needs both an Unreal world and a matching generated Blam scenario and BSP set.

Related: Multiplayer viability.

Reproduce

The tooling is read-only against your own installed copy. UE 5.5 and newer statically link Oodle, so the game ships no oo2core DLL; any oo2core_9_win64.dll from a local Unreal Engine install works.

# Container headers
python tools/iostore/dump_index.py --paks $paks --summary

# Full path index
python tools/iostore/dump_index.py --paks $paks --ext-stats --out out/iostore_paths.tsv

# Verify the BLAM header on one payload per tag group
python tools/iostore/inspect_tags.py --paks $paks --oodle $oodle --per-group 1

# Resolve the Unreal class that owns a tag package
python tools/iostore/zen_class.py --paks $paks --oodle $oodle \
  --package "../../../Meteorite/Content/Tags/objects/Characters/Elite/elite-biped.uasset"

Tooling is checked in at tools/iostore. Extracted tag data is copyrighted game content. Keep it local and do not redistribute it.