Tactical Action · Features

Content, Creator Tools & Community

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

6sections12 minread1diagram

On this page

Everything on this page happens around the match rather than inside it. When a player closes the tactical-FPS round, the RTS ladder game, or the Wukong boss rush, V4 hands them off to a ring of out-of-match surfaces: the encyclopedia that explains what they just used, the community wiki that documents every ruleset and frame window, the esports and tournament toolkit a broadcast is produced with, the creator programs that surface a Player of the Week or a featured squad, and the cross-surface account network that lets one login carry from the companion app to the wiki to the spectator portal. The throughline is the same hard line V2's community page drew: almost all of this ships as versioned JSON data contracts — schema-stamped documents with concrete fields, rendered by a shared shell, not React apps and not a fleet of standalone microservices — with exactly one sharp exception. The esports broadcast toolkit's manifest binds to real compiled Unreal Engine 5 C++ in the V4Mode_Spectator plugin, and that one seam is where this group reaches through data and touches the engine. This is the feature-side companion to the modes and online groups; for the full feature scope it slots into, the hub is ../V4_features.md.

What ships, honestly#

This group spans the implemented-to-spec spectrum, and the split is worth stating up front because this page follows the code, not the monolith's prose.

  • The content and community surfaces are real but data-shaped. V4/community/community-features.json, V4/wiki/community-wiki.json, V4/wiki/world-state-feed.json, V4/wiki/world-state-ripple.json, V4/wiki/ai-summary-policy.json, V4/codex/codex-entry-library.json, and V4/content-network/cross-surface-content-network.json are each a single schemaVersion-stamped JSON document. The Player-of-the-Week selection weights, the gallery moderation thresholds, the wiki anti-vandalism reputation gates, the Sophia summary opt-in header, the codex entry counts, and the SSO step-up rules are all concrete fields, not lorem ipsum. They are the shipped data contract.
  • The esports toolkit is a manifest over genuine engine code. V4/tools/esports/esports-toolkit.json's broadcastExtras.source strings are not decoration — each names a real BlueprintPure method on a compiled UObject in V4/ue/Plugins/V4Mode_Spectator/ (and one in V4Mode_Replay/). This is the one cluster on the page where a JSON field resolves to C++ you can open.
  • The named owner services are routing identifiers, not all backends. Fields like ownerService: "community-service" / "wiki-service" / "public-api-service" are the owner labels stamped on each contract. The actual Rust workspace under apps/v4/ ships v4-shared, online-services, and telemetry-ingest — so treat those service names as the contract's declared owners, the way V2's surfaces named theirs, not as proof of a deployed daemon per name.
  • The in-game UI assets are JSON descriptors, not cooked binaries. DA_CommunityGallery, WBP_GalleryShowcase, WBP_CodexShell, and DA_CodexEntryLibrary exist on disk as *.uasset.v4asset.json descriptor files (V4's content-as-JSON convention), sourcing real data tables; the compiled .uasset is UE-resident art, not a checked-in binary here.
  • The creator authoring editors are product spec. The Mission Editor, RTS Map Editor, and 2D Stage Editor described in V4_features.md § "Creator Suite" have no editor backend under the grounding directories. What is real on the creator side is the sandboxed Game-Feature activation machinery in V4/ue/Source/V4Modes/ that mods load through — the editors that author content are a documented surface, not code you can point at here.

The architecture-side treatment of the same data-and-content plumbing lives in the companion ../architecture/build-data-content.md; this page stays on the feature surface and dips into code only where a claim needs backing.

Content surfaces#

The Codex — an unlockable encyclopedia over real data tables#

V4/codex/codex-entry-library.json is the encyclopedia contract. It declares eight entryCategories (Operator, Weapon, Gadget, Map, Faction, Civilization, Ruleset, Vehicle) and, for each, an entrySources row that pins the source of truth and a per-category entryCount: 34 operators, 110 weapons, 60 gadgets, 102 maps, 5 factions, 12 civilizations, 37 rulesets, 20 vehicles. Those are not invented totals — the operator source is V4/ue/Content/V4Core/Data/DT_Operator.json, which holds exactly 34 rows on disk, and the weapon/gadget sources (DT_Weapon.json, DT_Gadget.json) sit beside it. The descriptor V4/ue/Content/V4Codex/Data/DA_CodexEntryLibrary.uasset.v4asset.json sums them to a totalLaunchEntryCount of 380, which is the honest arithmetic of those eight counts. Each entry unlocks through play — unlockEventId values like Codex.Unlock.Operator.Played, Codex.Unlock.Map.Completed, Codex.Unlock.Weapon.Used — and the entryTemplate enforces a real authoring floor: every entry requiredFields are loreText, assetGalleryIds, and designCommentary, with an assetGalleryMinimum of 2. The sample entries (Cobra, the modular Assault Rifle 01, the Hard Breach Charge, Clubhouse, Vanguard, the Britons, the R6 Modern ruleset, the MH-6 Little Bird) demonstrate the shape: each pairs readable fiction with the design reason a thing exists, so an unlock teaches both story and playstyle. WBP_CodexShell is the launch browsing shell for locked/unlocked entries — itself a *.uasset.v4asset.json descriptor, not a compiled widget.

The community wiki — moderated, with frame data and recoil#

V4/wiki/community-wiki.json is the editable wiki at wiki.v4.game, and its weight is in the moderation.antiVandalism block. Editing is governed by reputation thresholdsautoApprove: 25, protectedEdit: 80, newContributorReview: 5 — and rate-limited to an hourlyEditLimit of 12, a maxExternalLinksPerRevision of 2, and a maxDeletionRatioWithoutReview of 0.35, so a mass-delete or a link-spam burst is caught structurally. The signals list enumerates the eight detectors (mass_delete, link_spam, blocked_terms, impersonation, protected_page_low_reputation, top_traffic_page_protection, rate_limit, revert_war), the actions enumerate the four outcomes (allow, quarantine_for_review, reject, rollback_last_clean_revision), and a 365-day-retention auditLog records revisionId, pageId, authorId, the firing signals, the action, and the reviewerId for every revision. Six protectedNamespaces (rules, operators, frame-data, recoil, world-state, world-state-ripple) demand the reputation-80 protectedEdit gate. The wiki is also seeded from the game's own truth: curation.sourceTables points at DT_Operator.json, DT_Weapon.json, and the two world-state feeds, on a "Weekly content sync after balance ledger publication" cadence. And it carries competitive depth — 27 modeRules entries (one ruleset summary per shipping mode, from V4Mode_Tactical_R6Modern to V4Mode_Lobby_BattleHub), 6 frameData rows with literal startup/active/recovery/cancel windows (the Wukong Light Chain 1 is startupFrames 10, activeFrames 4, recoveryFrames 16, cancelWindowFrames "13-18"), and 6 recoilPatterns describing vertical rise, horizontal drift, recovery milliseconds, and a recommended burst per weapon.

World-state feeds — read-only, and honestly zeroed#

V4/wiki/world-state-feed.json and V4/wiki/world-state-ripple.json publish the persistent-world fiction to the wiki and companion. Both are readOnly: true, editableByCommunity: false, cached 300 s, and explicitly not part of the wiki edit pipeline — their publicationPolicy records personallyIdentifiableData: false, playerScopedState: false, and a moderationBypass note that values are "published by wiki-service from signed seasonal rollups." The ripple feed is the interesting one: it carries cross-cell rippleEvents (a Mansion-Party Hitman assassination reroutes the CoD.BlackoutLedger objective; a Vanguard RTS season win adds relief-caravan lore to the Wukong Pine Gate area before it loads), a worldBossRaids entry for the Eclipse Leviathan (globalHealth: 5000000, phaseCount: 3), and communityRaidEvents that publish shared progress to the companion world surface. The honesty artifact here is load-bearing: every cumulative counter — totalCommunityKills, currentDamage, every progressPercent — is 0, and a dataStatusNote states that this is the "Pre-launch honest state (2026-06-12)" in which the "previously published non-zero values were illustrative and have been removed as fabricated-progress data." The counters fill from live telemetry after the 2026-10-01 launch; the feed refuses to ship invented progress.

Sophia-grounded wiki summaries — opt-in and cited#

V4/wiki/ai-summary-policy.json defines the one AI surface in the content group, and it is fenced exactly like the rest of the platform's generative seams. The Sophia.WikiSummary.Grounded assistant is off by default (optIn.required: true, defaultEnabled: false) and returns a summary only when the request carries the x-v4-ai-summary-opt-in: true header, logging a WikiSummaryOptIn.Accepted audit event. Generation is grounded: sourceManifests restricts it to the community wiki, the two world-state feeds, and the operator table; citationRequired: true and maxWords: 70 bound every answer; and a forbiddenInputs list bars "player private notes," "unpublished datamines," and "personal account state." Each shipped pages entry carries its citations with a sourceId and a locator — so a summary of the R6 Modern rules cites community-wiki:modeRules.V4Mode_Tactical_R6Modern, not an ungrounded paraphrase.

Creator tools#

The esports & tournament toolkit — manifest over real spectator C++#

V4/tools/esports/esports-toolkit.json is the page's strongest code anchor. Its tournamentBuild block describes a real, separable server target: a buildFlag of V4Tournament, a serverTarget of V4TournamentServer, a targetFile of V4/ue/Source/V4TournamentServer.Target.cs, a requiredCompileDefinition of V4_TOURNAMENT_BUILD=1, and competitive features always on (broadcast_tools, observer_cameras, pause_on_disconnect, forced_replay_export) toggled by the -v4tournament=1 -v4broadcast=1 -v4observercameras=1 -v4pauseondisconnect=1 command line. The modWhitelist makes a tournament reproducible: rejectUnlistedMods and requireExactVersion are true, each allowed mod is pinned by sha256, and serverEnforcement is reject_client_loadout — a client carrying a non-whitelisted mod is bounced. brackets syncs first-party single/double-elim and round-robin (matchReporting: "server_authoritative") with external Challonge and Start.gg providers (webhookIngest, a 60 req/min rate limit). antiCollusion ships tuned detectors for the two modes where collusion pays: an RTS.Team watcher on shared_vision_without_engagement, resource_transfer_spikes, and mirror_pathing (3 evidence windows), and a Tactical.SearchAndDestroy watcher on plant_defuse_avoidance, round_throw_pattern, and uncontested_objective_pathing (4 evidence rounds), each routed to its own integrity review queue.

What makes the toolkit real rather than aspirational is broadcastExtras. Every source field names a BlueprintPure method on a compiled class in V4/ue/Plugins/V4Mode_Spectator/Source/V4Mode_Spectator/Public/V4SpectatorModeSystems.h: UV4BroadcastCameraDirector::BuildObserverCameraPresets and BuildPictureInPictureLayout (≤4 PiP slots), UV4SpectatorEsportsOverlayService::BuildSponsorLowerThird (with a ValidateLowerThird gate and a 15 s display cap), and UV4LiveReplayRewindService::BuildRewindRequest (≤30 s, with BuildReplayBuffer and CanServeRewindRequest). The observer is provably read-only: UV4SpectatorPolicyService exposes BuildReadOnlyPolicy and CanIssueGameplayCommand, so an observer feed cannot perturb the match — the same gameplay-inert discipline V2 enforced on its AI broadcast chain. The wildcardMode (referee-approved, server-seeded Roulette variants) reads its rules from DA_WildcardRouletteRules.uasset.v4asset.json in the same plugin.

flowchart LR M["esports-toolkit.json<br/>broadcastExtras.source"] --> C["V4Mode_Spectator (C++)"] M --> R["V4Mode_Replay (C++)"] C --> D["UV4BroadcastCameraDirector<br/>BuildObserverCameraPresets / PiP"] C --> O["UV4SpectatorEsportsOverlayService<br/>BuildSponsorLowerThird + ValidateLowerThird"] R --> W["UV4LiveReplayRewindService<br/>BuildRewindRequest (≤30s)"] P["UV4SpectatorPolicyService<br/>BuildReadOnlyPolicy"] --> G{"CanIssueGameplayCommand?"} G -->|"observer feed"| NO["false → gameplay-inert"] D --> NO O --> NO W --> NO

Authoring editors and the mod sandbox#

The creator authoring surfaces — the per-cell Mission Editor, the RTS Map Editor, the 2D Stage Editor, the Hitman Contract Author — are the part of this group that is honestly product spec in V4_features.md, with no editor backend under the grounding directories. The Contract Author does appear in the shipping data as a ruleset (V4Mode_Stealth_ContractsAuthor in the wiki's modeRules, requiring creators to "define target, method, and disguise constraints" with "published contracts enter moderation before featuring"), and the validation philosophy (load-in-PIE, AI path-test, recorded play-through) is specified — but the editors themselves are a surface, not code here. What is real on the creator-content path is the sandbox the published content loads through: V4/ue/Source/V4Modes/ ships V4ModeBootstrapSubsystem and UV4GameFeatureAction_ActivateModeAssets, the Game-Feature activation machinery that lets a mod load as an isolated plugin (so a crashing mod is auto-disabled, not fatal). Cite the spec for the editors; cite V4Modes for the sandbox.

Community features#

Player of the Week, galleries, squads & newsletter#

V4/community/community-features.json is the community-program contract, and its fields are concrete enough to audit. Player of the Week runs a six-state machine (SubmittedEligibilityCheckedSafetyReviewedEditorialShortlistWinnerScheduledPublished) with real eligibility gates (minimumAccountAgeDays: 30, minimumMatchesPlayed: 25, activeSanctionPolicy: "disqualify", requiresReplayEvidence: true, requiresTelemetrySnapshot: true) and an explicit, weighted selection rule — selectionWeights of telemetryStandout: 45, communityVote: 25, sportsmanship: 20, esportsImpact: 10. The current winner carries an evidence replay id and a telemetry snapshot id, and the auditLog shows the hand-off chain across community-service, moderation-service, and staff-community-lead. The gallery runs the same accept-by-default-no posture as workshop content: a SubmittedAutomatedScanHumanReviewApprovedPublished/Rejected flow with an automated classifier whose thresholds are explicit (nudityReviewThreshold: 0.6 / nudityBlockThreshold: 0.85, violenceReviewThreshold: 0.65 / violenceBlockThreshold: 0.9), a requiresReplayIdForReplayClip rule, and an appealRoute. The seeded submissions include a rejected one — gallery-rejected-rights with rejectionReason: "RightsPattern" — so the contract demonstrates the no-path, not just the happy path; the 24-slot showcase binds the DA_CommunityGallery / WBP_GalleryShowcase / L_UI_Gallery / DA_FocusGraph_Gallery descriptors. The Squad Showcase (owned by creator-relations-service) rotates approved creator squads weekly with chaptered VODs and featuredFromUtc/featuredUntilUtc windows, and the newsletter is privacy-first: consentPolicy requires doubleOptIn, oneClickUnsubscribe, requiresRegionCapture, and a minimumAgeGate of 13, dispatched biweekly across four segments.

The cross-surface content network#

V4/content-network/cross-surface-content-network.json is the connective tissue: one v4-account SSO realm (issuer https://auth.v4.game, singleLogout: true) spanning four surfaces — the companion app, community wiki, public roadmap, and spectator portal — each with its own idle and absolute timeouts, refresh-token rotation, and a requiresStepUpFor list that forces re-auth on sensitive actions (store_purchase/account_link on the companion, protected_edit/rollback on the wiki, community_pick_vote on the roadmap, tournament_admin on the spectator portal). The public API exposes a GraphQL endpoint at /api/public/graphql with a REST compatibility shim that preservesRoutes for roadmap, wiki, and world-state reads, stamps an X-V4-Rest-Shim header, and is backwardsCompatibleForMajorVersions: 1. Two tiers gate it — a keyless free tier at 60 req/min (roadmap:read, wiki:read) and a creator tier at 600 req/min requiring an OAuth app and adding drops:read and creator:analytics — registered through the /developers/oauth-apps portal (max 5 redirect URIs, https-only schemes, reviewRequiredFor: ["creator"]). The same file restates the wiki's topTrafficEditProtection (top-100 pages by 30-day views, reputation-80 to edit, quarantine_for_review otherwise) and the community-moderator role (72-hour rollback authority, audit required), defines roadmap voting (3 per-account votes on Planned items, one quarterly communityPick promoted at a minimumVerifiedUpvotes of 5000 "after fraud review"), and lists the five pushChannels (patch-notes, esports, friend-online, contract-refreshed default-on; sale default-off).

How it connects#

These surfaces are the connective tissue between the fight and the player's life around it, and they lean on two sibling groups. The replay vault, ghost archive, spectator theater, and the AI Director that the wiki and codex describe are detailed in ./modes-training-replay-signature-and-ai-director.md; the esports broadcast chain this toolkit feeds, the matchmaking and account backbone the SSO and public API ride on, and the tournament networking are the subject of ./online-services-networking-and-esports.md. The data-and-content pipeline underneath all of it — how the *.uasset.v4asset.json descriptors, the DT_* source tables, and the schema-versioned JSON contracts are authored, validated, and cooked — is the architecture companion ../architecture/build-data-content.md. The constants across the whole group: data-shaped and schema-versioned, read-only and audited where it touches the live world, and honest about the difference between a shipped contract and an authoring surface still on the roadmap. The feature hub is ../V4_features.md.