Project settings¶
A plugin carries content, not project configuration. These settings live in the project's Config/*.ini files. The template project has them all; a project that adds the GASPALS plugin needs to copy them. The copy-ready block is in Installation.
Collision¶
Project Settings > Engine > Collision. Stored in DefaultEngine.ini, section [/Script/Engine.CollisionProfile].
Channels¶
| Slot | Name | Kind | Default response | Used for |
|---|---|---|---|---|
ECC_GameTraceChannel1 | Traversable | Trace | Ignore | Traversal finds obstacles to vault, hurdle and mantle with this channel. Level geometry that should be traversable blocks it. |
ECC_GameTraceChannel2 | Mouse | Trace | Ignore | Mouse click traces of the look-at example level (PC_LookAtPOI). The GASPALS systems do not trace it (the fixed-camera cursor aim uses Visibility). |
ECC_GameTraceChannel3 | Obstacle | Object | Ignore | Moving obstacles of the physics obstacle course in RagdollLevel; the Ragdoll profile blocks it. |
Slots, not names
Blueprints store trace channels by slot (TraceTypeQuery3 is the first custom trace channel). Keep Traversable in the first custom trace slot and Mouse in the second. If your project already has custom channels in these slots, move them, or update the trace nodes in GASPALS that use these channels.
Profiles¶
| Profile | Object type | Notes |
|---|---|---|
| TraversalObjectPreset | WorldDynamic | Blocks everything, including Traversable. Use it on meshes the character can vault, hurdle or mantle. The demo levels use the LevelBlock_Traversable Blueprint instead, which sets the same response on its mesh. |
| ObstaclePreset | Obstacle | Moving obstacles of the obstacle course: ignores world, pawns and camera; blocks the Ragdoll profile. |
| CharacterCapsule | Pawn | Capsule of the Mover pawns: ignores Visibility and Camera, so the camera and visibility traces pass through characters. The CMC pawn keeps the engine's Pawn profile. |
| Ragdoll (edited) | PhysicsBody | The engine profile, edited to ignore Camera and block Obstacle. |
Data-driven console variables¶
Project Settings > Engine > Data Driven CVars. Section [/Script/Engine.DataDrivenConsoleVariableSettings].
These are console variables declared by the project, which Blueprints read with Get Console Variable * Value and can react to when they change. GASPALS uses them for runtime switches (camera style, pawn class, character) and debug drawing. If they are missing, the reads return 0 or false, which changes behavior silently: for example DDCVar.NewGameplayCameraSystem.Enable false switches the pawns to the old spring-arm camera, and DDCVar.ThreadSafeAnimationUpdate.Enable false moves the animation update to the game thread.
The list, with what each one does, is in Console variables.
Navigation¶
The cover run builds its path on the owning client. Without client-side navigation, clients get no path and run in a straight line. Levels also need a NavMeshBoundsVolume (with the navmesh built) for the cover run to path around obstacles.
Motion matching¶
Buffer size for the pose search availabilities, from the Game Animation Sample.
Physics¶
Physics substepping keeps ragdolls and physical animation stable at low frame rates.
Engine¶
A 1 cm near clip plane. First person with aim down sights puts the rear sight a few centimeters from the camera; the default (10 cm) clips it.
Console variables set at startup¶
[ConsoleVariables]
p.EnableCharacterAccelerationReplication=1
net.SubObjects.DefaultUseSubObjectReplicationList=1
fx.Niagara.ForceLastTickGroup=1
| Variable | Why |
|---|---|
p.EnableCharacterAccelerationReplication | The CMC replicates the owner's acceleration to simulated proxies. Motion matching on remote CMC characters reads it, and the CMC cover movement relies on it. |
net.SubObjects.DefaultUseSubObjectReplicationList | Replicated subobjects use the registered subobject list (Mover and Network Prediction). |
fx.Niagara.ForceLastTickGroup | Niagara effects tick last, after the animation, so effects attached to bones follow the final pose. |
Rendering¶
The template's [/Script/Engine.RendererSettings] section matches the Game Animation Sample (Lumen, virtual shadow maps, Nanite, TSR...). Four lines matter for the characters:
| Setting | Why |
|---|---|
r.GPUSkin.Support16BitBoneIndex=True | MetaHuman meshes have more than 256 bones per section. |
r.GPUSkin.UnlimitedBoneInfluences=True | MetaHuman meshes use more than 8 influences per vertex. |
r.SkinCache.CompileShaders=True | Skin cache shaders, used by MetaHuman deformers and grooms. |
r.SkinCache.DefaultBehavior=0 | Skin cache off unless a mesh asks for it (inclusive mode). |
Network Prediction¶
DefaultNetworkPrediction.ini (whole file):
[/Script/NetworkPrediction.NetworkPredictionSettingsObject]
Settings=(PreferredTickingPolicy=Independent,ReplicatedManagerClassOverride=None,FixedTickFrameRate=60,bForceEngineFixTickForcePhysics=True,SimulatedProxyNetworkLOD=Interpolated,FixedTickInterpolationBufferedMS=100,IndependentTickInterpolationBufferedMS=100,IndependentTickInterpolationMaxBufferedMS=250,FixedTickInputSendCount=6,IndependentTickInputSendCount=6,MaximumRemoteInputFaultLimit=6)
The Mover pawns run Network Prediction with independent ticking (each client simulates at its own frame rate) and interpolated simulated proxies. Without this file the engine defaults apply, which changes how remote Mover characters move.
Gameplay tags¶
DefaultGameplayTags.ini declares the tags the content uses: Foley.Event.* (footsteps, jumps, landings, ragdoll impacts), MotionMatching.* (database tags), SmartObject.ObjectType.* and StateTree.* (NPC and bench demos), plus a few redirects. Copy the file, or merge its +GameplayTagList lines into yours.
Input¶
[/Script/Engine.InputSettings]
DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput
DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent
DefaultTouchInterface=/GASPALS/Input/TIS_MobileControls.TIS_MobileControls
GASPALS uses Enhanced Input only (the engine default in 5.8). The touch interface is optional.
Maps and modes¶
[/Script/EngineSettings.GameMapsSettings]
EditorStartupMap=/GASPALS/Levels/RagdollLevel.RagdollLevel
GameDefaultMap=/GASPALS/Levels/DefaultLevel.DefaultLevel
There is no global default game mode: each GASPALS level sets its game mode in its World Settings (GM_Sandbox for DefaultLevel and NPCLevel, GM_Sandbox_Ragdoll for RagdollLevel, GM_LookAtPOI for the look-at example). Set your own maps here.
Packaging¶
DefaultGame.ini:
| Setting | Why |
|---|---|
+PrimaryAssetTypesToScan=(PrimaryAssetType="GameFeatureData", ...) | One of the enabled engine plugins is a game feature plugin. Without this entry the cook fails (UAT exit code 25, unknown cook failure). |
+MapsToCook=(FilePath="/GASPALS/Levels/DefaultLevel") | The demo level is cooked. Replace with your levels. |
Packaging also needs a C++ toolchain (Visual Studio 2022 on Windows): the engine plugins GASPALS enables are not on by default, so the packaging tool builds a game target for the project even though it has no code.