Fighting Game · Features

Racing × Fighting Crossover, Open World & Ops

A focused page within the Fighting Game Features documentation. The full map and every sibling page live in the Features hub.

6sections12 minread1diagram

On this page
stateDiagram-v2 [*] --> Driving Driving --> VehicleCombat: governed pickup collision or weapon intent VehicleCombat --> Driving: vehicle remains operable Driving --> Disabled: damage or scripted crossover threshold Disabled --> OnFoot: safe egress and fighter state initialized OnFoot --> Fighting: compatible combat ruleset begins Fighting --> Driving: eligible vehicle re-entry Fighting --> Resolved: crossover objective completes Driving --> Resolved: race or world objective completes Disabled --> Recovering: egress or authority failure Recovering --> Driving: prior checkpoint restored

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) and FV2VehicleCombatCrossoverCatalog (§123) live in the V2RaceModes module, each built by a BlueprintPure factory, each gated by an IsValidCatalog validator 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, V2Racing module) carries the licensing, region, content-safety, trophy, anti-cheat, cert, and accessibility specs, validates as a unit, hashes to a deterministic signature, and registers into UV2RaceRegistrySubsystem.
  • No binaries ship for any of it. Race.Crossover.GetOutAndFight is a synthesized Game Feature plugin URL, not a .uplugin on disk; the cinematic ids (Cine.Crossover.DriverExit.VehicleKO) and arena ids are convention strings; there are no .umap/.uasset crossover 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 in V2OnlineServices (FV2ConvoyFreeRoamLobbyCatalog, spec V2.Online.ConvoyFreeRoamLobby.Contract) with its cooked data under V2/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; bBothOut stays false.
  • Both totaled (true, true) → bBothTotaledForcesBothDriversOut fires, 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.8 Totaled state with a cinematic flaming-vehicle KO; team formats cover 2v2/4v4 with a shared-HP-pool option. Its resolver ResolveDerbyRound(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 with WinnerVehicleIndex == -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.