Most of V5's seventy-four engine modules are deliberately genre-agnostic: the GAS spine, the perception model, netcode, traversal, and the Mind-Palace deduction graph are shared by every cell so a Hong Kong triad goon and a hunter-cell drowner read stimuli from the same state machine. The modules covered on this page are the opposite — they are the signature mechanics that only one cell ever wants. A meditation-pose brewing station that turns three foraged ingredients into a toxicity-bearing decoction makes no sense outside the monster-hunter cell; a World-Partition data-layer flip that retires every 1947 prop and swaps in a 1968 body-language library belongs only to the period-drama cell; a quadratic star-cost "lawyer payoff" that reads your honor bounty is a crime-cell verb. This page opens those three clusters in turn — the monster-hunter cell's alchemy/signs/bestiary/hunting stack, the period-drama cell's authenticity-and-progression stack, and the urban-crime "Bureau" spine that fuses the wanted/honor reputation systems to the cross-cell Cross-Continuum Bureau progression ledger. As with the rest of this set, every claim is grounded in the on-disk C++ and labelled where it leans on art that is described rather than baked. It is the signature-systems companion to the catalogue index in ../V5_ARCHITECTURE.md.
What ships, honestly#
The cell-mechanic modules are real, compiled, and tested. Every module named
below exists under V5/ue/Source/ with a Public//Private/ split, a
*.Build.cs, and a Private/Tests/ automation spec, and the linker has been
through them on this box: Binaries/Linux/libUnrealEditor-V5Alchemy.so,
-V5MonsterHunt.so, -V5Honor.so, and -V5Wanted.so (among others) sit next
to their sources, built by the ueagent user. The signature math is real
domain-specific code, not renamed CRUD — a 70%-toxicity self-damage threshold, a
quadratic wanted payoff, a five-input cross-cell moral compass — and each is
pinned by UE IMPLEMENT_*_AUTOMATION_TEST assertions that check values, not
truthiness
(TestEqual("Heat below visual threshold is zero stars", EvaluateStarLevel(9.0f), 0)).
The nine modules profiled here carry ~1,540 lines of test across them.
The data is JSON catalogs; the art is not in-tree. Consistent with the
topology page's accounting of 0 binary
.uasset, the catalogs that drive these systems ship as version-controlled
JSON: Content/V5Alchemy/Data/alchemy_catalog.json (84 KB),
Content/V5MonsterHunt/Data/monster_hunt_catalog.json (44 KB), and
Content/V5PeriodAuth/Data/period_auth_bundles.json. So the logic and balance
of every signature system is real, while the meditation-pose montages, MetaHuman
witnesses, Niagara sign FX, and era-correct meshes those catalogs reference are
described, not cooked. Where a claim depends on that art, this page says so.
"Cell" means a mechanic stack composed by a thin variant module. As the
topology page explains, V5 inverts V4: the mechanics live in shared modules, and
each playable mode-variant is a content-only GameFeature plugin plus a C++
composition module whose Build.cs wires the shared mechanics it needs. The
honest consequence on display here is that the variant modules
(V5HunterWitchersPath, V5PeriodMadeMan, V5UrbanHeistCity, …) are lighter
on novel per-frame algorithms and heavier on catalog assembly and validation
than the mechanic cores they pull in; their depth is in Require(...) shape
gates over large authored datasets, while the frame-critical verbs live one
layer down. Both facts are true at once, and the sections below keep them
distinct.
The monster-hunter cell — alchemy, signs, bestiary, hunting#
The hunter cell is V5's Witcher surface, and it is the most mechanically dense
of the three clusters: four mechanic modules (V5Alchemy, V5Signs,
V5MonsterHunt, V5Hunting) that the V5HunterWitchersPath composition module
fuses with V5Melee and V5Squad.
Alchemy — a real consumable economy with a toxicity ceiling#
V5Alchemy models the full brew loop, not a crafting menu. The catalog is 120
recipes (30 each of Potion/Oil/Bomb/Decoction, the
EV5AlchemyRecipeType enum) drawing on 180 ingredients (60 herbs, 60
mushrooms, 60 monster parts), each recipe consuming exactly three — verified
by V5AlchemyTests. The load-bearing system is UV5_Alchemy_ToxicitySystem:
ApplyConsumableToxicity() scales a recipe's ToxicityPercent by a resistance
scalar (clamped so resistance can never exceed 90%), accumulates it toward a
MaxToxicityPercent, and once the bar crosses the
ToxicityDamageThresholdPercent = 70.0f constant, it starts hurting you —
SelfDamage = (Current − 70) × 0.5, accumulated across doses. That single
threshold is the Witcher "don't chug five decoctions" rule expressed as
interpolation math, and the spec proves it: a first decoction stays under the
line, a second stacks past 70 and trips bSelfDamageTriggered. Around it sit
UV5_Alchemy_Inventory (typed slot caps — 5 potions, 2 oils, 2 bombs, 1
decoction — via GetSlotCapacity), AV5_Alchemy_BrewingStation::BrewRecipe()
(real ingredient-count validation and consumption against a BrewRequest), and
UV5_Alchemy_RespawnSchedule, which gates foraged nodes behind a
RespawnCadenceDays = 4.0f cooldown so over-harvesting a biome actually
depletes it.
Signs — five GAS verbs gated on a shared stamina pool#
V5Signs carries the five elemental casts (EV5SignType:
FireCone/ForceWave/Shield/TrapGlyph/MindSuggest — the renamed
Igni/Aard/Quen/Yrden/Axii), each with a Base and Charged variant and a
five-tier upgrade tree (25 nodes total; the spec checks 5 families → 10
variants → 25 nodes). The interesting code is UV5_Sign_StaminaGate, which is
explicitly wired to the shared combat attribute set:
EvaluateSignCastFromCombatAttributes() reads GetStamina()/GetMaxStamina()
off UV5_AttributeSet_Combat rather than carrying its own pool, so signs draw
from the same stamina that dodge and parry regenerate. The gate applies the
upgrade node's CostReductionPercent (clamped to 80%), scales EffectMagnitude
by the node's DamageMultiplier, and enforces that a bRequiresFullStamina
charged cast needs ≥95% of max — failing loud with a typed FailureReason
rather than silently succeeding. V5Signs.Build.cs links GameplayAbilities
directly, so each sign is a real UV5_Ability_Sign_* over the GAS spine.
Bestiary & Witcher-Sense — the investigate-then-fight loop#
V5MonsterHunt is where the cell's hunting fantasy lives. The bestiary is 80
entries across 12 categories (EV5MonsterCategory:
Specter/Vampire/Drowner/Necrophage/Hybrid/Ogre/Dragon/Golem/Undead/CursedOne/Doppler/Elemental),
each carrying WeakVsOil/WeakVsSign/WeakVsBomb tags that close the loop
back to alchemy and signs. UV5_MonsterHunt_WitcherSense::SetSenseEnabled()
drops camera saturation to 0.45 and lights up six EV5MonsterHuntClueType
colours (amber scent, crimson blood, ochre track, …); BuildHighlightedClues()
filters to clues within a 40 m range and sorts them by proximity, and
UV5_MonsterHunt_TrailFollowing::BuildTrailFromClues() turns the sorted clues
into nav markers weighted 1 / distance. Bestiary completion is a real state
machine: ApplyUnlock() advances a monster from Tome (25%) → Encounter
(40%) → CombatStudy (70%) → Defeat (100%), and at 100%
GetDamageMultiplier() returns a 1.2× bonus — knowledge becomes damage.
Contracts post on a 36-hour cadence and expire after 168.0f hours (seven
in-game days), verified by a spec that posts at hour 72 and asserts expiry
at 240.
Hunting — perfect-pelt scoring and prey AI#
V5Hunting is the frontier/hunter foraging economy (65 species, 60 trapper
recipes, all three pelt grades authored).
UV5_Hunting_PerfectPeltScoring::ScorePelt() encodes the RDR2-style cleanliness
rule precisely: a Perfect pelt requires the correct caliber for the species
and a clean kill (one shot to head or vital) and field-dressing within
PerfectFieldDressMinutes = 15.0f; miss any and you drop to Good or Poor
with a typed reason. UV5_Hunting_AnimalAI resolves prey behaviour by priority
— a nearby predator forces Fleeing at 1.2× flee speed, then line-of-sight
inside SightRangeMeters flees, then sound inside HearingRangeMeters only
Alerts — and UV5_Hunting_TrackingMode is the frontier "Eagle Eye" cousin of
Witcher-Sense (saturation 0.52, amber accent, proximity-sorted signs).
CarcassTransport enforces the one-rear-slot horse constraint and refuses
CatchOnly species; TrapperProgression unlocks outfits only when enough
matching perfect pelts and dollars are delivered.
Maturity: high. Real formulas, compiled modules, value-checking specs, and
JSON catalogs. The brewing-pose animation, monster meshes, and sign Niagara
systems are referenced by FSoftObjectPath but not baked.
The period-drama cell — authenticity and progression#
The period cell is V5's Mafia/L.A.-Noire surface. Its signature is not a combat verb but time itself: one shared open world that re-skins across three eras, plus two progression-driven campaign modules over it.
Period-Authenticity — a data-layer era machine with a linter#
V5PeriodAuth is the abstraction that makes "the same city, three decades"
cheap. An FV5PeriodAuthBundle for each of the three eras (EV5PeriodAuthEra:
Era1930s/Era1947/Era1968) bundles vehicles, fashion, signage, fonts,
slang, music, food, a radio-station set, lighting overrides, a DataLayerName,
a body-language library id, and a UI font/palette. BuildDataLayerFlip()
computes the World-Partition transition: it enables the target era's layer,
disables every other era's layer, and only reports bContinuitySafe when at
least two other layers are being torn down (a real guard against a half-swapped
world). The loader is genuinely defensive — ValidatePeriodAuthJson() requires
schemaVersion == 1, exactly three era bundles, and a passing asset linter.
That linter, UV5_PeriodAuth_AssetLinter::LintPeriodTaggedAssets(), is the
piece that keeps a 1968 muscle car out of a 1947 street: it flags any tagged
asset whose DeclaredEra != BundleEra or that isn't actually a member of its
bundle's category array. On-disk evidence backs the breadth — dozens of
Content/V5Vehicles/Tuning/Period/period_{30s,47,68}_*.vehicle-tuning.json
descriptors already carry era-correct rows.
Made Man — rank ladder and a two-axis loyalty model#
V5PeriodMadeMan (which composes V5PeriodAuth, V5Vehicles, and V5Audio)
is the Mafia-style family arc: 78 missions, 26 per era, six chapter endings,
and a four-rung hierarchy (Soldier → Caporegime → Underboss → Boss)
gated by mission number and family standing. The signature runtime is
UV5_MadeMan_Loyalty::ApplyEvent(), a two-axis model where each story beat
moves FamilyStanding and BetrayalRisk in opposition — ProtectFamily is
+18/−6, SpareCivilian +8/−10, but BetrayCapo is −30 standing/+35 risk and
CauseCollateral −16/+18. Both clamp to [0,100], and the resulting
EV5MMLoyaltyStage is resolved by threshold: BetrayalRisk ≥ 70 overrides
everything to Betrayed, else FamilyStanding ≥ 75 is Loyal, ≥50 Tested,
≥25 Trusted, else Outsider. It is a small, legible reputation engine that
the campaign's branching endings read directly.
Vice Squad — desk progression and period-correct evidence#
V5PeriodViceSquad is the detective face, and its Build.cs is a who's-who of
the shared narrative spine: V5FaceCapture, V5Interrogation,
V5Investigation, V5PeriodAuth. Cases roll up across five desks
(Patrol→Traffic→Homicide→Vice→Arson) scored on a four-grade scale
(Brilliant/Good/Average/Poor = 4/3/2/1); RollUpDeskRating() averages a
desk's case scores and RatingFromAverage() maps ≥3.5→Brilliant, ≥2.75→Good,
≥2.0→Average. The period flavour is in the evidence-retrieval methods —
EvidenceLocker, CoronerLedger, SwitchboardLog, NewspaperMorgue,
RadioDispatchTape — there are no databases in 1947, and the catalog validator
enforces exactly that, alongside requirements that every case pushes Mind-Palace
evidence, the interrogation kit carries 12 tells over 50+ scenes, and the shared
1947 city spans ≥8 districts. The module also hosts a self-contained "Egyptian
Detective" cold-case sub-campaign (14 cases, 5 districts, 12 museum-cataloged
artifacts scored for authenticity ≥75, an 840-minute / 18.5 km² validation). The
interrogation, dialogue, and face-capture machinery these cases ride on is
detailed in
interrogation, dialogue & heist.
Maturity: high for the period-auth machine and the two campaign progressions; the vice-squad and made-man modules are catalog-and-validation heavy, with the frame-critical interrogation/investigation verbs living in the shared modules they compose. Era meshes, MetaHuman witnesses, and VO are JSON-described.
The Bureau spine — urban crime and the Cross-Continuum Bureau#
The "Bureau" is two things wearing one name, and both are real code. At the cell level it is the urban-crime trio. Underneath every cell it is the Cross-Continuum Bureau — the shared reputation and progression spine that turns five disparate games into one account.
Wanted — a heat/stars model with era-scaled response#
V5Wanted is the shared law-response engine (its Build.cs depends only on
V5Honor, and it is reused by urban, period, frontier, hunter, and sci-fi).
EvaluateStarLevel() maps a clamped Heat (0–125) onto 0–5 stars at fixed
thresholds (10/25/45/70/100); crimes add heat (violent ×1.35, vehicle escape
+6), and sustained police contact escalates via a per-star rate. The
genre-defining detail is that the response is era-scaled:
EV5WantedResponseEra routes a SpawnPlan through frontier (marshals, posse
riders), hunter (village watch, lord's guard), or sci-fi (faction troopers,
patrol cruisers) variants, while modern/1968 unlock military escalation.
Clearing is real, too — off-radar for 90 seconds, or a safehouse garage that
ticks the timer at 3× — and the payoff verb is a genuine formula:
CostPaid = BaseCostPerStar(150) × Stars² plus your outstanding honor bounty,
with a 900-second cooldown. The quadratic makes a five-star payoff punishing on
purpose.
Honor — a moral meter that bridges every cell#
V5Honor (links GameplayAbilities) is the reputation substrate. The local
model is straightforward — HonorScore clamped [−100,100], five bands, action
deltas (StoryMercy +12, StoryCruelty −12, AssaultCivilian −8), bounty by
crime type, and witness-reporting state. The cross-cell piece is the one that
makes the Bureau cohere: UV5_Honor_KarmaParagonBridge::ComputeMoralCompass()
takes per-cell reputation inputs — urban CopRep/TriadRep, period
FamilyRep/OutsiderRep plus case rating, frontier HonorScore, hunter
WitcherHumanity, sci-fi ParagonScore/RenegadeScore — and folds them into a
single LightScore/DarkScore pair, returning a MoralCompass clamped
[−1,1] (period double-weighted in the normalizer). That compass then feeds
UV5_Honor_BureauXPMod::GetBureauXPMultiplier(): a strong moral identity
(|compass| ≥ 0.7) earns a 1.5× Bureau-XP multiplier, ≥0.4 earns 1.25×. Being
someone across cells is mechanically rewarded.
The urban-crime trio#
Three variant modules compose the crime cell over V5Wanted, V5Melee,
V5Parkour, V5Netcode, and V5OnlineServices. V5UrbanHeistCity is the
GTA-V surface: a validator-enforced catalog of 3 protagonists, 32 main missions,
12 heists (each 4–6 setups, smooth/hard/catastrophic endings), 90 side missions,
16 districts totalling exactly 140 km², a 1.5-second right-D-pad character
switch with simulated downtime, plus a self-contained Cyberpunk-2087 sub-cell.
V5UrbanStreetTriad is Sleeping Dogs: a two-axis Face/Triad reputation
whose ending branches resolve Balanced only when both ≥65 and within 10 of
each other, over 85 base melee moves and 7 parkour actions. V5UrbanOnline is
the GTA-Online surface — a 2–30-player dedicated-server freeroam on the shared
300 m Urban AOI profile, 2–4-player role-based heist co-op with AI backfill, 4v4
rollback deathmatch across 16 maps, and a 60-route speedrun league on the 90-day
season cadence, all routed through the shared matchmaking and balance-ledger
service contracts described in
persistence, online & crossplay.
The Cross-Continuum Bureau XP ledger#
The progression spine lives in the foundation module: FV5BureauXPLedger in
V5/ue/Source/V5Core/Public/V5Types.h. AddXP(EV5Cell, DeltaXP) accumulates
into a per-cell TMap and a TotalXP, then RecalculateTier() derives
CurrentTier = max(1, TotalXP/2500 + 1) and idempotently grants the cross-cell
unlocks the monolith promises — Tier 1 PhotoMode.AllCells, Tier 5
MindPalace.CrossEraPairs, Tier 10 CompanionApp.FullSync, Tier 20
NewGamePlus, Tier 30 Cosmetic.BureauGear.AllCells.
UV5_GameInstance::AddBureauXP() is the live entry point that writes through
the active profile. One honest drift worth flagging: the social-hub side,
UV5_Online_CrossCellPersistentWorld::BuildCrossCellWorldState(), recomputes a
BureauTier as BureauXP/1000 + 1 — a different divisor from the core
ledger's /2500, so the persistent-world hub and the save-game ledger don't
agree on tier spacing. The Bureau-HQ hub itself is real plumbing
(UV5_Mode_OnlineLobby_BureauHQ, a 32-player social lobby routed to the
WBP_HUD_BureauHQ surface), but its maps are descriptor paths, not cooked
levels.
Maturity: high for V5Wanted, V5Honor, and the FV5BureauXPLedger spine
(real formulas, value-checking specs, compiled .sos). The urban variant trio
is validator-heavy over large authored catalogs, deferring its heavy mechanics
to the shared modules it composes; the tier-divisor drift is a real,
unreconciled inconsistency.
Where to go next#
These signature systems only make sense against the layers they ride on:
- Creator suite & Mind Palace — the authoring tools (Bestiary Author, Heist Author, Contract Author) that produce the catalogs above, and the deduction graph every period case pushes into.
- Interrogation, dialogue & heist — the shared narrative verbs the Vice Squad and Heist City cells compose.
- Spaceship, vehicles & mounts — the period autos, hunter horses, and getaway cars these cells drive.
- Perception, crowd & morality — the shared suspicion model every guard, witness, and prey animal reads.
- The full catalogue: ../V5_ARCHITECTURE.md.