Skip to content

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.

[/Script/NavigationSystem.NavigationSystemV1]
bAllowClientSideNavigation=True

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

[/Script/PoseSearch.PoseSearchSettings]
AvailabilitiesBufferSize=230

Buffer size for the pose search availabilities, from the Game Animation Sample.

Physics

[/Script/Engine.PhysicsSettings]
bSubstepping=True
MaxSubstepDeltaTime=0.016667
MaxSubsteps=16

Physics substepping keeps ragdolls and physical animation stable at low frame rates.

Engine

[/Script/Engine.Engine]
NearClipPlane=1.000000

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.