Vehicle, on-foot, and fight states use different simulation contracts. The crossover must transfer authority, inventory, health, objective, camera, and accessibility state explicitly rather than treating egress as a cosmetic cue.
V2 ships a fighting game and a racing game that share one roster, one online backbone, one store, one Battle Pass, and one currency ledger — and the place those two genres actually touch is the crossover. A roster fighter can climb into any vehicle; a totaled car can dump its driver onto the asphalt to settle the race with fists in the ruleset of their choice; a ram at speed can be an intentional melee attack that combos through the same GAS layer the stand-up fight uses. This page covers that seam — the Racing × Fighting crossover (Fighter-Driver and Get-Out-and-Fight, §118), the vehicle-combat crossover modes that weaponize the city (Demolition Derby, Vehicle-Hijack, Fight-On- Vehicle, truck-bike chases, convoy raids, §123) — plus the open-world content those modes inhabit (the Convoy free-roam lobby, the co-op Heist, the persistent city) and the racing compliance, trophies, anti-cheat, and accessibility ops (§119) that have to be in place before any of it ships. It is the feature-side companion to the racing component; the section hub is ../V2_features.md.
What ships, honestly#
Every crossover and compliance surface on this page is a validated C++ data catalogue with a deterministic resolver and a contract automation spec, built to the same target-artifact discipline as the rest of V2 — the logic is real and the binaries it names are not yet on disk.
- The crossover catalogues are real, validated, and exercise genuine runtime
math.
FV2RacingFightingCrossoverCatalog(§118) andFV2VehicleCombatCrossoverCatalog(§123) live in theV2RaceModesmodule, each built by aBlueprintPurefactory, each gated by anIsValidCatalogvalidator with a human-readable failure reason, each pinned by a dedicated spec (V2/ue/Source/V2Tests/Private/Racing/RacingFightingCrossover.spec.cpp,VehicleCombatCrossover.spec.cpp). The Get-Out transition, the vehicle-melee damage split, and the demolition-round resolution are deterministic functions asserted against exact numbers — not stubs. - The compliance/cert catalogue is real and registered.
FV2RacingComplianceCertCatalog(§119,V2Racingmodule) carries the licensing, region, content-safety, trophy, anti-cheat, cert, and accessibility specs, validates as a unit, hashes to a deterministic signature, and registers intoUV2RaceRegistrySubsystem. - No binaries ship for any of it.
Race.Crossover.GetOutAndFightis a synthesized Game Feature plugin URL, not a.upluginon disk; the cinematic ids (Cine.Crossover.DriverExit.VehicleKO) and arena ids are convention strings; there are no.umap/.uassetcrossover arenas. The resolvers compute the outcome of a get-out-and-fight or a derby round; the cinematic, the arena spawn, and the GAS handoff that would play that outcome are target artifacts. - One honest correction to the architecture notes. The open-world
architecture companion files the Convoy free-roam lobby under "
V2RaceModes." In the shipped tree it actually lives inV2OnlineServices(FV2ConvoyFreeRoamLobbyCatalog, specV2.Online.ConvoyFreeRoamLobby.Contract) with its cooked data underV2/balance/racing/. The capability is real; the module attribution in prose was off by one.
The deeper module topology, the analytical physics solver, the vehicle data model, and the determinism boundary that all of this rests on are documented in ../architecture/racing-and-vehicle-architecture.md; the persistent-world and co-op surfaces are in ../architecture/open-world-coop-and-special-modes.md. This page stays on the feature surface and dips into C++ only where a claim needs backing.
The crossover: Fighter-Driver & Get-Out-and-Fight (§118)#
Fighter-as-driver#
Every roster fighter is also a driver. FV2RosterFighterDriverSpec
(V2RaceModeTypes.h:2761) binds a FighterId to a SignatureVehicleId, a
DrivingPersonality (an EV2AIDriverPersonality), and per-fighter and
per-matchup banter line-sets, and the §118 catalogue ships a sample roster of
at least eight fighter-drivers (Catalog.FighterDrivers.Num() >= 8).
The validator (IsValidFighterDriver, V2RaceModeTypes.cpp:1885) encodes two
design rules worth calling out because they are enforced, not aspirational.
First, a fighter can drive any vehicle while their signature vehicle is
gated behind both Mastery and a Side Story
(bCanDriveAnyVehicle && bSignatureVehicleUnlockedViaMastery && bSignatureVehicleUnlockedViaSideStory).
Second — and this is the one that protects competitive integrity — a fighter's
driving personality affects AI drivers only and must never bias the player's own
handling
(bAIPersonalityAffectsAIDriverOnly && bPlayerDrivenIgnoresPersonalityBias).
The catalogue's spec actively rejects a build where
bPlayerDrivenIgnoresPersonalityBias is flipped off, so a personality bias can
never silently leak into a human's inputs. Banter is likewise required to extend
to racing events with per-fighter and per-matchup driving-context lines.
Get-Out-and-Fight, resolved#
The headline crossover mechanic is the transition itself.
FV2GetOutAndFightTransitionSpec (V2RaceModeTypes.h:2862) pins
RaceModeId = "Race.Crossover.GetOutAndFight", a vehicle-KO state of
VehicleDamage.Totaled, a driver-exit cinematic id, and a SupportedRulesets
list that must cover all seven fighting families — MK, SF, Tekken, WWE, UFC, SC,
and DJ (EV2CrossoverFightingRuleset, HasRequiredRulesets,
V2RaceModeTypes.cpp:1906). When a car is totaled, the driver gets out and the
match resumes as a stand-up fight in the chosen ruleset, on the same GAS combat
core as the rest of the game.
The resolver is a pure function:
ResolveTransition(bool bDriverAVehicleTotaled, bool bDriverBVehicleTotaled)
(V2RaceModeTypes.cpp:1942) returns an FV2GetOutTransitionResult describing
who exits and whether a fight begins. Its behaviour is asserted exactly:
- One car totaled (
true, false) → that driver alone exits and the fight begins; the other keeps driving;bBothOutstays false. - Both totaled (
true, true) →bBothTotaledForcesBothDriversOutfires, both drivers are out, and the fight begins. - Neither totaled (
false, false) → nobody exits, no fight.
This is the runtime expression of the V2Vehicles damage model's
bTotaledTriggersRetireOrGetOutAndFight hook (see the racing architecture
companion): the five-tier damage ladder bottoms out at Totaled, and Totaled
is where racing hands off to fighting. The fight plays on a
FV2CrossoverStageArenaSpec — a designated track stretch or off-track area
turned into an arena, with environmental finishers eligible and cross-referenced
to the §14/§15 hotspot finisher library. The outcome
(FV2CrossoverFightOutcomeSpec) returns the winner to a salvageable vehicle —
their own or, optionally, the loser's claimed car — and eliminates the loser
from the race.
Vehicle-on-vehicle melee#
Combat racing lets a ram be an attack. FV2VehicleMeleeCombatSpec cross-
references Combat Racing (§104) and the GAS layer (§2), and tracks melee damage
separately from raw collision damage
(bMeleeDamageTrackedSeparatelyFromSpeedDamage — a flag the spec rejects
merging). Its resolver
ResolveImpactDamage(float ImpactSpeedKph, bool bIntentionalRam)
(V2RaceModeTypes.cpp:1994) computes SpeedDamage = round(speed × 0.5) for
every impact and adds MeleeDamage = round(20 + speed × 0.3) only when the
ram was intentional. The spec nails the arithmetic: a 120 kph intentional ram
books 60 speed damage and 56 melee damage; the same speed as an
incidental bump books 60 speed damage and zero melee. Intent, not just
velocity, is what turns a collision into a combo opener.
The crossover catalogue rounds out with a signature-event sequence
(race-to-venue beats), a per-fighter get-out cinematic library (get-out → stance
→ return → re-enter → drive-away), a shared economy that spends Fighter
Coins and Racing Coins against one store plus a shared Battle Pass, and an
opt-in ranked queue with MMR separate from pure racing
(bSeparateMMRFromRacing, rejected if shared). The whole catalogue hashes
through BuildRacingFightingCrossoverCatalogSignature so any content drift
trips CI, and its cooked mirror is
V2/balance/racing/racing-fighting-crossover.json. The
Race.Crossover.GetOutAndFight plugin descriptor is registered in the race-mode
plugin catalogue with Kind == Crossover and RequiredModules that include
V2Combat and V2Cinematics.
Vehicle-combat crossover modes (§123)#
FV2VehicleCombatCrossoverCatalog collects the modes where vehicles and fists
mix on the open road. The contract spec validates §123 and rejects a long list
of malformed builds (a derby below four cars, a hijack without the input RPS, a
fight-on-vehicle without pod-racer compatibility, a convoy raid without the
armored-helicopter cargo, a queue without separate MMR).
- Demolition Derby is an enclosed-bowl, last-vehicle-standing arena for
4–16 cars (
MinVehicles == 4,MaxVehicles == 16) with per-vehicle HP, collision damage, and driver melee weapons — punch-through-window, headbutt, and mounted weapons (cross-ref §104.2). Arena types must cover classic bowl, figure-8, industrial yard, stadium, and parking-garage multi-level; KO uses the §97.8Totaledstate with a cinematic flaming-vehicle KO; team formats cover 2v2/4v4 with a shared-HP-pool option. Its resolverResolveDerbyRound(const TArray<float>& VehicleHP)(V2RaceModeTypes.cpp:2211) counts survivors, lists eliminated indices, and ends the match at one (or zero) survivor:{100, 0, 50, 0, 80}→ 3 survive, 2 wrecked, match continues;{0, 0, 0, 90}→ match over, sole winner at index 3; a total wipeout ends withWinnerVehicleIndex == -1. - Vehicle-Hijack is a mid-race steal: enabled only under the Combat Racing crossover ruleset (§104), it triggers when alongside an opponent, runs a driver-side-window melee input-RPS contest, and on success transfers both the vehicle and the race position — at a meter or power-up cost, with a per-hijack cinematic and attacker/defender input prompts.
- Fight-On-Vehicle is cinematic two-fighter combat on a moving vehicle along an open-world street route, with passing-traffic, overpass, and cop-pursuit hazards. Compatibility covers convertibles, trucks, bike-rider-vs-rider, and pod-racer-cockpit-vs-cockpit, each with an authored fight stage, and its finishers adapt the §14.2 hotspot library to the road: toss an opponent into oncoming traffic, ram a bike into a pillar, throw a rival from a pod-racer into a chasm.
- Truck-Bike Chase is one heavy truck pursuing 1–3 bike riders who attack the truck (climb-aboard finisher, lasso a truck pillar) while the truck rams them off the road, across bandit/cartel/rival-crew/cop-vs-fugitive scenarios.
- Convoy Raid is 2–4 attackers versus an AI convoy defending valuable cargo (armored car, truck, multi-vehicle convoy, armored helicopter, celebrity mobile stage): the crew splits into drivers who chase and fighters who board and steal, while defenders fight back and call backup.
All five modes expose a ranked queue, and the catalogue enforces separate MMR
per queue for every one of them. Cooked data:
V2/balance/racing/vehicle-combat-crossover.json.
Open-world content the crossover lives in#
Convoy & free-roam lobby (§121)#
The social space the crossover modes spawn from is the free-roam lobby —
implemented in V2OnlineServices as FV2ConvoyFreeRoamLobbyCatalog
(V2OnlineServicesTypes.h:10994), validated by the
V2.Online.ConvoyFreeRoamLobby.Contract spec. The FV2FreeRoamLobbySpec places
8–32 players into open-world Metro City on a client-server instance
(ModeId "Mode.Racing.FreeRoamLobby"), with a synchronized day/night and
weather state shared across the instance — the spec rejects a lobby capped
below 32, a lobby with unsynchronized weather, or any attempt to attach ranked
progression (bNoRank is mandatory). FV2ConvoyFormationSpec locks 2–8
players into a shared waypoint with a ResolveFormation(...) resolver returning
an FV2ConvoyFormationState, and a challenge library that must include
cop-pursuit. Around it sit district hot-spots (the harbor pier among them), a
cruise photo session where one player drives the camera, open-world chat with
platform-compliance gating and a cosmetic horn library, and co-op cruise
objectives (escort fragile cargo, and friends) — all cosmetic/XP only, never
ranked. Cooked data: V2/balance/racing/convoy-free-roam-lobby.json.
Heist & the persistent city#
The Heist (§122) is V2's co-op crossover campaign — a 1–4 player mission that
chains stealth, driving, and fighting through five authored stages (Recon →
Approach → Infiltration → Extraction → Resolution), implemented entirely
on-device as FV2HeistModeCatalog in V2Modes with the deterministic
ResolveHeistRun(const TArray<bool>&) resolver and cooked data at
V2/balance/racing/heist-mode.json. Its Infiltration stage runs the same GAS
combat as the stand-up game, which is exactly why it belongs to the crossover
family. The living backdrop for all of this is the §130 persistent world economy
— a V2World module with deterministic supply/demand pricing, NPC daily-routine
scheduling, and a crime-gauge→heat→lockdown chain
(V2/balance/world/persistent-world-economy.json). Both are covered in depth in
../architecture/open-world-coop-and-special-modes.md;
this page notes only that the crossover modes inhabit them rather than
re-deriving them.
Racing compliance, trophies, anti-cheat & accessibility (§119)#
None of the above is shippable without the §119 compliance/cert layer, which V2
models as one validated catalogue, FV2RacingComplianceCertCatalog
(V2RaceTypes.h:1046, SectionId "119"), registered into the race registry
(RegisterRacingComplianceCertCatalog) and asserted across
Racing.Module.spec.cpp:155–166.
Licensing and damage. Every licensed vehicle carries an
FV2RacingVehicleLicenseContractSpec recording a manufacturer-signed contract
with term, royalty schedule, removal clause, and a damage-portrayal clause.
Permissibility is per-manufacturer via FV2RacingManufacturerDamagePolicySpec:
LicensedLuxuryPermission defaults to CosmeticOnly while
OriginalIPPermission allows FullDamage — so a licensed luxury brand never
visibly deforms past the Scuffed tier while original-IP vehicles run the whole
five-tier ladder to Totaled. This is the contract side of the V2Vehicles
damage model.
Content rules and regions. FV2RacingRegionVariantSpec switches the speed
display between km/h and mph, localizes the number-plate format, and carries a
bChinaPublisherSKUAdjustsCopVisuals flag (the spec checks RegionVariants[2]
sets it) and a combat-racing-weaponry variant.
FV2RacingContentSafetyPolicySpec hard-codes the bright lines: no drunk or
impaired-driving depiction anywhere, no cop killing outside the Death Race
ruleset, pursuit rules that "incapacitate, not kill," and lethal language
confined to Death Race. The catalogue points at the real region doc
V2/docs/regions/racing-variant.md.
Trophies and anti-cheat. FV2RacingTrophyAchievementPlanSpec spans
per-platform targets and objective kinds — per-mode completion,
per-vehicle-class unlock, per-rank-tier promotion, and special-condition unlocks
such as Achievement.Racing.CanyonNoFlashback. Anti-cheat
(FV2RacingAntiCheatGateSpec) is server-side by design — racing runs
client-server, not rollback — and layers three gates: per-section
physics-impossible-time detection (a sector time below the achievable minimum
flags, cross-ref §112.7), the replay-determinism gate on race-record writes
(Gate.Racing.RecordWrite.ReplayDeterminism), and tuning-range enforcement
against a valid-ranges table (Table.Racing.Tuning.ValidRanges) that flags any
out-of-range tune.
Peripherals and accessibility. FV2RacingCertWheelSupportSpec certifies
force-feedback wheels (the five primary vendors in EV2RacingWheelVendor),
streaming cinematic-camera capture, and photo-mode capture, with per-vehicle FFB
tuning. FV2RacingAccessibilityExtendedSpec makes the full assist library
toggleable, adds an auto-throttle mode for severely motor-impaired players,
steps difficulty down after consecutive career losses (§90.2), and clamps motion
blur and camera shake in a reduced-motion racing camera (§53.2). The catalogue
hashes through BuildRacingComplianceCertCatalogSignature and mirrors to
V2/balance/racing/racing-compliance-cert.json. The broader accessibility,
localization, and platform-cert program these racing specs slot into is on
./platform-accessibility-localization-and-production.md.
Related#
- Racing: Vehicles, Modes & Online — the vehicle data model, race-mode catalogue, physics, careers, and racing online this crossover shares a roster and backbone with
- Platform, Accessibility, Localization & Production — the game-wide accessibility, region-rating, and platform-cert program the §119 racing specs feed into
- ../architecture/racing-and-vehicle-architecture.md — the seven racing modules, the analytical physics solver, the damage model's Get-Out-and-Fight hook, and the §119 compliance catalogue in depth
- ../architecture/open-world-coop-and-special-modes.md — the Heist co-op campaign, the persistent world economy, and the open-world surfaces the crossover modes inhabit
- The section hub: ../V2_features.md