UNREAL ENGINE 5.8 · C++ PLUGINS
Multiplayer
Game System
Build your world. Make it playable together.
A practical handbook for the lobby, persistent characters, equipment, progression, quests, companions, rides and a shared world. Start with the walkthrough, then follow each feature from its menu to its editable assets.
4 menu groups2 character families · CMC + MoverSolo + co-op shared storyKeyboard + gamepad controls
How to read this handbook. Chapter 1 gets you started. Chapter 2 explains every Lobby tab. Chapters 3–15 cover character and world features. The last chapters cover editor tools, extensions and verification. Use the search box to find settings, assets or troubleshooting steps.
Build status, without guesswork. This guide describes the current implementation and its example content. Setup recipes and feature checks are included; they are not a claim that every production asset, packaged build or live EOS session has passed acceptance. Example meshes are replaceable. See
verification and known limits.
No matching sections. Try “inventory”, “weather”, “save” or an asset name.
01 CHAPTER 01
First launch & project setup
Find the correct assets, understand what setup changes, and take a short tour before authoring your own content.
What is included
Nice Lobby supplies the multiplayer front end. The gameplay plugins extend it with components on PlayerState, GameState and the existing character children. Character movement stays in the inherited CMC or Mover implementation.
Build and enable the plugins
- Open
MultiplayerGameSystem.uproject in Unreal Engine 5.8. Build the NiceLobbySystemEditor target after native changes, with the editor closed so plugin DLLs can link. - Check Edit → Plugins for Nice Lobby, Nice Game Core and the desired feature plugins. Enable Python Editor Script Plugin and Editor Scripting Utilities for the editor tools. Customization also needs Mutable. Restart after changing native plugins.
- In Project Settings, check the Nice Lobby data asset references. The project uses
/Game/NiceLobby/Data for lobby assets and /Game/NiceGame/Data for gameplay catalogs. - Use the existing child characters
BP_NGSCharacter_CMC and BP_NGSCharacter_Mover. Keep their parent locomotion graphs; add feature configuration to these children or components.
Set up the playable example
- Save your work. In the editor choose Tools → MGS → Set up playable demo. This imports included equipment meshes, assigns example catalog presentation, creates or updates
L_MGS_Demo, and points the lobby level list at it. - The setup also configures example audio routing, input authoring and demo introductions. Read its report at
Saved/Automation/MGSPlayableSetup.json; resolve warnings before relying on those optional settings. - Start from the character selection screen. Select a character and play solo. The configured single-player destination should be MGS Field Camp. For co-op, use Lobby → Host Game and select that map.
- Look at a nearby pickup and press F / X · Square. Open the menu with Backspace. Inspect Equipment, learn a skill, track a quest, then visit a ride workshop.
Example setup edits assets. It updates catalogs, lobby destination and tagged demo actors. Keep project backups or source control. On your own map, use the separate population tool only after reviewing
its replacement rules.
Check it in play. An item must exist as an actor in the level before you can pick it up. A catalog entry defines an item; it does not place that item in the world.
Your four lobby assets
Select these in Project Settings → Nice Lobby. Gameplay catalogs are selected separately in each plugin’s settings. A catalog that is not active is not used to populate reference pickers.
Default controls at a glance
These are example defaults. Settings → Controls stores player bindings. Releasing the companion modifier restores the normal combat D-pad behavior. Input contexts and existing project mappings may have additional actions.
02 CHAPTER 02
Lobby · playing together
The Lobby group contains the original multiplayer tabs, organized as a vertical menu. Transport and gameplay state are separate: signing in does not itself host a game.
What the Lobby does
The lobby lets players discover or create sessions, manage the current team, connect with friends and view online records. Use LAN for local network sessions or Epic Online Services for configured online play. The same gameplay components run in solo, listen-server and dedicated-server worlds.
- Open
DA_NLS_Levels and add your map with a readable name and stable ID. Choose its map asset and compatible game modes. - Open
DA_NLS_GameSettings. Keep the intended PlayerController and the extended NGSPlayerState / NGSGameState integration. Changing these back to plain engine classes removes feature state. - Add Player Starts to the map. Use Tools → MGS → Nice Lobby: Add Player Starts for the existing example placement helper.
- Host with one player, join from another process, and verify both clients can open the same organized menu.
Find Games
Game menu → Lobby → Find Games
Search the selected online or LAN service, review the returned sessions and join an available session. Empty results can mean no compatible session is advertising; it does not mean that items or character data are missing.
- Use Settings → Connection for the intended network mode and sign-in.
- Refresh the session list after the host has created a session. Check compatible build/version, map availability and free player slots.
- Select the session and join. A password-protected session requires its password.
- If a local test fails, check host advertisement, firewall and LAN subnet before changing gameplay catalogs.
Check it in play. Joining changes the client’s world to the host’s map; it should not create a separate solo campaign.
Host Game
Game menu → Lobby → Host Game
Choose a hostable map and mode, then configure the offered session options. The map/mode entries come from DA_NLS_Levels, rather than arbitrary typed package names.
- Add your map to Multiplayer Maps and associate it with the desired mode.
- Configure the mode’s minimum players, countdown and ready requirements. The field-camp example is intended for immediate exploration.
- Host, then ask a second test process to join. Use Team for party management and subsequent level changes.
- For packaged builds, include every destination and its content in cooking rules. A working editor map reference is not proof that the packaged map exists.
Team
Game menu → Lobby → Team
Shows the connected roster and the match/team controls allowed by the current mode and player role. Ready checks, leadership and level changes belong here. The old persistent “Press READY…” world-screen hint has been removed.
- Set ready/countdown behavior on the mode definition, rather than adding instructions to the world HUD.
- Test host and non-host permissions separately. A client should not gain host controls simply by opening Team.
- When changing maps, retain the configured seamless travel settings and test both character families. The project includes an optional pawn-retirement workaround for Mover travel.
Friends
Game menu → Lobby → Friends
Uses the configured online identity and friends service for the exposed friend and invitation actions. Available actions depend on the signed-in service; a LAN-only player will not acquire an Epic friends list.
- Configure and sign in to EOS with authorized test accounts.
- Verify the expected account identity before testing friends or invites.
- Test invitation delivery and joining with two real accounts. Local synthetic network tests do not validate the Epic social overlay or account permissions.
Online Stats
Game menu → Lobby → Online Stats
Displays the online statistics supported by the lobby’s configured subsystem. Define the intended stats and service policies for your product. Gameplay XP, equipment modifiers and shared story progression have their own authoritative feature records; they are not automatically the same thing as an online leaderboard.
Check it in play. Test stat submission and retrieval on the actual online service. An offline display or successful LAN match does not validate backend writes.
03 CHAPTER 03
Character customization
Mutable generates the appearance; the plugin validates, saves and replicates the selected parameters. Character identity and locomotion remain separate.
Using Customization
Game menu → Character → Customization
Choose a configured appearance profile, then edit its exposed scalar, color, option, toggle or mesh choices. The inspection stage shows the character and supports rotation and zoom. Appearance choices replicate; generated geometry is built locally from the same authored content.
Check it in play. Select an option, wait for generation to finish, close the menu, and ask another client to confirm the public appearance. Save/rejoin to check persistence.
Author a Mutable profile
- Create or open a Mutable Customizable Object and compile it. Start with a skeletal mesh and output component compatible with the target character.
- Create parameters in the Mutable graph first. In
DA_NGS_Appearance, add a profile with a stable ID and readable Name; assign its Customizable Object. - Choose the Mutable output component from the list. Leave Pawn Mesh Component at None for automatic body selection, or choose the intended skeletal component when a character has multiple meshes.
- Add exposed parameter definitions. Select an existing graph parameter and the matching type; configure labels, ranges, defaults and option/mesh mappings.
- Select this catalog in Project Settings → Nice Character Customization. Test one profile on CMC and Mover before adding more.
Skeletons, idle preview & missing choices
Mesh options must match the character’s animation skeleton or use an intentionally retargeted character setup. A Manny, Quinn or UEFN mesh is not interchangeable merely because it appears humanoid. Rider animation sets also need explicit skeleton matches.
- In Project Settings → MGS Presentation → Character inspection, assign a compatible idle sequence for each supported skeleton.
- If the preview is blank, verify the pawn has a visible rendered skeletal component and that the inspection target/material is available.
- If generation never completes, compile the Mutable object, check its output component name and examine the Output Log.
- If an option is absent, add it to the active Mutable graph and profile; reopening a selection list reads currently configured definitions.
The Mutable documentation is the upstream graph reference. This chapter describes the project adapter; it does not replace Mutable’s graph authoring manual.
04 CHAPTER 04
Inventory · equipment & backpack
Items are defined once in a catalog. Owned instances, equipped gear and public appearance are handled separately so multiplayer clients cannot grant themselves equipment.
Equipment board & inspection
Character → Inventory → Equipment
The board places wearable slots beside the central weapon groups. Backpack is its own equipment slot below Back. Wearable boots belong in Equipment; supplies and quest objects belong in the Backpack storage tab. Ammunition rows show only owned ammo types.
- Select a gear slot or weapon group. The inspection panel filters to relevant owned items.
- Cycle Previous / Next or use left/right navigation. With multiple candidates, the focused item is emphasized and neighboring candidates remain selectable.
- Read white candidate values and green/red changes compared with equipped gear. Zero changes are neutral.
- Choose EQUIP or UNEQUIP. The server checks ownership, skill requirements, capacity and slot compatibility.
Give the carousel real item art
- Open
/Game/NiceGame/Data/DA_NGS_Items and choose the item definition. Assign Icon and/or a Preview Mesh. Armor Mesh supplies a skeletal presentation fallback. - For weapons, assign the mesh in
DA_NGS_Combat; inspection can resolve the corresponding weapon definition. - Give the player at least two or three compatible variants through pickups or trusted grants. One owned item creates only one candidate.
- Test selecting a neighbor and equipping it, then return to the character preview. Static Equipment Mesh, socket and relative transform can attach a wearable prop; skeletal armor must be compatible with the body skeleton.
A symbol is a fallback. An item without authored art uses a line symbol. The carousel cannot invent the armor mesh from the item’s name. The included generated props are examples, not final photorealistic equipment.
Backpack storage sections
Character → Inventory → Backpack
Non-equipment objects are grouped by their item category, such as consumables, materials, gems, quest items and other supplies. Set a meaningful category when authoring an item. Capacity and carried weight still apply to the entire inventory, including equipped items.
Food or water being visible in this tab does not by itself create eating, thirst or healing behavior. Author or extend the associated use action before describing an item as consumable in your finished game.
Create an item and its stats
- In
DA_NGS_Items, add a definition. Enter a unique stable ID once, then Name, Description, rarity, maximum stack and weight. - Choose an Equipment/Armor Slot for wearable gear, or no equipment slot for a stored object. Configure category and art.
- Add Modifiers and select an existing Character stat. Add new stats in Project Settings → Nice Game Core → Base Attributes.
- Place an
NGSItemPickupActor, select the Reward Item and Count, and assign a visible mesh. A data asset alone does not spawn a pickup. - Use a new character or pick up the item in play. Starter loadouts are one-time grants, not a refresh after every edit.
Modifier calculation: max(0, (base + total flat) × max(0, 1 + total percent)). Percent 0.10 means 10%. Critical chance 0.05 as a flat value means five percentage points; the final chance is clamped to 0–1.
Inventory checks & common problems
05 CHAPTER 05
Skill tree · progression & professions
Branches organize unlocks. Prerequisites and available points determine whether a rank can be learned; gameplay systems decide what that unlock enables.
Browse branches and preview a skill
Character → Skill Tree
Select a branch to inspect its connected skills. The preview describes the focused skill, rank, cost, requirements and effects. Learn a rank when its requirements are fulfilled. XP and skill points are authoritative character progress.
Add a skill, branch or prerequisite
- Open
DA_NGS_Skills. Add a node with stable Skill ID, readable Name and a description of the actual effect. - Select Branch from the authoring list. To add another, use Project Settings → Nice Game Authoring Lists; branches then become available to the UI and selectors.
- Set Max Rank and Point Cost. Add required skill/rank pairs by selecting existing nodes.
- Add Per Rank Modifiers using the Character stat list. Define new stats centrally instead of typing unknown modifier IDs.
- Test the node both before and after learning prerequisites, then reload the character and confirm its rank.
What an unlock actually does
Multiple prerequisites require all listed conditions. Missing references, duplicate IDs, cycles and impossible required ranks invalidate a skill catalog. Server learning rejects overspending and invalid ranks.
Connect the action. A Fishing skill record permits a fishing system to check the learned rank. It does not create a fishing minigame. Use GetRank or the skill requirement fields in the feature that performs the action. Apply the same pattern to cooking, professions and custom activities.
Check it in play. A locked action should fail before learning its required skill and succeed afterward. Verify both server authority and the player-facing explanation.
06 CHAPTER 06
Quests · objectives & rewards
Main and side quests observe trusted gameplay events. The quest journal is personal; the campaign story described later is shared by the party.
Accept, track and claim
Character → Quests
- Select an available quest and accept it. Read the objective before collecting or interacting with its target.
- Track it to send its destination to the map and minimap. Only one destination is actively tracked at a time.
- Perform the objective. The example Gather Supplies requires acquiring three Wood after acceptance; existing stored Wood is not newly acquired progress.
- Claim the reward when complete. If inventory or skill requirements prevent a grant, clear the problem and claim again. Claims are recorded to prevent duplicate rewards.
Create a quest without memorizing IDs
- Add a definition in
DA_NGS_Quests: stable ID, Title, Description and Main Quest flag. - Choose Required Completed Quests from the available quest list. This means those quests must be completed and rewards claimed first; an empty list imposes no prerequisite.
- Add objective Description, Progress Event, Event Subject and Count. Select an existing subject appropriate to that event.
- Set XP, Item rewards and Skill Unlocks using the corresponding catalog lists. Set the map location to the actual destination in your level.
- Select the active catalog in Nice Quests settings. Test acceptance, incremental progress and a single reward claim.
Custom events and reward safety
A new name in an event list is only a selectable definition. Trusted server gameplay must emit it through UNGSProgressionComponent::RecordEvent. Do not expose an RPC that lets clients submit arbitrary objective counts.
Quest references must not point to the same quest or form prerequisite cycles. Reward grants preflight the bundle and use persistent claim identifiers. Keep definition IDs stable after release so saved progress continues to resolve.
07 CHAPTER 07
Combat · weapons, styles & attachments
Physical weapons carry meshes and ammunition. Fighting styles define unarmed combat behavior. Both can depend on the skill tree.
Equip and use combat
Character → Combat; Inventory → Equipment for owned weapons
- Acquire the physical weapon and any required ammunition. Learn its skill prerequisites.
- Select the weapon or an unlocked fighting style. Toggle combat input with C / D-pad Right.
- Aim with right mouse / left trigger, attack with left mouse / right trigger, and reload with R / X · Square.
- Holster or leave combat mode before relying on the same button for world interaction. Hold the companion modifier to route D-pad commands to the companion; release it to restore combat behavior.
Author physical weapons and fighting styles
- In
DA_NGS_Combat, use Physical Weapons for guns, rifles, machine guns, rocket launchers and melee objects. Select Required Skill and Required Inventory Item from existing definitions. - Choose melee, hitscan or rocket behavior, damage, range, attack interval, stamina, magazine and ammunition settings as appropriate.
- Assign the hand socket, transform, mesh and compatible attack montage. Match the montage skeleton and the slot used by the character’s animation graph.
- Use Fighting Styles for Fists, Kung Fu, Street Fight, Kick Boxing and Karate. Configure timing, damage, reach, stamina, required skills and attack animation there. Styles have no weapon mesh or magazine.
Attachments, paint and mesh variants
- Create attachment definitions with an attachment slot, compatible weapons, required inventory item, socket/transform and mesh.
- Configure supported modifiers such as damage, magazine size, aim FOV, laser or flashlight. Only one attachment occupies a slot.
- Unload the weapon before modifying attachments. Maintain ownership of required parts.
- For finishes use the configured Color/BaseColor material parameter, permitted mesh variants or valid decal materials. Preview and test the actual material; a parameter name alone cannot recolor a material that does not expose it.
Vitals and multiplayer behavior
The server validates skill/item ownership, cooldown, stamina, ammunition and aim, then performs the hit or projectile action. Clients do not choose damage or confirmed hit actors. Vitals replicate; equipment and skills affect maximums and relevant combat values. Player damage is off by default in Nice Combat settings.
Production combat scope. The current examples use present-time authoritative hit detection. Network rewind, complete martial-arts animation sets, final audio and weapon balance require further content and integration. An assigned montage must already exist and be compatible.
08 CHAPTER 08
Companions · commands, factions & guide AI
A companion can follow, fight, guard, fetch and interact. Optional conversation uses a replaceable provider gateway and is separate from authoritative gameplay commands.
Keyboard and D-pad command mode
Character → Companions
Summon an owned companion and select it for commands. The small cross-shaped command HUD corresponds to the four D-pad directions. Default commands are Up Attack, Down Defend, Left Follow and Right Stay.
- On keyboard hold Left Alt, then press 1, 2, 3 or 4. On gamepad hold L1 / left shoulder and use the D-pad.
- Assign the four quick commands in the Companion tab. Change the actual input bindings in Settings → Controls.
- Aim at the relevant actor/location for a targeted command. Ensure the companion has a valid navigation route and permission for the requested interaction.
- Release the modifier. Normal D-pad combat behavior becomes active again; companion mode is not latched on.
Create an NPC or companion
- In
DA_NGS_NPCs, define a character with stable ID, readable name, faction, presentation and behavior settings. Define factions and their relationships in that catalog. - Assign compatible skeletal mesh/animation assets. Set idle/movement animations or an appropriate Anim Blueprint for the authored NPC.
- Grant companion ownership through trusted gameplay or the configured starter companion option. Ownership is separate from placing an ordinary NPC in the level.
- Provide navigation and reachable interaction targets. Test Follow, Stay, Attack and Defend, then targeted fetch/interact actions.
- To support mounting, configure the mountable component, seats and matching rider animation sets as described in the Rides chapter.
Relationships and behavior
Faction relationships can make an NPC friendly or hostile as gameplay changes reputation. Apply faction/reputation changes through trusted server events. Companion inventories, command permissions and dialogue routing must remain tied to the owner; public NPC appearance and movement can replicate to nearby players.
Check it in play. A second client should see the companion move but should not gain access to the first player’s private companion records or unrestricted commands.
Optional conversational provider
Start with offline guidance. For a model-backed guide, use Services/CompanionAI on the trusted server and enable conversational AI in Nice NPC settings. Provider credentials stay in the gateway process environment.
The adapters include OpenAI-compatible endpoints, Anthropic, Gemini, Azure OpenAI, Bedrock and Cohere, plus named compatible presets including Ollama, Groq, Mistral, DeepSeek, xAI, OpenRouter, Together and Fireworks. Provider selection and exact model availability are operator configuration, not a promise that every model supports every API feature.
- Read the gateway setup in CompanionAI.md. Set the gateway URL/token on the Unreal server and the provider/model/credentials on the gateway.
- For local inference choose an installed, licensed Ollama model suitable for the machine. Hosted free tiers may have quotas and changing eligibility; check current provider terms.
- For a new compatible provider, add a preset or use the compatible adapter. For a native API, implement the adapter contract in
providers.py, register it, and add injected-transport fixture tests. - Test a live account explicitly before release. AI dialogue must not directly award items, execute commands or override server permissions.
Provider extension guide. The linked engineering chapter documents environment variables, payloads, response parsing, secrets, timeouts, fixture tests and how to add a provider. Live services and changing pricing are not revalidated by this offline handbook.
09 CHAPTER 09
Vehicles & mounts · customization
Choose the ride, then compatible parts. Garages, stables, hangars and other workshops can sell different parts and services.
Buy, preview and fit parts
Character → Vehicles & Mounts
- Select an owned ride. Choose a category to see compatible paint, cosmetic or performance parts.
- Select a candidate to preview it and compare current values with green/red differences. Previewing does not buy or fit the part.
- Buy & Fit requires a nearby open workshop that stocks the part and enough of its configured currency.
- Fit Owned Part and Restore Stock Part work anywhere, including while mounted or driving. Purchased ownership remains when stock parts are restored.
Create a ride profile
- Add a profile in
DA_NGS_Rides. Choose a static mesh, skeletal mesh, or a complete Actor Class / driver Blueprint. A skeletal mesh takes priority over the static example mesh. - Configure speed/turning for the native example driver, or implement
NGSRideDriver on your custom actor and connect validated ride input to its actual movement system. - Configure seats: transform, saddle/seat socket, safe exit offset and driver/passenger role. Keep a single driver seat.
- For skeletal rides assign an Anim Blueprint or compatible idle/move clips. The Anim Blueprint takes priority and can read SpeedForAnimation.
- Add customization points for the categories the ride supports. Repeat Wheels four times for a car or twice for a motorcycle; place each point/socket on the actual mesh.
How the system selects a riding animation
Every seat has Rider Animations entries keyed by the rider’s skeleton. The runtime matches the current rendered character skeleton to that list; it does not guess a horse or car animation from the ride name.
- Add one entry for each supported character skeleton.
- Assign a looping Riding Pose or a rider Animation Class. The rider seat pawn exposes RideSpeed for your blend logic.
- Optionally assign compatible Enter Montage and Exit Montage. The rider/restored character graph must contain the required montage slots.
- Test each seat with both character families. Boarding trajectories, root motion and retargeting are authored animation work; an empty entry leaves the replaceable default pose.
Create a garage, stable or specialist vendor
- Open
DA_NGS_RideCustomization. Define categories, ride stats, currencies, part definitions and services. References select available definitions. - Create a child of
BP_NGS_Garage, BP_NGS_Stable, BP_NGS_BikeShop, BP_NGS_Hangar or BP_NGS_Marina. Replace its building art as needed. - Configure accepted profiles, Parts For Sale, Services and service radius independently for each vendor. Empty stock sells nothing.
- Place the building in the level and test a purchase while near it and while out of range. Keep Require Workshop For Fitting disabled to retain anywhere fitting.
- For production physics implement
NGSRideTuningReceiver.ApplyRideTuning to apply engine/performance values to the actual movement component. Connect authoritative condition/fuel logic to UpdateRideCondition if using repair/refuel services.
What the example driver provides
The built-in rides are replaceable kinematic examples. A mesh alone does not provide Chaos tire physics, helicopter dynamics, buoyancy, animal gait or a train track system. Paint presets require compatible material parameters. Dynamic construction-script visuals may need an explicit profile preview mesh because inspection does not execute gameplay construction behavior.
For all part fields and the future generic-car integration recipe, see RideWorkshops.md.
10 CHAPTER 10
Maps · terrain, markers & navigation
The world map shows level imagery and points of interest. The minimap follows the player and guides the currently tracked destination.
World map and waypoint controls
World → World Map; minimap at the top right in play
- Open World Map. Select an accepted quest or place a custom marker. Name the marker if desired.
- Track one destination. The world map draws the server’s complete navigable route when available. The minimap points toward the destination, including targets beyond its edge.
- For controller placement choose Focus Map, move the cursor with left stick, pan with right stick, place with X / Square, center with Y / Triangle, and zoom with D-pad Up / Down.
- Use the marker list to track, rename or delete private markers. Markers remember their map, so travel does not draw another level’s points at incorrect coordinates.
Show the level, not an empty square
- In Project Settings → Nice Maps, enable automatic level capture and geometry bounds, or set explicit World Center and World Span.
- Provide visible loaded level geometry. The local renderer captures a top-down atlas; the server performs navigation and does not render map images.
- Optionally assign an authored World Texture with matching coverage and north-up orientation. North is Unreal +X.
- Use a separate authored map strategy for floors/interiors or unloaded world-partition regions. The capture can only show loaded geometry and may see roofs rather than rooms.
The minimap projects over the shared terrain atlas each frame so player motion need not wait for a moving scene capture. Terrain imagery refreshes less often than icons and player tracking; changing geometry may appear on the next atlas refresh.
Home, vendors, quests and other icons
- Add
NGSMapIconComponent to an actor or place an NGSMapLandmark. Select the category and readable label. - Use Home for the start location, Vendor for shops, Quest for objectives, Companion for owned guides/friends, and Ride for mountable vehicles/animals. Treasure, NPC, Resource and custom categories are also supported.
- Define additional categories in Nice Game Authoring Lists. Keep replicated world actors’ icon state on the authoritative actor.
- Check labels and icons at multiple zoom levels. The minimap intentionally emphasizes only the actively tracked destination, rather than every world icon.
Build a usable shortest path
- Add a Nav Mesh Bounds Volume covering walkable space and the relevant destinations. Build navigation or enable runtime generation. Press P in the editor to inspect coverage.
- Ensure the player and target can project onto the navmesh. Put quest destinations on reachable ground, not inside a wall or above an inaccessible roof.
- Track a destination around an obstacle. The route should follow the navigation path instead of crossing the obstruction.
- If no complete path exists, use the reported status to fix navigation coverage. Direction guidance is still useful, but it is not a fabricated walkable route.
Default navigation area costs give the shortest navigable route according to the navmesh query. Custom costs can prefer safer or cheaper terrain. Walking navigation does not implement separate air, water or rail routing.
11 CHAPTER 11
World interactions · pickups & resources
Interact with actors in the world using the focus prompt. There is intentionally no separate Interactables menu tab.
Focus, prompt and interaction
Look at a nearby object to focus it. The HUD displays its label and interaction key. Press F / X · Square outside the combat input context. The server still checks distance, line of sight, requirements and capacity before granting anything.
Check it in play. Try a pickup with free space, then with a full backpack. Failure should leave the object available and explain the unmet condition.
Place a door, harvest node or chest
- Place
NGSInteractableActor or a Blueprint child. Choose Door, Button, Harvest, Dig, Pickup, Break Rock or Chest. - Assign a suitable visible mesh/collision and an action Label. Door examples rotate their mesh; harvested/depleted objects hide and disable collision.
- Select any Required Skill, Required Key, Reward Item/Count and XP. Enable Consume Key only when intended.
- Place the object within reachable space, then test both success and missing-requirement cases. Add a map icon if players should discover it on the world map.
Custom behavior and persistence
Implement NGSInteractable on a custom actor for CanInteract, Interact and InteractionLabel. Keep server-side permission checks for AI and other trusted callers too. The owning player component is the client RPC entry point; focus alone grants no authority.
World persistence boundary. The current actor open/depleted state replicates during the world lifetime. Saving a character or checkpoint does not automatically serialize every placed door, tree and chest. Add world-actor records if your campaign must restore those states after a restart.
12 CHAPTER 12
Shared story · scenes, choices & rewards
One server is one active co-op story party in the current implementation. Personal quests and inventory remain per character.
Play and vote on the story
World → Story
Read the active scene and fulfill any required event. Choose a branch by voting. A strict majority is required: one solo vote, both players in a two-person party, or two of three players. Votes can change before a branch wins; ties wait. Departures recalculate the active roster.
Rewards are tracked once per character per campaign, including eligible history rewards for late joiners. A full backpack can leave a reward pending rather than discarding or duplicating it.
Author an episode and its branches
- In
DA_NGS_Story, add stable node IDs and readable narrative. Use the authoring lists for episode, scene, event, area and boss references. - Add choices and select existing next nodes. Configure an optional required progress event and subject for scenes that wait on gameplay.
- Assign rewards, area unlocks, boss unlocks and optionally a Level Sequence. Keep sequence actor bindings valid in the destination map.
- On doors, spawners or encounters query IsAreaUnlocked / IsBossUnlocked before allowing access. A story flag does not create a level or boss encounter by itself.
- Test solo voting, a party tie, a majority, a player leaving and a late joiner. Check reward claims after save/travel.
Campaign ownership
Shared story is stored on the authoritative host/server under the configured Campaign Slot in Nice Story settings. Character quest/reward records are separate. Different hosts do not automatically share a campaign file through EOS sessions. Multiple independent story parties in a single server and automatic host migration need a backend/party extension.
13 CHAPTER 13
Weather · time & seasons
The server owns the calendar and weather selection. Clients render the same climate locally, including transitions and time-of-day lighting.
Host weather controls
Settings → Weather
- As host, enable or disable Day Cycle. Choose the current hour to set the time. Remote clients can inspect the state but cannot change shared weather.
- Enable Season Cycle for calendar progression, or disable it and select Spring, Summer, Autumn or Winter.
- Leave Automatic Weather enabled for weighted seasonal presets, or select Clear, Overcast, Rain, Snow or Fog manually.
- Selecting a manual preset disables automatic replacement. Re-enable Automatic Weather when the authored climate should resume selecting presets.
Set up climate and visuals
- Select
DA_NGS_Weather in Project Settings → Nice Weather & Seasons. Configure real seconds per day, days per season, latitude, start hour and transition duration. - In the catalog, author each preset’s name, season, selection weight, duration range and climate values.
- Place one
NGSWeatherEnvironment in a level. Avoid overlapping independent sun/fog systems unless you deliberately integrate them. - Assign Niagara rain, snow and leaves systems/materials as desired. The example fallback effects are replaceable. Connect the surface parameter collection to your actual landscape and prop materials for wetness or snow response.
- Verify a joining client receives the current calendar/preset and that travel restores the evaluated calendar, rather than reusing a previous world’s timestamp.
Weather checks
Check it in play. Pause the day cycle, wait, and confirm time stays fixed. Force snow on the host and confirm another client sees it. Resume automatic weather and season progression. Save/load a checkpoint and compare the calendar.
Visible precipitation is separate from accumulation gameplay, temperature damage, tire friction or animal behavior. Those systems should read the climate and apply their own authoritative rules.
14 CHAPTER 14
Local saves · characters & checkpoints
Character persistence is automatic. Named checkpoints are a host-managed snapshot of supported character and shared feature state.
Save and load a checkpoint
Settings → Save / Load
- Dismount before making or loading a checkpoint. This restriction is separate from ride-part fitting, which is allowed while mounted.
- Enter a checkpoint name and choose one of five manual slots. Save Here creates a save; an existing slot requires Confirm Overwrite.
- Select Load Checkpoint, then Confirm Load. Loading replaces current host/world progress for the saved supported features.
- Autosave uses its own slot about every two minutes when the local host is eligible. The page lists the available checkpoint metadata.
What is saved, and who can load it
Checkpoint load requires the same character and an available map. A previous valid checkpoint is kept as a backup. Invalid data is rejected; if the primary record is invalid, the reader can try its backup. Saves are stored under the game’s Saved/SaveGames directory.
Checkpoint limits to understand
A checkpoint is not every actor in the world. Arbitrary destroyed props, depleted resources, moving NPCs and custom actors need explicit save adapters/records. Loading restores supported features and the host character, not a blanket rewind of every connected client’s personal inventory.
Cross-host cloud persistence, multiple character selection slots and automatic campaign host hand-over are not supplied by the local save system. Keep stable definition IDs so records remain resolvable after content updates.
Check it in play. Save, acquire or equip an item, load and verify the intended rollback. Repeat with shared story/weather. Also test an unavailable map and a blocked saved position; failure should retain current progress.
15 CHAPTER 15
Settings · audio, controls & connection
Player preferences are distinct from authoritative world controls. Use this group to tune presentation, rebind actions, manage checkpoints or change connectivity.
Graphics and view mode
Settings → Graphics
Adjust the existing quality/display settings and choose first- or third-person view. The example shortcut is V / right stick click. First person uses the character’s head position and control rotation; the original character camera remains the basis for third person.
- Test camera switching on each supported character, while moving and after respawn.
- Check head/body visibility, camera clipping, equipped props and any character-specific camera modifier.
- Treat camera animation, weapon sights and first-person hand animation as authored presentation work when replacing the character.
Audio routing: master, music, SFX, dialogue & mic
- In
DA_NLS_UI, assign Master, Music, Effects and Dialogue Sound Classes plus the Volume Sound Mix. - Route Sound Waves / Cues to the appropriate classes. A slider cannot distinguish music from effects if every sound is routed to one class.
- In Settings → Audio, adjust the channel levels, voice playback and microphone preferences. Test with known sounds in each class.
- For voice, configure the supported online voice service and permissions. Microphone preferences alone do not establish an online voice session.
Check it in play. Play music and an effect simultaneously. Lower only Music and confirm the effect stays audible. Test dialogue and microphone input separately.
Controls and action rebinding
Settings → Controls
- Choose a listed action, begin rebinding, then press the desired key/button. Use Reset to return to the shipped defaults.
- Native MGS actions include companion modifier/directions, view, interact, attack, reload and combat toggle. Movement and other Enhanced Input actions must expose player-mappable settings in their active mapping contexts.
- Give custom Enhanced Input mappings unique names and useful display names. Enable Enhanced Input user settings and register active mapping contexts when extending the input flow.
- Test the new binding in actual play, including after possession, mounting, travel and restart. Resolve overlaps between combat, interaction and the original sample’s actions.
Chat & voice preferences
Use the lobby’s existing chat and voice preferences for the exposed communication behavior. The current service determines voice availability. Test mute, channel behavior and microphone permissions with separate participants; a local text chat or UI toggle does not validate an EOS voice connection.
Go online or continue offline
Settings → Connection
- Choose Go Online to select online preference and start the existing service sign-in flow. Use Lobby → Host Game or Find Games to create/join a session afterward.
- Choose Continue Offline to retain the supported personal feature snapshot locally and leave a multiplayer session through the existing leave flow.
- Review where gameplay progress is stored: online host records and a local offline character snapshot are distinct from a universally synchronized cloud character.
- Test both host and remote-client transitions. The client should not import or load the host’s shared campaign file just by disconnecting.
For the publisher’s EOS product setup and account-level acceptance, see the final chapter. No portal credentials are embedded in this handbook.
16 CHAPTER 16
Tools → MGS · setup & population
All project setup helpers live under one editor submenu. Use repeatable supported entry points rather than historical migration scripts.
Populate a map safely
- Open a saved gameplay map with ground collision and a Player Start. Keep a backup/source-control checkpoint.
- Choose Tools → MGS → Populate current world randomly. The tool uses the first Player Start as its origin and traces for ground placement.
- Review spawned pickups, harvest nodes, doors, workshops, rides and category markers. Adjust positions for your level; the random tool is an example-content aid, not a level designer.
- Generated actors are tagged
MGS.Generated. Running the tool again replaces prior actors with that tag. Untagged designer actors are preserved. Do not tag your own permanent content this way. - Use editor Undo to reverse the population transaction if needed. Save only after reviewing placement and navigation.
Commandlet setup and reports
The supported Python entry points include Tools/setup_gameplay.py, Tools/setup_playable_world.py and the dedicated feature setup tools described by their engineering notes. Run through Unreal’s Python environment, after building native classes. Regular system Python cannot import unreal.
Historical scripts. Many small scripts in Tools are one-time implementation/repair steps already incorporated in source. Do not rerun every script as an installation sequence. Read
Tools/README.md and inspect a script’s scope before using it on customized assets.
Check the Output Log for Python exceptions and the setup completion marker. A commandlet process exiting is not by itself proof that every setup stage succeeded.
17 CHAPTER 17
Authoring lists & extending the system
Define identifiers once; select named references elsewhere. Extend the existing component and menu contracts rather than duplicating character graphs.
Readable definitions and categories
- Create a new definition with a unique stable ID and readable Name/Title in its active catalog.
- Reference it using the available-item/skill/quest/profile selector. If missing, confirm the intended catalog is active and reopen the list after editing.
- Add new shared names such as branches, equipment slots, weapon groups, map categories or story events in Nice Game Authoring Lists. Add new character stats in Nice Game Core → Base Attributes.
- Use the grouped definition panels: identity, visual presentation, requirements/progression and effects/rewards. Expand the group relevant to the task rather than scanning every field.
Add a gameplay feature plugin
- Declare module/plugin dependencies on NiceGameCore and NiceLobby, plus only the features you actually call.
- Derive a replicated
UNGSFeatureComponent with a stable FeatureId. Register it through FNGSFeatures. Choose owner-only versus public replication per field. - Implement validated versioned WriteSave / ReadSave records. Restore dependencies before consumers and reject malformed/newer data without granting resources.
- Derive a
UNGSFeaturePage, register a named menu extension and choose Lobby, Character, World or Settings as its group. Activate by feature ID instead of a hard-coded tab index. - Use
DA_NLS_UI → Menu Extension Classes for a Widget Blueprint override. Preserve focus, input and authoritative action calls when redesigning it. - Test standalone, an owning client, another observing client and a dedicated server. Add meaningful invalid-input and persistence checks.
Preserve CMC and Mover
Gameplay state belongs on the extended PlayerState/GameState, with pawn presentation and input supplied through components. The project’s new character children inherit the sample locomotion and animation graphs. Do not paste the same movement logic into a second base character.
Resolve the actual rendered skeletal component, including child actors when needed. Use explicit skeleton compatibility for appearance, armor, preview idle and rider animations. When adding a new pawn type, verify possession, camera, vitals, interaction, equipped visuals, mounting and travel together.
18 CHAPTER 18
Verification, EOS & troubleshooting
Use a concrete acceptance checklist. A native build, an editor test and a live online session answer different questions.
EOS configuration and developer portal
The gameplay plugins use Unreal replication and the existing lobby transport. EOS does not automatically save an entire world, retarget animations or turn LAN tests into online certification.
- In your EOS product, verify the intended product, sandbox, deployment and client policy match the project’s configured artifact. Keep secrets out of documentation and source control.
- Enable the required identity/session/social/voice or player-storage capabilities for the features you actually use. Configure the artifact encryption key when using the lobby’s optional profile cloud storage.
- Use authorized test accounts with deployment access. Test login, session discovery, host/join, invitations, reconnect, travel and voice with separate accounts and machines.
- Review the existing EOS project configuration before changing portal policies. No additional portal service is required merely to replicate inventory, quests or ride appearance.
- Package and test the same build that players will use. Validate network permissions, cooking, connection failure and account sign-out behavior.
Repeatable development checks
& Tools/run_gameplay_validation.ps1 -Mode Solo
& Tools/run_gameplay_validation.ps1 -Mode RenderedSolo
& Tools/run_gameplay_validation.ps1 -Mode Network
& Tools/run_gameplay_validation.ps1 -Mode ListenNetwork
Run Network and ListenNetwork sequentially because the runners share a port. Native tests are under NiceGame in the Automation window. Reports go to Saved/Automation; rendered captures go under Saved/Screenshots. Provider contract tests live under Services/CompanionAI.
The runtime harness activates only with -NGSValidate in non-Shipping builds and uses transient test records. Also test the ordinary character-select → solo/host flow without that flag; a fixture-populated validation map does not prove the normal player’s map contains anything.
Evidence date matters. Older engineering reports record earlier successful test runs. Use a new report after relevant changes. The handbook is an implementation/setup reference, not a replacement for the latest acceptance report.
Normal-player acceptance walkthrough
- Launch normally, choose CMC, enter the field camp and pick up a visible item using the on-screen prompt. Repeat with Mover.
- Acquire multiple boots, open the equipment carousel, compare and equip them. Confirm idle preview, rotation/zoom and equipped appearance.
- Learn a required skill, harvest Wood, progress a quest and claim its reward once.
- Summon a companion; use the keyboard modifier commands and the gamepad command cross. Release the modifier and verify combat mappings resume.
- Track a quest/custom marker. Confirm terrain, icons, a route around an obstacle and minimap direction without camera stepping.
- Customize an owned ride, buy near a stocked workshop and refit an owned part while mounted. Confirm another client sees the change.
- Switch view, adjust routed audio, rebind an action, set weather as host and verify remote behavior.
- Save/load, travel, leave for offline and join again. Inspect private/public records and shared-story voting, then repeat with a packaged build.
Find the source of a problem
Production work and further references
Remaining production acceptance includes real EOS accounts/machines, physical gamepads, packaging/cook audits, latency/loss and production-world travel. Finished weapon, ride, animal, armor and interaction animation sets; realistic materials/audio; profession activities; production vehicle physics; broad world-actor persistence; and cross-host storage require their own content and integration work.
The included generated props and native examples are replaceable development content. The system does not claim that a selectable skill is a finished activity or that every arbitrary Blueprint vehicle is plug-and-play physics.