This is the orientation map for V4 — the page to read before any deep
architecture page, so that every later reference to "the V4Tactical module,"
or "the V4Mode_Stealth_Hitman plugin," or "the tournament-server target" lands
on a name you already trust. V4 is a single Unreal Engine 5.5 tactical-action
game whose ambition is per-cell feel: one shared roster and online backbone,
with tactical-FPS, real-time-stealth-tactics, action-RPG, RTS, and 2D
run-and-gun gameplay layers swapped in as plugins. Its module split is not
cosmetic packaging — it exists so that each cell's gameplay can be authored,
compiled, and cooked in isolation behind an explicitly declared, acyclic
dependency graph, and so that a frame-critical system (combat authority, RTS
lockstep) stays in C++ rather than Blueprint. The single source of truth is the
engine project at V4/ue/: its .uproject enumerates 28 C++ modules and
force-enables a curated set of engine and project plugins, and every module
under V4/ue/Source/ carries its own *.Build.cs declaring exactly what it
links. This page reconciles that on-disk reality with the prose glossary in the
architecture monolith, and names the surrounding Rust services and web surfaces
the game talks to. It is the companion to the catalogue at
../V4_ARCHITECTURE.md.
The reason to read the code rather than the glossary table is that, even when
a table is mostly right, the load-bearing edges are where it drifts. V4 is the
happy case: its 27-row "engine modules" glossary maps one-to-one onto real
Source/ directories — there are no spec-only modules here, unlike V2. But the
dependency table understates several real edges, the build targets do far less
than the determinism prose implies, and the "GameFeatures hot-swap" framing
describes an aspiration the plugins only partly realize. Where the map and the
territory disagree, this page treats the .uproject and the Build.cs files as
authoritative and says so each time — an honest "the table omits this edge" is
worth more than a confident restatement the compiler would expand differently.
What ships, honestly#
Real and on-disk (the compiler agrees): the 28 module directories under
V4/ue/Source/ are all present, each with a *.Build.cs, a
Public//Private/ split, and a module class; the .uproject Modules array
lists the matching 28 names (verified: 28 source directories == 28 .uproject
entries). The 27 glossary engine-module names (V4Core … V4Tests) map exactly
onto 27 of those directories; the 28th is the V4 primary game module, which
the glossary table omits but the Project Layout names. No module is a
three-file skeleton — even the leanest (V4Crowd, V4VFX, V4Telemetry,
V4Procgen, ~4 source files each) ship a real U*Subsystem plus a *Types.h,
not just a .cpp/.h/.Build.cs stub. The depth is concentrated where the
genre needs it: V4OnlineServices (34 source files), V4Tactical (24),
V4ActionRPG and V4RTS (22 each), V4Core and V4Netcode (19), with 461
.cpp+.h files across the 28 modules and a V4Tests module holding 90
automation specs (AttributeSetSpec, CoverSpec, CoDWarzoneSpec,
CommandosSpec, ContractScheduleSpec, AIDirectorSpec, …). The cell plugins
are real code, not content shells: the 28 enabled V4Mode_* plugins carry
their own runtime C++ modules totalling ~234 authored .cpp+.h files
under V4/ue/Plugins/ (the gitignored UHT codegen under Intermediate/Build is
not counted).
Glossary and layout drift (found by reading the disk), labelled:
- The Module Split table is directionally correct but understated. Every
cross-module
V4*edge it lists is real in theBuild.csfiles, and the graph is acyclic as claimed. But it omits the GAS plugin dependencies (GameplayAbilities,GameplayTags) that nearly every cell module actually links, omitsV4UI → V4StealthandV4Editor → {V4Schedules, V4Tactical}entirely, and drops a long tail of engine deps (RenderCoreon Core,Json+ReplicationGraph+OnlineSubsystemon Netcode,GeometryCollectionEngineon Vehicles,MotionWarpingon Animation,GameFeatureson Modes,UMGon Schedules). - The cells are modular C++ plugins, not V3-style content-only
GameFeatureData. Each
V4Mode_*.uplugindeclares aRuntimemodule that depends onV4Core,V4Modes, and its cell module. But they are force-enabled by the project ("EnabledByDefault": falsein the.uplugin,"Enabled": truein the.uproject), notExplicitlyLoadedruntime-toggled features — so the "hot-swap" framing is aspirational. The activation machinery is nonetheless real C++:V4ModesshipsUV4GameFeatureAction_ActivateModeAssetsand aV4ModeSubsystem. - The three build targets are minimal.
V4.Target.cs(Game),V4Editor.Target.cs(Editor), andV4TournamentServer.Target.cs(Server) set onlyBuildSettingsVersion.V5, the include-order version, andExtraModuleNames.Add("V4"). None setsbUseUnityBuild = false, strict floating-point flags,DETERMINISM=*defines, aPreBuildStep, or per-platform module stripping. The monolith's "stripping is.Target.csdriven" and its determinism posture are aspirational at the target layer; determinism logic lives insideV4Netcode/V4RTS, not stamped by the target as in V2/V3. - There is no
V4Serversource module. The Project Layout'sSource/V4Server/does not exist; the dedicated-server build is theV4TournamentServertarget, which adds four broadcast defines (V4_TOURNAMENT_BUILD,V4_BROADCAST_TOOLS,V4_OBSERVER_CAMERAS,V4_PAUSE_ON_DISCONNECT) and no extra source. - V4 has no TypeScript/contracts/libs footprint. There is no
libs/v4, nolibs/contracts/src/v4, noapps/v4, and no web tile underapps/oshun/web/.../v4. V4 is self-contained underV4/; its backend is a compact three-crate Rust workspace, not the nine services the layout lists. - V4 ships essentially no binary content — exactly one
.uasset/.umapin the whole tree. It is a C++ logic skeleton; theContent/trees and the top-level data directories (balance/,modes/,maps/,codex/, …) are JSON authoring data, not cooked assets.
Everything below is grounded in those files; where a claim is the glossary's intent rather than shipped code, it is labelled.
The module graph as it is built#
Unlike V2 and V3, V4 does not hoist any module into the PreDefault loading
phase: all 28 modules load at Default except V4Editor (Editor type,
PostEngineInit) and V4Tests (DeveloperTool). Reading every *.Build.cs
and extracting the V4* dependencies yields a clean directed acyclic graph
whose single sink is V4Core — the monolith's "no circular deps" claim holds in
code. The diagram below is the graph as actually declared (engine-plugin deps
elided), grouped by concern.
V4Audio, V4VFX, V4Cinematics, V4Persistence, V4OnlineServices,
V4Telemetry, and V4Procgen each depend on V4Core only (plus engine
plugins), so they are leaves and are omitted from the diagram for clarity.
V4Tests sits above everything — its Build.cs depends on all runtime
modules and the V4Mode_* plugins, which is why the automation harness can
exercise any cell.
The thin composition root: the V4 module#
The module named simply V4 (V4/ue/Source/V4/, six files) is the only module
the Game, Editor, and Server targets name via
ExtraModuleNames.Add("V4"). But unlike V2's composition root — which fused the
spine by hard-depending on combat, modes, and netcode — V4's V4 module
depends on no V4* module at all; its Build.cs lists only Core,
CoreUObject, Engine, GameplayTags, InputCore. It is a thin bootstrap:
UV4BootstrapSubsystem (a UGameInstanceSubsystem that resolves the boot map
and platform config root) and V4GameplayTagsManager. The gameplay spine is
pulled in instead by the cell plugins (each depends on its cell module) and by
V4Tests. So the "primary game module" is a launcher, and the real fusing
happens through the modular-plugin layer rather than a monolithic root.
The per-cell plugins carry real code#
The 28 enabled V4Mode_* plugins live directly under V4/ue/Plugins/ (not
under a Plugins/GameFeatures/ subfolder as in V3). Each is a code+content
plugin: a .uplugin declaring a Runtime module, a Source/ tree, and a
Content/ tree. Their depth tracks the cells' complexity —
V4Mode_Tactical_CoDWarzone (26 .cpp), V4Mode_Stealth_SplinterCell (20),
V4Mode_Tactical_CoDMultiplayer and V4Mode_Stealth_SpiesVsMercs (18 each),
the three RavenShield/R6Modern/CoDCampaign tactical plugins (16 each) — while
the lighter modes (V4Mode_ARPG_Wukong, V4Mode_Arcade_Contra, …) carry ~10. A
typical Build.cs (V4Mode_ARPG_Wukong) depends on V4Core, V4Modes,
V4ActionRPG plus GameplayTags — i.e. the plugin binds a cell module to the
mode-registration layer. Two artifacts are present that the glossary's plugin
table omits: V4Mode_Crossover_ShadowWar (a real, enabled, 6-file crossover
mode) and V4Tools_DataLinter (an editor linter alongside the documented
V4Tools_AssetLinter). Four V4DLC_* plugins (ADR_CommunityRemix01,
ADR_ParodyPack01, Campaign_Season01_Blacksite, Operator_Season01_Nyx)
exist on disk but are content-only (zero .cpp) and not enabled in the
.uproject — they are season-DLC containers, not runtime code.
The module map, by concern#
The 28 modules group into seven concerns. Dependency notes below are the
verified Build.cs contents; where they exceed the Module Split table, that
is the drift called out above.
Foundation. V4Core (19 files) is the sink of the graph — engine
subsystems, the gameplay-tag registry, save scaffolding, dev cheats. It links
Core/CoreUObject/Engine/InputCore/RenderCore/Slate/SlateCore and
no V4* module.
GAS spine. V4Gameplay (15) is the ability-system layer
(GameplayAbilities, GameplayTags, GameplayTasks). V4Animation (10) adds
AnimGraphRuntime, PoseSearch, Mover, Chooser, MotionWarping. V4Input
(14) wraps EnhancedInput. V4Netcode (19) is the networking core
(NetworkPrediction, Iris, ReplicationGraph, OnlineSubsystem, Json) and
hosts the client-server, deterministic-lockstep, and rollback-prediction paths.
V4Modes (14) is the mode registry — ModularGameplay + GameFeatures +
Json — and owns UV4GameFeatureAction_ActivateModeAssets and
V4ModeSubsystem.
Per-cell gameplay (Tier 2). Six mutually-exclusive cell modules:
V4Tactical (24) for FPS aim/ADS/recoil/cover; V4Stealth (16) for
light/shadow/disguise; V4Tactics (16) for the RTST command queue and
time-stop; V4ActionRPG (22) for souls-like stamina/parry/posture; V4RTS (22)
for economy/build-orders/fog-of-war (the only cell that depends on V4Netcode,
for lockstep); and V4Arcade (18) for the 2D run-and-gun layer over Paper2D.
Every cell also links GameplayAbilities/GameplayTags (the table omits this).
Perception, crowd, schedules. V4Perception (10) is the unified
sight/sound/suspicion model (AIModule, NavigationSystem). V4Crowd (4) is
the Mass-ECS crowd layer — lean in files but linking six Mass modules
(MassEntity, MassNavigation, MassAIBehavior, MassMovement,
MassReplication, MassSignals). V4Schedules (12) layers NPC daily routines
over both (V4Crowd, V4Perception, plus UMG).
Presentation. V4UI (17) is the CommonUI/MVVM front-end — and it depends on
V4Stealth (for stealth-gauge HUD), an edge the table omits. V4Audio (12,
MetaSounds), V4VFX (4, Niagara), and V4Cinematics (8, Sequencer +
MovieRenderPipeline, with Sequencer editor-gated) round out the A/V layer.
Online, persistence, telemetry, world. V4OnlineServices (34, the deepest
module — OnlineServicesInterface/Common, EOSShared), V4Persistence (18,
Serialization), V4Telemetry (4, HTTP+Json), V4Vehicles (10,
ChaosVehicles + GeometryCollectionEngine, and the P3 sports-vehicle
registry), V4Procgen (4, PCG), and V4LevelOps (8, NPC-schedule and
environmental-kill authoring over V4Schedules).
Tools, editor, tests. V4Editor (5,
UnrealEd/EditorSubsystem/ToolMenus plus V4Schedules and V4Tactical) is
the in-editor mission/contract tooling; V4Tests (96 files) is the automation
and gauntlet harness.
Build targets and the determinism gap#
Three *.Target.cs files exist: V4 (Game), V4Editor (Editor), and
V4TournamentServer (Server). All three are minimal — they set the
build-settings version, include-order version, and the single V4 extra module,
and the server target additionally disables developer tools and adds its four
broadcast defines. What they conspicuously do not do is what V2's and V3's
targets do: there is no bUseUnityBuild = false, no /fp:strict /
-fno-fast-math strict-FP block, no DETERMINISM/V4_STRICT_FP defines, no
PreBuildStep, and no platform stripping of
V4Mode_Tactical_CoDWarzone/R6Modern. So the architecture's "RTS
deterministic lockstep," "rollback-emulated prediction," and "stripping is
.Target.cs driven" descriptions are implemented (if at all) inside the
runtime modules, not stamped onto every module by the target. Read the
determinism and stripping prose as a module-level intent, not a build-target
guarantee. (See ./high-level-architecture.md for
the runtime-tier picture this implies.)
Project layout: where V4 actually lives#
V4 is unusually self-contained. Four homes hold all of it, and three of the four
are under V4/ itself.
V4/ue/— the one UE5.5 project: 28Source/modules, 3 targets, ~34 enabled plugins (engine + project), andPlugins/containing the 28 enabledV4Mode_*code plugins, 2V4Tools_*editor linters, and 4 content-onlyV4DLC_*plugins. Engine plugins read like a genre bill of materials:GameplayAbilities,EnhancedInput,CommonUI+ModelViewViewModel, the animation stack (MotionWarping,PoseSearch,Mover,Chooser),Niagara, the Chaos set (ChaosVehicles,ChaosCloth,ChaosFlesh,GeometryCollection),Metasound+SteamAudio+ResonanceAudio, the networking set (ReplicationGraph,NetworkPrediction,Iris), the Mass set (MassEntity/MassAI/MassGameplay),PCG,Paper2D,OpenXR+ hand/eye tracking,AppleARKit/AppleVision, andGauntlet.apps/v4/— a Rust (resolver = "2",axum) workspace with three crate members:shared(343 lines),telemetry-ingest(587 lines), andonline-services(8,581 lines, consolidatingoauth,matchmaking,brackets(leaderboards/ladders),sfu, andhttp). The Project Layout's nine separate services (login, matchmaking, replay, leaderboard, anti-cheat, workshop, moderation, balance-ledger) are aspirational; the real backend folds most of them intoonline-services.- Web & companion surfaces —
apps/v4/web(@v4/web, Next.js, port 3045, the marketing site),apps/v4/spectator(@v4/spectator, Next.js, port 3044, the spectator/esports portal), andapps/v4/companion(@v4/companion, Expo/React Native, including the flat-surface AR replay projection).V4/tools/holds only theesportstoolkit — the layout'smissions/,rts-maps/,arcade-art/,balance/, andrelease/tool dirs do not exist there. - Data-authoring trees — the many top-level
V4/directories (balance/,modes/,maps/,codex/,narrative/,liveops/,progression/,loc/,release/,roadmap/,wiki/,ops/,perf/, …) are JSON/Markdown authoring and ops data that feed the game and the live-service backend, not compiled code.
Because there is no libs/contracts/src/v4, V4's data contracts live in UE C++
UDataAsset/DataTable types and in the per-service Rust structs, not a shared
cross-language registry — the same posture V2 took, and a deliberate contrast
with V3's Zod-registry spine. For how V4 nonetheless rides the shared Oshun
platform for identity and gateway concerns, see
../../platform/overview.html.
Glossary reconciliation table#
The fastest way to use the monolith glossary safely is to read it through this
column. "Module" = a directory under V4/ue/Source/ with a Build.cs; "Plugin"
= a plugin under V4/ue/Plugins/; "Service" = a Rust crate under apps/v4/.
| Glossary name | On disk as |
|---|---|
V4Core … V4Tests (27 engine modules) |
Module — all 27 present, 1:1, none spec-only |
V4 (primary game module) |
Module — present; omitted from the glossary table, named in Project Layout |
V4Mode_* (27 listed) |
Plugin (code+content) — all present and force-enabled; each ships a runtime C++ module |
V4Mode_Crossover_ShadowWar |
Plugin — real and enabled, not in the glossary |
V4Tools_AssetLinter / V4Tools_DataLinter |
Plugin (editor) — AssetLinter in layout; DataLinter undocumented |
V4DLC_* (4) |
Plugin (content-only, disabled) — 0 .cpp; season-DLC containers, not in glossary |
V4Server (Project Layout) |
Spec — no such source module; the server build is the V4TournamentServer target |
| 9-service backend / 6-tool tree | Spec/partial — real backend is 3 Rust crates; tools/ holds only esports |
Where to go next#
- The product framing this topology serves: ./product-promise.md.
- The runtime-tier and cross-cutting-services picture: ./high-level-architecture.md.
- How V4 rides the shared Oshun platform (identity, BFF, contracts): ../../platform/overview.html.
- The full catalogue, including the GAS layout, netcode, AI/perception, and per-cell deep-dives: ../V4_ARCHITECTURE.md.