Date: 2026-07-25 ~11:50 PM PST
Conversation ID: f74b07be-cdb9-4b3f-ac8b-b193380aa670
ποΈ Key Paths
| What | Path |
|---|---|
| Project repo | C:\haloce |
| Game install | C:\Program Files (x86)\Steam\steamapps\common\Halo Campaign Evolved |
| Game EXE | ...\Meteorite\Binaries\Win64\HaloCampaignEvolved.exe (230 MB) |
| Simulation DLL | ...\Meteorite\Binaries\Win64\HaloSimulation_tag_release.dll (14.6 MB) |
| PlayFab DLL | ...\Meteorite\Binaries\Win64\PlayFabMultiplayerWin.dll (1.8 MB) |
| Party DLL | ...\Meteorite\Binaries\Win64\PartyWin.dll (4.0 MB) |
| UE4SS install | ...\Meteorite\Binaries\Win64\ue4ss\ |
| UE4SS log | ...\ue4ss\UE4SS.log (255 KB, 3502 lines) |
| Pak files | ...\Meteorite\Content\Paks\ (40+ GB main chunk) |
| LogicMods | ...\Meteorite\Content\Paks\LogicMods\ (EMPTY β ready for BP mods) |
| Ghidra | C:\tools\ghidra_12.1.2_PUBLIC |
| Installed mods | ...\ue4ss\Mods\mods.txt |
NOTE: Historical
PenguinHotelreferences came from MECCHA Chameleon (a different game), NOT from Halo CE. The real game module name isMeteorite.
π₯π₯π₯ LATEST FINDING: Main EXE Reveals Full Architecture
String search on HaloCampaignEvolved.exe (completed as background task) revealed:
UE5 Plugin Structure (i343 = 343 Industries)
Plugins/i343/BlamEngine/Source/BlamEngine/Public/Objects/GameEngineTraits/BlamGameEngineVariant.h
Plugins/i343/BlamEngine/Source/BlamGlue/Public/UnrealGlue/Subsystems/BlamEngineGlueOuterSubsystem.h
Plugins/i343/BlamEngine/Source/BlamSynchronization/Private/Components/ObjectTypes/VehicleTypes/BlamVehicleFighterComponent.cpp
Plugins/i343/BlamEngine/Source/BlamSynchronization/Private/Components/ObjectTypes/VehicleTypes/BlamVehicleWithEngineComponent.cpp
Plugins/i343/BlamEngine/Source/BlamSynchronization/Private/DebugMenuWidgets/SBlamDebugMenuItemWidget.cpp
Plugins/i343/BlamEngine/Source/BlamSynchronization/Private/DebugMenuWidgets/SBlamDebugMenuWidget.cpp
Plugins/i343/BlamEngine/Source/BlamSynchronization/Public/BlamAnimNotify.h
Key UE5 Script Modules
/Script/BlamEngine β THE BLAM ENGINE UE5 PLUGIN MODULE
/Script/Meteorite β THE GAME'S OWN MODULE
/Script/MeteoriteOnlineServices β ONLINE SERVICES MODULE!
/Script/DataflowSimulation
FBlamEngineLauncher Class
FBlamEngineLauncher::RegisterShellOutputHandlerCallbacks()
- Has 4+ lambda callbacks for handling simulation output
Critical CVars / Config Variables
bDesireClangHaloSimulationDll β LOADS THE SIMULATION DLL!
bDisableBlamEngine β CAN DISABLE THE BLAM ENGINE
bEnableSimulation / bDisable... / bSuspendSimulation
bResetSimulation
bLockToSimulationFrameRate
bLiveSimulation / bLocalSimulation / bClientSimulation
bIsSimulationDirty
AdvanceSimulation / AdvanceSimulationByTime
CanTriggerResimulation
bEnablePhysicsResimulation
bEnableResimulationError*Threshold (Position, Rotation, AngularVelocity, LinearVelocity)
BlamAlertFatalSimulationError
BlamEngineTelemetry
Material Assets
/BlamEngine/Materials/M_BlamDebug.M_BlamDebug
KEY INSIGHT: Module Architecture
The game has THREE main script modules:
/Script/BlamEngineβ The Blam engine UE5 plugin (bridges UE5 β HaloSimulation DLL)/Script/Meteoriteβ The game-specific module (campaign logic, UI, etc.)/Script/MeteoriteOnlineServicesβ Online services (likely PlayFab/Party integration)
The BlamGameEngineVariant header file confirms: game engine variants (Slayer, CTF, etc.) are a first-class concept in the UE5 plugin layer, not just in the simulation DLL.
π₯ BIGGEST FINDING: Complete Halo Multiplayer Engine
HaloSimulation_tag_release.dll
Single export: CreateBlamEngineShell β factory function that creates the entire Halo "Blam" engine simulation shell.
Imports: KERNEL32, USER32, WS2_32 (Winsock networking!), DINPUT8, xinput1_4, ADVAPI32, bcrypt, dbghelp, ole32, WINMM, MSVCP140, VCRUNTIME140
Contains ALL classic Halo multiplayer game modes (verified via string extraction):
Game Modes Found
- Slayer β top level options, primary options, advanced options, scoring options, leader traits (appearance/movement/sensors/shields/weapons)
- CTF β top level, primary, advanced options, carrier traits (full set)
- Oddball β top level, primary, advanced, carrier traits
- King of the Hill β top level, primary, advanced, hill traits
- Infection β top level, primary, scoring, advanced options
- Juggernaut β top level, primary, advanced, juggernaut traits
- Assault β top level, primary, advanced, assault bomb
- Territories β top level, primary, advanced
Engine Systems Found
game_engine_respawn_options_block / flags
game_engine_team_options_block / team_block / team_flags
game_engine_team_options_designator_switch_type
game_engine_team_options_model_override_type
game_engine_team_options_player_model_choice
game_engine_player_traits_block / list_block
game_engine_loadout_options_block
game_engine_loadout_palette_entry_block
game_engine_map_override_options_block / flags
game_engine_miscellaneous_options_block / flags
game_engine_social_options_block / flags
game_engine_sandbox_variant_block
game_engine_survival_variant_block / flags / additional_flags
game_engine_survival_round_properties_block
game_engine_survival_wave_properties_struct
game_engine_survival_bonus_wave_properties_struct
game_engine_survival_custom_skull_block
game_engine_campaign_variant_block
game_engine_ai_traits_struct / list_block
game_engine_settings / settings_definition / flags
game_engine_event_block (audience, input, response_context, flags)
game_engine_simulation_dependency_flags
game_engine_status_response_block
game_engine_request_boot_player
game_engine_globals / globals_block
Megalo Scripting Engine
megalo_chud_message
<megalo omni widget> (augmentation icon, available, label, meter, value string)
chud_megalo_datasource_omni_widget_label / value
chud_megalo_progress_bar_label
CS:Megalo Globals
Respawn System
game_engine_respawn_options_block / flags
debug_player_respawn
debug_respawn_point_objects
debug_spawning_respawn_zones
debug_initial_spawn_point_objects
coop respawn effect / sound
fireteam 1-4 respawn zone
spartan_respawn_* (30+ traits)
elite_respawn_* (same full trait set)
disable spartan/elite respawn on backfield/player
Loadout System
spartan_loadouts_tier[1-3]_loadout[0-4]: enabled, name, primary, secondary, equipment, grenades
elite_loadouts_tier[1-3]_loadout[0-4]: same structure
Forge System
forge_object_properties (physics, shape, team, symmetry, spawn_at_start, spawn_time, etc.)
forge_object_edit_coords (x, y, z, pitch, yaw, roll)
default_map_variant_save_description_format / name_format
debug_multiplayer_object_properties
PlayFabMultiplayerWin.dll β Full Matchmaking API
/Lobby/CreateLobby, /Lobby/JoinLobby, /Lobby/JoinLobbyAsServer
/Lobby/JoinArrangedLobby, /Lobby/FindLobbies, /Lobby/FindFriendLobbies
/Lobby/InviteToLobby, /Lobby/UpdateLobby, /Lobby/LeaveLobby
/Lobby/RemoveMember, /Lobby/DeleteLobby, /Lobby/GetLobby
/Match/CreateMatchmakingTicket, /Match/CancelMatchmakingTicket
/Match/CancelAllMatchmakingTicketsForPlayer, /Match/CancelServerBackfillTicket
Classes: LobbyImpl, LobbyManager, MatchmakingManager, MatchmakingTicketImpl
State changes: PFLobbyStateChange, PFMatchmakingStateChange
API domain: .playfabapi.com
PartyWin.dll β P2P Networking + Voice Chat
BumblelionNetwork, Endpoint/EndpointModel, ChatControl/ChatManager
QoS: ListPartyQosServersRequest/Response
Party: RequestPartyRequest/Response
Voice: IXAudio2VoiceCallback, SourceVoice
Transport: WebSocket (MessageWebSocket)
π₯οΈ UE4SS Log Analysis (key findings from 3502 lines)
Blueprint Classes at Frontend
- BP_FrontendPlayerController:
PushPlayerTraitsToServer,ServerSetDesiredPlayerTraits,ClientRequestForPlayerTraitsFromServer - BP_FrontendGameMode:
OnXsapiStart(Xbox Services API) - BP_FrontendGameState:
ResetClientLobbyData,StartCountdown,CancelCountdown - BP_FrontendHUD:
IsSplitscreenPlayer,InitializeSplitscreenLayoutAndInput,FireteamWidgetAddref/Removeref,OpenWidgetByName/CloseWidgetByName - SpectatorPawn was also found loaded
UE4SS Config (what's enabled)
- Engine version: 5.5
- HookManagerEnabled = 0 (custom hooks disabled in config)
- All major hooks enabled (ProcessInternal, LoadMap, BeginPlay, EndPlay, EngineTick, etc.)
- BPModLoaderMod enabled, LogicMods dir is empty and ready
π Game File Structure
Meteorite/Binaries/Win64/
βββ HaloCampaignEvolved.exe (230 MB)
βββ HaloSimulation_tag_release.dll (14.6 MB) β BLAM ENGINE
βββ PlayFabMultiplayerWin.dll (1.8 MB) β MATCHMAKING
βββ PartyWin.dll (4.0 MB) β P2P + VOICE
βββ libHttpClient.Win32.dll (258 KB) β HTTP
βββ dwmapi.dll (71 KB) β UE4SS PROXY
βββ boost_*.dll, tbb*.dll, amd_*, OpenColorIO β Dependencies
βββ D3D12/, DML/ β DirectX 12
βββ ue4ss/ β UE4SS
βββ Mods/ (MJOLNIRFlyCam, DumpCommandsMod, CheatManager, Console, BPModLoader, Keybinds)
βββ UE4SS_Signatures/
Meteorite/Content/Paks/
βββ LogicMods/ (EMPTY β ready for BP mods!)
βββ pakchunk0 (40+ GB main content)
βββ pakchunk1-10 (~330 MB each, likely campaign levels)
βββ pakchunk115-530 (additional content chunks)
π§ Commands Run (for reproduction)
String Extraction from HaloSimulation DLL
$bytes = [IO.File]::ReadAllBytes("...\HaloSimulation_tag_release.dll")
$text = [System.Text.Encoding]::ASCII.GetString($bytes)
$matches = [regex]::Matches($text, '[\x20-\x7E]{8,}')
$strings = $matches | ForEach-Object { $_.Value }
# Game modes
$strings | Where-Object { $_ -match '^(slayer|ctf|oddball|king|assault|infection|territories|juggernaut)' } | Sort-Object -Unique
# Engine systems
$strings | Where-Object { $_ -match '^game_engine_' } | Sort-Object -Unique
# Teams/respawn/damage/kill
$strings | Where-Object { $_ -match 'team|respawn|slayer|ctf|game_engine|game_variant|round|score|multiplayer|kill|death|damage' } | Sort-Object -Unique | Select-Object -First 100
String Extraction from Main EXE
$bytes = [IO.File]::ReadAllBytes("...\HaloCampaignEvolved.exe")
$text = [System.Text.Encoding]::ASCII.GetString($bytes)
$matches = [regex]::Matches($text, '[\x20-\x7E]{8,}')
$strings = $matches | ForEach-Object { $_.Value }
$strings | Where-Object { $_ -match 'BlamEngine|HaloSimulation|Simulation|GameVariant|MapVariant|game_engine|Meteorite' } | Sort-Object -Unique
PE Export Analysis
# Result: Single export "CreateBlamEngineShell"
# Imports: KERNEL32, WS2_32, DINPUT8, xinput1_4, etc.
π― WHAT TO DO NEXT (Priority Order)
1. π΄ Deep EXE String Search (HIGH PRIORITY)
Run more targeted string searches on the main EXE:
# Search for BlamEngine UE5 class names
$strings | Where-Object { $_ -match 'Blam[A-Z]' } | Sort-Object -Unique
# Search for /Script/ module paths
$strings | Where-Object { $_ -match '^/Script/' } | Sort-Object -Unique
# Search for /Game/ asset paths (maps, blueprints)
$strings | Where-Object { $_ -match '^/Game/' } | Sort-Object -Unique
# Search for game variant related
$strings | Where-Object { $_ -match 'Variant|GameMode|GameType' } | Sort-Object -Unique
# Search for multiplayer/online
$strings | Where-Object { $_ -match 'Multiplayer|OnlineService|Matchmak|Lobby|PlayFab' } | Sort-Object -Unique
2. π΄ Ghidra Analysis of HaloSimulation DLL (HIGH PRIORITY)
Use C:\tools\ghidra_12.1.2_PUBLIC to:
- Analyze
CreateBlamEngineShellβ what vtable/interface does it return? - Find multiplayer game engine initialization paths
- Check if
game_engine_slayeretc. are function tables or just data - Trace the respawn system entry points
3. π΄ UE4SS Discovery: Find BlamEngine Classes (HIGH PRIORITY)
Create a Lua mod that:
-- Find ALL /Script/BlamEngine objects
local objects = FindAllOf("Object")
-- Search for: BlamGameEngineVariant, BlamEngineGlueOuterSubsystem
-- Search for: anything in /Script/Meteorite, /Script/MeteoriteOnlineServices
-- Try: StaticFindObject("/Script/BlamEngine.Default__BlamGameEngineVariant")
4. π‘ Console Commands to Try In-Game
stat BlamEngine
stat Simulation
BlamEngine.DisableBlamEngine 0
BlamEngine.ResetSimulation
BlamEngine.AdvanceSimulation
5. π‘ Extract Pak File Contents
Need UnrealPak or Python pak reader to list asset paths
6. π’ Enable SplitScreenMod
Test if Ctrl+Y spawns a second player with independent control
π‘ Architecture Theory (UPDATED with EXE findings)
HaloCampaignEvolved.exe (UE5)
βββ /Script/Meteorite β Game module (campaign, UI)
βββ /Script/BlamEngine β UE5βBlam bridge plugin
β βββ FBlamEngineLauncher β Loads simulation DLL
β β βββ RegisterShellOutputHandlerCallbacks()
β βββ BlamGameEngineVariant β GAME MODE VARIANT CONFIG
β βββ BlamEngineGlueOuterSubsystem β Glue layer
β βββ BlamSynchronization β UE5βBlam state sync
β β βββ BlamVehicleFighterComponent
β β βββ BlamVehicleWithEngineComponent
β β βββ BlamAnimNotify
β β βββ SBlamDebugMenu*
β βββ M_BlamDebug (debug material)
βββ /Script/MeteoriteOnlineServices β PlayFab/Party wrapper
βββ /Script/DataflowSimulation β Physics
HaloSimulation_tag_release.dll (Blam Engine)
βββ CreateBlamEngineShell() β Single export entry point
βββ Game Modes: Slayer, CTF, Oddball, KOTH, Infection, Juggernaut, Assault, Territories
βββ Megalo scripting engine
βββ Forge/Sandbox system
βββ Respawn system
βββ Team system
βββ Loadout system (Spartan/Elite, 3 tiers, 5 loadouts each)
βββ WS2_32 networking (own net layer)
Superseded 2026-07-26:
BlamGameEngineVariantis present as a source/header identifier, but it is not an exposed runtime class in this build. UE4SS and binary-name scans instead exposeBlamGameEngineBaseVariantandBlamGameEngineCampaignVariant.
2026-07-26 Follow-Up: CU2 Static Analysis
This section records checks performed after the original session. It supersedes the placeholder map and travel assumptions above where they conflict.
Build Lock
| Artifact | Verified value |
|---|---|
| Host version | 2026.06.26.1097863.1-Rel-i343-Meteorite-2606-CU2 |
| Host SHA-256 | 0670FAA751E2553940B90DF6BE43D3B0FF59EA87F22155CF3C3FE9D439367F1D |
| Simulation SHA-256 | 8EE1A37F6F0BC89241F47946546EDCA798962F81E2D06B386196BC75DE991705 |
Packed Map Inventory
Verified: all 28 IoStore indexes and all 27 companion pak indexes were listed without extracting game content.
- IoStore format: UE5.5
ReplaceIoChunkHashWithIoHash, indexed, Oodle-compressed, not encrypted. 132,091unique IoStore paths.14,240.umapchunks, mostly World Partition generated cells.77named.umappaths after excluding generated/external-actor maps.13root Halo world packages, all underLevels/Halo1/Solo.- No
Levels/Halo1/Multibranch and no named multiplayer world package. - No Blood Gulch, Beaver Creek, Sidewinder, or other classic Halo CE multiplayer map name.
- Eleven apparent CTF/KOTH
.umaphits were random generated cell IDs containing those letters. - The pak indexes contain
200,029entries, predominantly Wwise audio/resources, and no Unreal map or asset package entries.
The currently indexed root world paths include:
/Game/Levels/Halo1/Solo/A15/A15
/Game/Levels/Halo1/Solo/A30/A30
/Game/Levels/Halo1/Solo/A50/A50
/Game/Levels/Halo1/Solo/B30/B30
/Game/Levels/Halo1/Solo/B40/B40
/Game/Levels/Halo1/Solo/C10/C10
/Game/Levels/Halo1/Solo/C20/C20
/Game/Levels/Halo1/Solo/C45/C45
/Game/Levels/Halo1/Solo/D20/D20
/Game/Levels/Halo1/Solo/D40/D40
/Game/Levels/Halo1/Solo/Extra/E10/E10
/Game/Levels/Halo1/Solo/Extra/E20/E20
/Game/Levels/Halo1/Solo/Extra/E30/E30
Conclusion: no hidden competitive map package was found in this build. This does not rule out dormant competitive gameplay code or assets.
Retained Multiplayer Content
Verified: the path index contains 713 files under explicit multiplayer directories and 616
paths under Tags/multiplayer/game_variant_settings.
Examples include multiplayer globals, object type lists, team names, messages, respawn sounds, map overrides, social options, custom Spartan/Elite loadouts, Megalo, Sandbox, the Oddball weapon, and assault-bomb content. These are stronger evidence than raw strings, but they still do not prove that the shipping UI or UE5 bridge exposes a competitive launch path.
Refined 2026-07-26: those counts mixed
.uassetheaders with their.ubulkpayloads. Counting tags rather than index entries, the build ships319multiplayer tags, of which308are underTags/multiplayer/game_variant_settings. The content is real Blam tag data, not strings. Seetag_data_pipeline.md.
CreateBlamEngineShell Result
Verified by Ghidra decompilation: the export behaves as:
bool CreateBlamEngineShell(void* context, void** outShell);
It allocates a 0x5A0-byte, 0x20-aligned shell object, installs two nine-entry interface tables,
initializes lock-free event queues, replaces the process-global shell, writes outShell, and returns
1. The second interface is embedded at this + 0x140 and implements queued shell-output dispatch.
The matching UE5 executable constructs the basename HaloSimulation, loads the module into launcher
offset 0x1A0, resolves CreateBlamEngineShell, writes the result to launcher offset 0x1C8, and
immediately invokes shell interface slot 1.
See halosimulation_tag_release.md for the dedicated analysis.
Live UE4SS Discovery
Verified at runtime: MJOLNIRDiscovery loaded and registered its commands on the CU2 build. A
frontend scan at 2026-07-26T08:08:33Z produced 300 unique matching entries:
- 279 reflected
/Script/BlamEnginefunctions. - 20 reflected
/Script/MeteoriteOnlineServicesfunctions. - One live
BlamEngineGlueOuterSubsystemImplunder the transientGameEngineobject.
The generic paths /Script/BlamEngine.BlamGameEngineVariant and
Default__BlamGameEngineVariant were not found. The reflected variant surface is:
BlamGameEngineBaseVariant:GetSocialOptions
BlamGameEngineBaseVariant:SetSocialOptions
BlamGameEngineCampaignVariant:GetFlags
BlamGameEngineCampaignVariant:SetFlags
BlamGameEngineCampaignVariant:GetPerPlayerTraits
BlamGameEngineCampaignVariant:SetPerPlayerTraits
Verified reflected multiplayer helpers:
BlamSynchronizationHelperLibrary:ActorTeamIsAlly
BlamSynchronizationHelperLibrary:ActorTeamIsEnemy
BlamSynchronizationHelperLibrary:ActorTeamIsFriendly
BlamSynchronizationHelperLibrary:ActorTeamIsTraitor
BlamSynchronizationHelperLibrary:FindPlayerStateUsingBlamAbsolutePlayerIndex
BlamSynchronizationHelperLibrary:ResolvePlayerStateUsingBlamAbsolutePlayerIndex
BlamSynchronizationHelperLibrary:ResolvePlayerStateUsingBlamInputUserIndex
BlamEngineAudioGameSubsystem:IsNetworkCoop
The broader reflected function dump also exposes /Script/BlamNetworkSession, including
BlamOnlineSessionSubsystem:IsReadyToPlay, replicated session-running state, endpoint IDs, and
primary-player IDs. Standard create/find/join session proxies and PlayFab create/join/leave lobby
functions are reflected as well.
The first world scan reported zero because its case-sensitive UI path filter used levels while the
live package path uses Levels. This is a scanner defect, not evidence that no frontend world was
loaded; the filter now normalizes case and records every live World object.
Second runtime pass (A30 loaded):
725matching reflected functions and targeted objects were recorded.- Static lookup verified the classes and CDOs for
BlamGameEngineBaseVariant,BlamGameEngineCampaignVariant, andBlamOnlineSessionSubsystem. - Four live
BlamGameEngineCampaignVariantobjects existed. One was owned byMeteoriteGameInstance.BlamCampaignFlowGameSubsystem; three were transient copies. - The world scan found
91worlds:/Game/Levels/Halo1/Solo/A30/A30plus 90 generated World Partition cell worlds. - All 14 initial session/lobby/travel hooks registered at runtime, but zero hook callbacks fired before the A30 state snapshot. Observed: those reflected wrappers were not invoked during the traced interval. Unverified: tracing may have started after an earlier session transition, or the official flow may use native paths beneath these wrappers.
The next probe adds pre/post hooks for Blam endpoint assignment and campaign-flow transitions and a reflected state snapshot for the active variants and network components.
Third runtime pass: controlled frontend-to-A30 solo baseline
The tester confirmed that no second human player was connected. This pass must not be cited as a co-op capture.
At the frontend (2026-07-26T08:32:56Z):
- No live
BlamGameEngineBaseVariantorBlamGameEngineCampaignVariantinstances. BlamNetworkGameStateComponent.bSessionRunning = false.- One frontend
BlamNetworkPlayerStateComponentwith endpoint generation0and both endpoint IDs equal to0. MeteoriteSquadLobbyViewModel.TotalPlayerCount = 1andbCrossPlayEnabled = false.
At 01:33:45, the only captured lifecycle callback fired:
BlamCampaignFlowGameSubsystem:SetActiveCampaign
After A30 loaded (2026-07-26T08:33:58Z):
CurrentCampaignresolved to/Game/Blueprints/Campaign/DA_FirstPlayableCampaign.DA_FirstPlayableCampaign.- Four
BlamGameEngineCampaignVariantinstances appeared; the campaign-flow subsystem owned one. - The root world was
/Game/Levels/Halo1/Solo/A30/A30, accompanied by 85 generated World Partition cell worlds in this run. - The mission GameState component still reported
bSessionRunning = false. - Two PlayerState network components existed. This is object/component count, not evidence of two connected players.
- Both components had endpoint generation
1, but in-channel and out-of-band endpoint IDs remained0. - Lobby player count remained
1;bCrossPlayEnabledchanged totrue.
Verified interpretation: endpoint generation advancing from 0 to 1 occurs during ordinary
solo campaign activation and does not prove a peer endpoint exists. Likewise, cross-play enablement
is configuration state, not proof of a remote player. A real co-op baseline requires another human
present and should show which of readiness, session-running, endpoint IDs, squad count, or player
components diverge from this solo capture.
Current boundary: a second human tester is not presently available. Competitive-mode activation,
session preservation across custom travel, and the solo-versus-co-op state differential remain
Unverified; do not infer them from the solo baseline. Static analysis and single-process runtime
work can continue independently.
Native Reflection Follow-Up
AnalyzeMultiplayerRuntime.java was run against the matching CU2 host executable. It recovered 112
identifier/reference records and 15 owning functions.
Verified:
BlamNetworkPlayerStateComponentis registered as a0xF8-byte reflected class.- In-channel endpoint ID, out-of-band endpoint ID, and endpoint generation are separately registered reflected properties.
bSessionRunninghas concrete reflected registration paths on the network GameState component.ServerSetBlamEndpointIdsandServerSetPrimaryPlayerIdhave distinct native name/registration initializers.
Observed limitation: direct name xrefs primarily reach Unreal reflection registration code, not
the underlying method implementations. IsReadyToPlay, IsNetworkCoop, SetActiveCampaign, and
CampaignVariantStorage names did not expose direct implementation xrefs. The deployed runtime probe
therefore calls readiness, network-coop, squad-count, and campaign-variant getters directly on the
live objects and attempts to enumerate the variant storage struct.
Correction: MJOLNIRMultiplayer Is an Experiment
The Lua mod does not create or advertise a session. The placeholder URLs and PenguinHotel fallback
were replaced on 2026-07-26 with verified CU2 world paths and player-controller console dispatch.
mjolnir_travel <map> and mjolnir_listen <map> remain unverified until exercised in HCE.
Runtime discovery commands added in the same pass:
mjolnir_scan_blam
mjolnir_scan_worlds
mjolnir_trace_network
mjolnir_dump_state
Revised Experiment Order
- Run
mjolnir_trace_networkbefore creating or joining an official campaign co-op session. - Run
mjolnir_dump_statein the frontend and again after the mission loads; compare the active campaign variant and Blam network component properties. - Reuse the official campaign co-op flow, then test travel to a verified campaign package.
- Trace shell primary slots 2 and 3 to identify the startup/game-variant structure.
- Activate a competitive variant before attempting custom-map cooking.
- Add team spawns, flag stands, boundaries, and objectives to an existing campaign world at runtime.
- Only then cook a tiny UE5.5 test world and package it as pak/utoc/ucas.
2026-07-26 Follow-Up: Tag Data Pipeline
The game runs on real Blam tag data. 12,328 tag files across 101 classic tag groups ship inside
the IoStore containers, each as an Unreal package whose bulk-data segment is a raw Blam tag file
carrying the BLAM signature. Rendering is fully Unreal: zero render_model and zero bitmap tags
ship, and object definitions bind to Blueprint actors such as BP_EliteBipedActor.
This matters for multiplayer work in three ways:
game_engine_settings-game_engine_settings_definition,globals-multiplayer_object_type_list,multiplayer_globals-multiplayer_globals, and308game_variant_settingstags are dumpable and readable. They should be decoded before further runtime probing, because they define what the simulation believes is available.- There is still no multiplayer
scenariotag. All13scenarios are generated from the solo Unreal worlds under_Generated_, alongside their BSP, seam, lighting, and soft-ceiling tags. - A competitive map likely requires both an Unreal world and a generated Blam scenario/BSP set. Cooking a world alone is probably insufficient.
Full analysis and reproduction: tag_data_pipeline.md.